Español
Instalación
Despliegue en Dokploy

Despliegue en Dokploy

Es la vía recomendada: Dokploy construye las imágenes desde tu repositorio, gestiona los certificados y reinicia solo el servicio que cambió.

Lo que vas a crear

Tres aplicaciones y dos servicios de datos:

Aplicaciones     API · Web · Worker
Servicios        PostgreSQL · Redis
Volumen          zapi-files-data

Crear PostgreSQL y Redis

Desde Dokploy, crea un servicio PostgreSQL 16 y otro Redis 7. Anota sus credenciales: las necesitarás en las tres aplicaciones.

Conéctate a PostgreSQL una vez y habilita la extensión:

CREATE EXTENSION IF NOT EXISTS pgcrypto;

Crear el volumen de archivos

Crea un volumen llamado zapi-files-data y móntalo en API y Worker con la misma ruta interna:

Mount path: /var/lib/zapi/files
🚫

Si las rutas internas no coinciden, o si cada servicio monta un volumen distinto, se rompen las miniaturas, las importaciones, las marcas de agua y las imágenes generadas con IA. No lo montes en Web: no lo necesita.

Crear las tres aplicaciones

Las tres apuntan al mismo repositorio y rama, con contexto raíz:

AplicaciónDockerfileContextDominioPuerto
APIDockerfile.api.api.zapisocial.com3001
WebDockerfile.web.zapisocial.com y app.zapisocial.com3000
WorkerDockerfile.worker.ninguno

No definas un Start Command manual: cada imagen ya trae el suyo.

Configurar las variables

Cada aplicación recibe solo lo que usa. Está detallado en Variables de entorno.

Vigilar solo lo que cambió

Cada aplicación tiene un campo Watch Paths. Sin él, un cambio de documentación reinicia el Worker mientras está entregando publicaciones.

AplicaciónRutas
Webapps/web/**, packages/{ui,contracts,api-client}/**, Dockerfile.web
APIapps/api/**, packages/{contracts,database,file-ingestion}/**, Dockerfile.api
Workerapps/worker/**, packages/{contracts,database,file-ingestion}/**, Dockerfile.worker

Las tres añaden además package.json, bun.lock, turbo.json y tsconfig.json.

⚠️

Añade cada ruta por separado con el botón +. Si las pegas todas juntas separadas por espacios se crea un único patrón que no coincide con nada, y esa aplicación deja de desplegarse en silencio.

Aplicar las migraciones

Una vez que la API tiene su DATABASE_URL, ejecuta en su consola:

bun --filter @workspace/database db:migrate

Repite este paso en cada versión que incluya migraciones.

Desplegar

Despliega API, luego Worker, luego Web. Comprueba que la API responde antes de seguir:

GET https://api.zapisocial.com/v1/health

Debe devolver status, database y redis en ok.

Certificados

Activa HTTPS en los tres dominios. No expongas PostgreSQL ni Redis con dominio público.