Entorno de Staging (dev.floutic.com)
El entorno de staging permite validar cambios antes de llegar a producción. Se gestiona con Coolify y tiene sus propios servicios de PostgreSQL y Redis aislados.
Arquitectura
Staging tiene sus propios contenedores de PostgreSQL y Redis, independientes de producción. El despliegue se gestiona con Coolify desde la branch dev.
┌──────────────────────────────────────────────────────────┐
│ Servidor VPS (178.105.42.28) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Coolify │ │
│ │ │ │
│ │ App: staging (branch dev) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌─────────┐ ┌────────┐ │ │
│ │ │ postgres │ │ redis │ │backend │ │frontend│ │ │
│ │ │ :5432 │ │ :6379 │ │-dev │ │-dev │ │ │
│ │ │ floutic │ │ │ │ :8000 │ │ :3000 │ │ │
│ │ │ _dev │ │ │ │ │ │ │ │ │
│ │ └──────────┘ └──────────┘ └────┬────┘ └───┬────┘ │ │
│ │ Red: mwgcze9l... │ │ │ │
│ └─────────────────────────────────────┼──────────┼──────┘ │
│ │ │ │
│ ┌─────────────────────────────────────┼──────────┼──────┐ │
│ │ Traefik (coolify-proxy)│ │ │ │
│ │ dev.floutic.com ─── Basic Auth ──┼──────────┘ │ │
│ │ floutic.com │ │ │
│ └─────────────────────────────────────┼──────────────────┘ │
│ │ │
│ App: production (branch main) │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┴──┐ ┌─────────┐ │
│ │ postgres │ │ redis │ │ backend │ │frontend │ │
│ │ floutic │ │ │ │ :8000 │ │ :3000 │ │
│ └──────────┘ └──────────┘ └─────────────┘ └─────────┘ │
│ Red: bo0fos7... │
└──────────────────────────────────────────────────────────┘
Recursos asignados (staging)
| Servicio | Memoria límite | Memoria reservada |
|---|---|---|
postgres | Sin límite | — |
redis | Sin límite | — |
backend-dev | 1 GB | 256 MB |
frontend-dev | 1 GB | 256 MB |
Coolify
IDs de referencia
| Recurso | ID | UUID |
|---|---|---|
| Staging (app) | 2 | mwgcze9lhlb5qc1syww3rfrv |
| Production (app) | 3 | bo0fos7syldixxvorl29in98 |
| Project | 1 | fcfrm6wnesc47un28gyvobfd |
| Environment | 2 | — |
Acceso
- Coolify UI:
http://178.105.42.28 - Staging URL:
https://dev.floutic.com - Production URL:
https://floutic.com
Credenciales
| Servicio | Usuario | Contraseña |
|---|---|---|
Staging DB (floutic_dev) | floutic | floutiC_PassW0rd |
| Staging admin (app) | admin@floutic.com | Admin123! |
| Basic Auth (staging web) | floutic | floutic123 |
| Coolify DB | coolify | coolify |
Configuración
Archivo compose
El archivo docker-compose.coolify-staging.yml en la raíz del repo es el que Coolify usa para staging. Contiene:
- postgres:15 — Base de datos propia con healthcheck
- redis:7-alpine — Redis propio con healthcheck
- backend-dev — Backend en modo desarrollo
- frontend-dev — Frontend Astro en modo dev con patch de allowedHosts
:::info allowedHosts
El compose incluye un command override que parchea astro.config.mjs al arrancar para incluir dev.floutic.com en los hosts permitidos de Vite. Esto es necesario porque el repo principal solo incluye localhost y floutic.haorp.es.
:::
Variables de entorno
Las variables se gestionan desde el panel de Coolify (Environment Variables). Las necesarias:
| Variable | Valor | Notas |
|---|---|---|
DATABASE_URL | postgresql+asyncpg://floutic:floutiC_PassW0rd@postgres:5432/floutic_dev | |
REDIS_URL | redis://redis:6379/0 | |
ENVIRONMENT | staging | |
JWT_SECRET | (generado) | Distinto al de producción |
FRONTEND_URL | https://dev.floutic.com | |
CORS_ORIGINS | https://dev.floutic.com | |
STRIPE_SECRET_KEY | sk_test_* | SIEMPRE test en staging |
GHL_API_KEY | staging-placeholder | Requerido por Pydantic |
GHL_LOCATION_ID | staging-placeholder | Requerido por Pydantic |
GHL_WEBHOOK_SECRET | staging-placeholder | Requerido por Pydantic |
N8N_API_KEY | staging-placeholder | Requerido por Pydantic |
:::warning Placeholders GHL y N8N tienen valores placeholder porque staging no debe interactuar con servicios reales. Si se necesitan, se configuran desde Coolify UI. :::
Servicios no incluidos en staging
Los siguientes servicios no se ejecutan en staging:
| Servicio | Motivo |
|---|---|
| OpenObserve | No enviar datos de dev a producción |
| GoHighLevel | No mezclar datos de test con CRM real |
| n8n | No disparar workflows reales desde staging |
Seguridad
Basic Auth
Staging está protegido con Basic Auth via Traefik middleware:
- URL:
https://dev.floutic.com - Usuario:
floutic - Contraseña:
floutic123
La configuración se encuentra en coolify/traefik/ y se mantiene con un cron que asegura la conexión de red.
robots.txt
El archivo frontend/public/robots.txt bloquea indexación:
User-agent: *
Disallow: /
Despliegue automático
Webhook de GitHub
Cada push a la branch dev dispara un deploy automático en Coolify via webhook:
- Payload URL:
http://178.105.42.28/api/v1/webhooks/deploy/mwgcze9lhlb5qc1syww3rfrv - Content type:
application/json - Events: Push to
refs/heads/dev
Configurado en: GitHub → danielgap/Floutic → Settings → Webhooks
Flujo Git
main ← producción (floutic.com)
↑
dev ← staging (dev.floutic.com) — auto-deploy
↑
feature/* ← ramas de desarrollo, PR contra dev
| Rama | Entorno | Dominio | Auto-deploy |
|---|---|---|---|
main | Producción | floutic.com | No |
dev | Staging | dev.floutic.com | Sí (webhook) |
feature/* | Local | localhost | No |
Restauración
Si se pierde la configuración del servidor, consultar coolify/RESTORE.md en el repo para instrucciones completas de restauración.
Archivos de configuración en el repo:
coolify/
├── RESTORE.md # Instrucciones de restauración
├── crontab # Cron para mantener Basic Auth
├── scripts/
│ └── ensure-staging-auth.sh # Script auto-healing
└── traefik/
├── staging-auth.yaml # Middleware Basic Auth
└── staging-auth-router.yaml # Router + Service