Firebase App Hosting

NutriTrack Pro — Guía de Despliegue

Next.js 14 · SSR · CI/CD GitHub · Cloud Secret Manager · europe-west1

Next.js 14 SSR Firebase Blaze Plan CI/CD GitHub
Proyecto Firebase
nutritrack-prod
Backend ID
nutritrack-backend
Región
europe-west1
Estado
✓ Listo para desplegar
Despliegue activo
Último rollout: main@a3f7b92 · hace 12 min · europa-west1 · 2 instancias activas
https://app.nutritrack.pro
⚙️
Archivos de Configuración
firebase.json
{
  "apphosting": {
    "backendId": "nutritrack-backend",
    "rootDir": "/",
    "ignore": [
      "node_modules",
      ".git",
      ".next",
      "firebase-debug.log",
      "firebase-debug.*.log",
      "functions",
      "*.test.ts"
    ]
  }
}
apphosting.yaml
# Cloud Run service config
runConfig:
  cpu: 1
  memoryMiB: 512
  minInstances: 1    # evitar cold starts
  maxInstances: 20
  concurrency: 80

# Variables de entorno
env:
  - variable: NEXT_PUBLIC_FIREBASE_API_KEY
    secret: firebase-api-key-prod
    availability: [BUILD, RUNTIME]

  - variable: NEXT_PUBLIC_APP_URL
    value: "https://app.nutritrack.pro"
    availability: [BUILD, RUNTIME]

  - variable: DATABASE_URL
    secret: database-url-prod
    availability: [RUNTIME]

  - variable: STRIPE_SECRET_KEY
    secret: stripe-secret-key-prod
    availability: [RUNTIME]
☁️
Recursos Cloud Run — NutriTrack Backend
1
vCPU
cpu: 1
🧠
512
RAM (MiB)
memoryMiB: 512
🔥
1
Instancias mín.
minInstances: 1
📈
20
Instancias máx.
maxInstances: 20
🔁
80
Concurrencia
concurrency: 80
🔐
Gestión de Secretos — Cloud Secret Manager
Variable Tipo Nombre en Secret Manager Disponibilidad Descripción
NEXT_PUBLIC_FIREBASE_API_KEY Secret firebase-api-key-prod BUILDRUNTIME Clave pública Firebase SDK
NEXT_PUBLIC_APP_URL Literal — (valor directo) BUILDRUNTIME URL pública de la app
DATABASE_URL Secret database-url-prod RUNTIME Conexión a base de datos
STRIPE_SECRET_KEY Secret stripe-secret-key-prod RUNTIME API key pagos Stripe
💻
Comandos CLI — Setup Completo
1
Crear el backend en Firebase App Hosting conectado al repositorio GitHub
$ npx -y firebase-tools@latest apphosting:backends:create \
  --backend nutritrack-backend \
  --primary-region europe-west1 \
  --app <webAppId>
# Vincula con GitHub: github.com/nutritrack/nutritrack-pro, rama main
2
Crear secretos en Cloud Secret Manager (uno por variable sensible)
$ npx -y firebase-tools@latest apphosting:secrets:set firebase-api-key-prod
# Introduce: AIzaSyD3k9X...nutritrack_prod_key

$ npx -y firebase-tools@latest apphosting:secrets:set database-url-prod
# Introduce: postgresql://nutritrack:***@db.nutritrack.pro:5432/prod

$ npx -y firebase-tools@latest apphosting:secrets:set stripe-secret-key-prod
# Introduce: sk_live_51N3...
3
Verificar accesos — el service account de App Hosting debe poder leer los secretos
$ npx -y firebase-tools@latest apphosting:secrets:grantaccess firebase-api-key-prod
$ npx -y firebase-tools@latest apphosting:secrets:grantaccess database-url-prod
$ npx -y firebase-tools@latest apphosting:secrets:grantaccess stripe-secret-key-prod
4
Primer despliegue manual (o trigger desde GitHub push a main)
$ npx -y firebase-tools@latest deploy
# ✓ Deploying to: nutritrack-prod (App Hosting)
# ✓ Rollout created: rollout-2026061401
# ✓ Backend URL: https://nutritrack-backend--main-abc123.europe-west1.hosted.app
# ✓ Custom domain: https://app.nutritrack.pro
5
Listar rollouts y verificar estado de despliegues anteriores
$ npx -y firebase-tools@latest apphosting:rollouts:list nutritrack-backend
# ID ESTADO COMMIT FECHA
# rollout-2026061401 SUCCESS a3f7b92 2026-06-14 10:32
# rollout-2026061301 SUCCESS d1e8a44 2026-06-13 16:15
🔄
Flujo CI/CD — GitHub → Firebase App Hosting
👩‍💻
Desarrollador
git push origin main
GitHub
Webhook trigger
🔨
Build Phase
npm run build + envs
📦
Container
Docker image pushed
☁️
Cloud Run
europe-west1 · live
Trigger
Push a rama main en nutritrack/nutritrack-pro. Firebase App Hosting escucha el webhook de GitHub automáticamente tras backends:create.
Build
Firebase inyecta variables BUILD del apphosting.yaml y secretos resueltos desde Cloud Secret Manager antes de npm run build.
Rollback
En caso de error: apphosting:rollouts:create --git-commit d1e8a44 repliega al commit estable anterior en segundos.