Configuración de Docker Compose para Supabase Local Development Stack
Cuándo usar esta combinación
Utiliza este stack para desarrollo local desacoplado de la nube, prototipado rápido y ejecución de pruebas de integración automatizadas en pipelines de CI/CD. Es ideal cuando el equipo necesita paridad de entorno estricta, depurar lógica de base de datos (PostgreSQL, Row Level Security, Triggers) sin incurrir en costos de infraestructura cloud, o trabajar en entornos sin conexión a internet manteniendo todas las APIs de Supabase (Auth, Storage, Realtime, PostgREST).
Variables de entorno críticas para producción
POSTGRES_PASSWORD: Contraseña maestra de la base de datos PostgreSQL. En desarrollo viene con valores por defecto débiles (postgres); en producción debe ser una cadena aleatoria de alta entropía (mínimo 32 caracteres).JWT_SECRET: Clave criptográfica utilizada por GoTrue (Auth), PostgREST y Kong para firmar y validar tokens de sesión. Si se ve comprometida, cualquiera puede falsificar identidades y permisos.SERVICE_ROLE_KEY(y su contraparteANON_KEY): Tokens de acceso a la API derivados delJWT_SECRET. La claveSERVICE_ROLEomite las políticas de seguridad a nivel de fila (RLS), otorgando control total sobre los datos. Deben regenerarse obligatoriamente al cambiar elJWT_SECRET.
Consejo de Arquitectura y Rendimiento
Implementa un Connection Pooler (PgBouncer o Supavisor) y restringe la exposición de red:
Por defecto, el stack local expone PostgreSQL directamente en el puerto 5432 y las APIs en el 8000. En producción, nunca expongas el puerto de la base de datos a internet pública; mantén PostgreSQL dentro de una red interna de Docker (internal: true) accesible únicamente por Kong y los servicios del stack.
Además, PostgreSQL crea un proceso pesado por cada conexión cliente. Si tu aplicación usa entornos serverless o microservicios que abren conexiones concurrentes cortas, agotarás el límite de max_connections rápidamente. Activa y ajusta PgBouncer o Supavisor para limitar las conexiones reales hacia la base de datos, y dimensiona la variable shared_buffers de PostgreSQL al 25% de la RAM total asignada al contenedor.
Checklist de Seguridad antes de desplegar
- Cambiar las contraseñas por defecto en el archivo .env
- Mapear volúmenes persistentes en el VPS
- Configurar las reglas de firewall para los puertos requeridos