Modos de Despliegue
Floutic tiene 4 modos de despliegue que controlan el comportamiento de los servicios, emails y conectividad:
| Modo | Archivo Docker | DB | Redis | Emails | Dominio |
|---|---|---|---|---|---|
| Producción | docker-compose.yml + docker-compose.prod.yml | floutic | DB 0 | SMTP real | floutic.com |
| Desarrollo | docker-compose.yml + docker-compose.dev.yml | floutic | DB 0 | Mailpit (capturados) | localhost |
| Staging | docker-compose.coolify-staging.yml | floutic_dev (propia) | DB 0 (propio) | SMTP real | dev.floutic.com |
| Local dev | docker-compose.yml | floutic | DB 0 | SMTP real | localhost |
Modo Producción (por defecto)
Los emails se envían por SMTP real a los usuarios.
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
En este modo, las variables del .env se usan directamente:
| Variable | Valor ejemplo |
|---|---|
SMTP_HOST | mail.haorp.es |
SMTP_PORT | 587 |
SMTP_USER | daniel@haorp.es |
SMTP_PASSWORD | (tu password) |
:::danger Importante En modo producción los emails se envían de verdad. No usar para testing. :::
Modo Desarrollo (con Mailpit)
Los emails se capturan en Mailpit (un servidor SMTP de testing) y no se envían a usuarios reales. Se pueden ver en el panel web de Mailpit.
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
En este modo, docker-compose.dev.yml sobreescribe las variables SMTP:
| Variable | Valor dev |
|---|---|
SMTP_HOST | mailpit |
SMTP_PORT | 1025 |
SMTP_USER | (vacío) |
SMTP_PASSWORD | (vacío) |
Ver emails capturados
Acceder al panel web de Mailpit: http://localhost:8025
Todos los emails que la app "envía" aparecen ahí sin llegar a ningún destinatario real.
Cómo funciona
El archivo docker-compose.dev.yml es un override explícito que solo se activa cuando se incluye con -f. Docker Compose no lo carga automáticamente.
docker-compose.override.yml → ❌ Se carga automáticamente (PROBLEMA)
docker-compose.dev.yml → ✅ Solo se carga con -f explícito
Anteriormente existía docker-compose.override.yml que se cargaba automáticamente y capturaba todos los emails en Mailpit sin que nadie se diera cuenta. Se renombró a docker-compose.dev.yml para evitar este problema.
Cambiar entre modos
De producción a desarrollo
docker compose down
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
De desarrollo a producción
docker compose down
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
:::tip Verificar el modo activo
# Ver qué SMTP está usando el backend
docker compose exec backend env | grep SMTP_HOST
# SMTP_HOST=mail.haorp.es → Producción (emails reales)
# SMTP_HOST=mailpit → Desarrollo (emails capturados)
:::
Checklist antes de ir a producción
-
docker-compose.override.ymlNO existe en el directorio raíz -
docker compose exec backend env | grep SMTP_HOSTmuestra el SMTP real -
EMAILS_ENABLED=Trueen el backend - Envío de email de prueba exitoso
Modo Staging
Staging se gestiona con Coolify y tiene sus propios contenedores de PostgreSQL y Redis, completamente aislados de producción.
- Compose:
docker-compose.coolify-staging.yml - Branch:
dev(auto-deploy via webhook) - Protección: Basic Auth (
floutic/floutic123) - Stripe: SIEMPRE
sk_test_*
:::info Aislamiento completo
Staging NO comparte PostgreSQL ni Redis con producción. Tiene sus propios contenedores en la red Docker mwgcze9lhlb5qc1syww3rfrv. Se puede detener, reiniciar o destruir sin afectar producción.
:::
Variables clave de staging (configuradas en Coolify UI):
| Variable | Valor |
|---|---|
DATABASE_URL | ...@postgres:5432/floutic_dev (contenedor propio) |
REDIS_URL | redis://redis:6379/0 (contenedor propio) |
ENVIRONMENT | staging |
STRIPE_SECRET_KEY | sk_test_* (SIEMPRE test) |
FRONTEND_URL | https://dev.floutic.com |
Para detalles completos, ver Entorno de Staging.
Desplegar staging
El deploy es automático al hacer push a dev:
git push origin dev
# Coolify detecta el push vía webhook y despliega automáticamente
Para deploy manual desde Coolify UI: navegar a la app staging y pulsar "Deploy".
Verificar staging
# Health check
curl -sf -u floutic:floutic123 https://dev.floutic.com/api/v1/health
# Frontend accesible (con Basic Auth)
curl -sf -u floutic:floutic123 https://dev.floutic.com