Observabilidad y operación
Salud
GET /healthzresponde200 ok(texto plano) desde nginx (nginx.conf:14-17). Es el sondeo de salud disponible para Cloud Run o monitorización externa.
Logs, métricas y trazas
- Sin instrumentación propia: no hay logger de aplicación, métricas ni trazas en el repo (es estático;
Dockerfile:14-20). - Logs de plataforma: nginx escribe sus logs de acceso/error estándar, y Cloud Run los recoge en Cloud Logging.
DESCONOCIDO:configuración explícita de logging/alerting en Cloud Run (no definida en el repo). - Sin analítica de tráfico: no hay Google Analytics ni similares (ver
funcional/06-cumplimiento.md).
Resiliencia
- Cloud Run escala de 0 a 2 instancias (
.github/workflows/deploy.yml:49-50): arranque en frío posible desde cero, techo de 2 instancias. - gzip y caché de estáticos a 1 año reducen carga y latencia (
nginx.conf:24-33). - No hay inyección de fallos ni pruebas de caos (N/A para un blog estático).
Operación: publicar (deploy MANUAL)
Recordatorio operativo crítico: el despliegue NO es automático. Ver tecnico/05-despliegue.md. Procedimiento manual del operador:
npm run buildynpm run previewpara validar localmente (package.json:9-10).docker buildde la imagen multistage (Dockerfile).docker pusha Artifact Registry (:shay:latest).gcloud run deploy personal-blog --region europe-west1 ... --port 8080(parámetros en.github/workflows/deploy.yml:39-52).
Verificación tras desplegar
Conforme al principio de verificación del workspace (CLAUDE.md raíz §7), no basta con que el comando no dé error. Comprobar:
- Estado del servicio:
gcloud run services describe personal-blog --region europe-west1 --project homelab-466309(revisar la revisión activa yREADY). - Salud en vivo:
GET https://www.navarro-bores.com/healthz→ok(nginx.conf:14-17). - Contenido actualizado: confirmar que la versión servida corresponde al
mainesperado (mitiga el desfase por deploy manual;tecnico/05-despliegue.md).
Runbook: recordatorio de expiración de dominio
scripts/domain-reminder.shcalcula días hastaEXPIRY_DATEy notifica por umbrales (expirado / ≤14 / ≤30 / ≤60 días) víaosascript(scripts/domain-reminder.sh:7-22); registra en/tmp/domain-reminder.log(:24).- Se instala como LaunchAgent de macOS (
scripts/com.navarro-bores.domain-reminder.plist;scripts/domain-reminder.sh:4). - Acción de mantenimiento: tras renovar el dominio en eNom, actualizar
EXPIRY_DATE(scripts/domain-reminder.sh:7,CLAUDE.md:34).