Saltar a contenido

Go-Live Checklist

Checklist corto y operativo para sacar FarmAPI a producción en https://estudioapi.com/farmapi.

1. Estado mínimo antes de desplegar

El producto no debería salir si no se cumple todo esto:

  • 19/19 territorios en ready o no_change
  • cobertura nacional >= 99.5%
  • missing_coords_total = 0 o, como máximo, residuo trazado y asumido manualmente
  • panel admin operativo con GitHub SSO
  • formularios públicos configurados con Resend
  • SAAS_MOCK_MODE=false y credenciales reales del SaaS

2. Preparar el .env de producción

cp .env.prod.example .env.prod.local
make prod-env-bootstrap ENV_FILE=.env.prod.local
chmod 600 .env.prod.local

Completa después los valores reales que no pueden venir de plantilla:

  • DATABASE_URL
  • GITHUB_CLIENT_ID
  • GITHUB_CLIENT_SECRET
  • RESEND_API_KEY
  • RESEND_FROM_EMAIL
  • TASKS_SERVICE_ACCOUNT_EMAIL si se activa Cloud Tasks

3. Valores cerrados para producción

Estos son los valores esperados en producción:

  • FARMAAPI_ENV=prod
  • APP_BASE_PATH=/farmapi
  • PUBLIC_EXAMPLE_BASE_URL=https://estudioapi.com/farmapi
  • SAAS_BASE_URL=https://estudioapi.com/farmapi
  • SAAS_OAUTH_TOKEN_URL=https://estudioapi.com/farmapi/oauth/token
  • GITHUB_REDIRECT_URI=https://estudioapi.com/farmapi/auth/github/callback
  • TRUSTED_HOSTS_CSV=estudioapi.com,www.estudioapi.com
  • ADMIN_ALLOWED_ORIGINS_CSV=https://estudioapi.com,https://www.estudioapi.com
  • WEBHOOK_REQUIRE_HTTPS=true
  • WEBHOOK_ALLOW_LOCALHOST=false
  • RATE_LIMIT_BACKEND=redis
  • OSM_GEOCODING_ENABLED=false
  • ARCGIS_GEOCODING_ENABLED=true
  • MAPS_GEOCODING_ENABLED=true
  • SAAS_MOCK_MODE=false
  • DOCKER_STARTUP_PREFLIGHT_MODE=prod

4. Preflight obligatorio

Antes de desplegar:

make preflight-prod ENV_FILE=.env.prod.local

Este check debe quedar en prod_ready=true.

Si quieres ver el detalle exacto:

make preflight-prod-json ENV_FILE=.env.prod.local

5. Build y arranque

docker compose -f docker-compose.coolify.yml up -d --build

El guard de arranque debe aceptar el entorno. Si hay placeholders inseguros, callback GitHub incorrecto o Resend incompleto, el contenedor debe abortar.

6. Verificación funcional tras levantar

Superficie pública:

uv run python scripts/verify_live_surface.py \
  --base-url https://estudioapi.com/farmapi \
  --require-ok

Cobertura y estado vivo:

uv run python scripts/runtime_certify_current.py \
  --env-file .env.prod.local \
  --require-production-go

7. Comprobaciones manuales finales

  • comprobar que Coolify publica certificado para:
  • https://estudioapi.com/farmapi
  • https://www.estudioapi.com/farmapi
  • entrar en https://estudioapi.com/farmapi/admin
  • validar login GitHub del admin real
  • crear un cliente
  • generar una API key
  • asignar scope
  • descargar un CSV por territorio
  • comprobar landing pública
  • comprobar documentación in-app en /farmapi/docs/

8. Go / No-Go

Go

  • preflight-prod verde
  • verificacion de Resend en verde
  • runtime_certify_current verde
  • login admin correcto
  • exports públicos correctos

No-Go

  • falta cualquier secreto crítico
  • GitHub OAuth sigue apuntando a localhost
  • Resend no entrega
  • SAAS_MOCK_MODE=true
  • cobertura o coordenadas no están cerradas