Español
Instalación
Despliegue con Docker Compose

Despliegue con Docker Compose

Si no usas Dokploy, el repositorio trae un docker-compose.yml que levanta todo: PostgreSQL, Redis, migraciones, API, Worker y Web.

Este es el Compose completo de instalación. docker-compose.backend.yml es el Compose de API usado en Dokploy: contiene solo api y worker, y se conecta a PostgreSQL y Redis existentes. Su configuración está en Despliegue en Dokploy.

Arrancar

Crea un .env junto al docker-compose.yml con al menos esto:

POSTGRES_PASSWORD=una_clave_larga
REDIS_PASSWORD=otra_clave_larga
JWT_ACCESS_SECRET=un_secreto_muy_largo
PROVIDER_INTEGRATIONS_ENCRYPTION_KEY=clave_base64_de_32_bytes
API_PUBLIC_ORIGIN=https://api.tudominio.com
WEB_ORIGIN=https://app.tudominio.com
COOKIE_SECURE=true

Y levanta:

docker compose up -d --build

El servicio migrate corre antes que API y Worker y aplica las migraciones solo. No tienes que ejecutarlas a mano.

API y Worker se construyen desde Dockerfile.api, usando el target worker para el proceso de colas. Web usa Dockerfile.web y ya incluye el sitio público.

Volumen de archivos y hosts

Este Compose monta Files en /app/.data/files dentro de API y Worker; la modalidad Dokploy usa /var/lib/zapi/files. Respeta la ruta de cada modalidad al respaldar.

Para separar el sitio público y el panel por host, añade PORTAL_HOST al bloque environment del servicio web. El .env no se inyecta completo en Web. Configura también COOKIE_DOMAIN en el .env de API para compartir la sesión entre ambos hosts.

Qué queda expuesto

Por defecto solo se publican dos puertos, y únicamente en 127.0.0.1:

127.0.0.1:3000  → Web
127.0.0.1:3001  → API

PostgreSQL y Redis no se publican. Pon un proxy inverso delante que termine TLS y enrute los dominios a esos puertos.

⚠️

Compose es cómodo para probar y para una instalación pequeña en un solo servidor. Para producción con actualizaciones frecuentes, Dokploy te da certificados y despliegues por servicio sin trabajo extra.

Generar la clave de cifrado

openssl rand -base64 32

Guárdala. Si la pierdes, los canales conectados dejan de poder descifrarse.