Skip to content

navarro-bores.com (blog personal de Arturo Navarro)

Blog personal bilingüe (ES/EN) de Arturo Navarro de la Cruz, centrado en ciberseguridad, CISO, cumplimiento y liderazgo tecnológico. Sitio estático generado con VitePress y desplegado en Google Cloud Run.

Stack

  • VitePress 1.6.4 (sitio estático, Vue 3).
  • Bilingüe: locales es (por defecto) y en.
  • Despliegue: Docker (build Node 20 + serve Nginx) sobre Cloud Run (europe-west1).
  • CI/CD: .github/workflows/deploy.yml (formato GitHub Actions) para Gitea Actions; ⚠ HOY ningún host lo ejecuta: Actions desactivado en la Gitea local (has_actions=false, medido 2026-09-06) y sin remoto github. Decisión pendiente: issue #2.

Estructura

  • .vitepress/config.mts: configuración central (locales, nav, sidebar, SEO, sitemap, JSON-LD, búsqueda local).
  • .vitepress/theme/: tema personalizado (custom.css, index.ts).
  • es/ y en/: contenido por idioma (about, contact, projects, blog/). Cada artículo existe en ambos idiomas.
  • index.md: raíz que redirige a /es/ o /en/ según navigator.language.
  • public/: estáticos servidos tal cual (favicon.svg, og-cover.png).
  • scripts/: recordatorio de expiración de dominio (domain-reminder.sh + plist de LaunchAgent).
  • Dockerfile, nginx.conf: imagen de producción y servidor (puerto 8080, /healthz).
  • docs/ y README.md: documentación del repo (vistas funcional/tecnico), no salida de build.

Comandos clave

  • npm install: instalar dependencias.
  • npm run dev: servidor de desarrollo (VitePress).
  • npm run build: build a .vitepress/dist.
  • npm run preview: previsualizar el build.
  • Deploy: el workflow (build Docker, push a Artifact Registry, gcloud run deploy) se dispararía con un push a main, pero HOY no corre en ningún host (Actions desactivado en la Gitea local, sin remoto GitHub; medido 2026-09-06, issue #2): el único camino de deploy vivo es un gcloud run deploy manual, y ese comando está en ask del settings global (2026-09-06): es el gate efectivo. Cuando se rehabilite Actions, el gate real pasa a ser la verificación ANTES de commitear (npm run build en verde) porque el push desplegaría sin entorno intermedio; el workflow no tiene paths-ignore (cada commit a main desplegaría) y el repo no tiene hooks versionados: ambos van en el mismo acto que la rehabilitación (issue #2). Un workflow_dispatch correría en el runner y NO pasaría por el permiso de la sesión.

Reglas y gotchas

  • No hay lint ni tests definidos; solo dev/build/preview.
  • Contenido bilingüe: al añadir o editar un artículo, mantener la paridad ES/EN y actualizar el sidebar correspondiente en config.mts.
  • cleanUrls: true: enlazar sin .html. Nginx resuelve URLs limpias vía try_files.
  • El despliegue espera puerto 8080 y la imagen personal-blog en europe-southwest1-docker.pkg.dev; requiere el secret GCP_SA_KEY.
  • Split de región (fácil de confundir): el Artifact Registry está en europe-southwest1, pero Cloud Run corre en europe-west1. Son regiones distintas a propósito; no las unifiques.
  • El deploy usa la service account blueup-docs-deployer@homelab-466309.iam.gserviceaccount.com (útil para depurar permisos del despliegue).
  • domain-reminder.sh lleva la fecha de expiración del dominio hardcodeada (EXPIRY_DATE); actualizarla tras renovar.
  • node_modules/, .vitepress/cache/ y .vitepress/dist/ están en .gitignore.

Cybersecurity · Technology · Leadership