2.3 KiB
2.3 KiB
Despliegue en Coolify
Arquitectura recomendada
| Servicio Coolify | Repo / Dockerfile | Puerto |
|---|---|---|
| moraworld-web | apps/web/Dockerfile (build context: raíz del monorepo) |
3000 |
| moraworld-api | apps/api/Dockerfile (build context: raíz del monorepo) |
3001 |
| PostgreSQL | Servicio Coolify o externo | 5432 |
| Redis | Servicio Coolify o externo | 6379 |
Variables de entorno
API (moraworld-api)
DATABASE_URL=postgresql://USER:PASS@HOST:5432/moraworld
REDIS_URL=redis://HOST:6379
API_PORT=3001
JWT_SECRET=<generar-32-chars-minimo>
CORS_ORIGINS=https://tu-dominio.com
NODE_ENV=production
Web (moraworld-web)
NEXT_PUBLIC_API_URL=https://api.tu-dominio.com
PORT=3000
NODE_ENV=production
En build de Coolify para web, pasar
NEXT_PUBLIC_API_URLcomo build argument si usas Dockerfile (ya declarado enapps/web/Dockerfile).
Build en Coolify
- Conectar repositorio Git.
- Crear dos aplicaciones desde el mismo repo:
Aplicación API
- Build Pack: Dockerfile
- Dockerfile location:
apps/api/Dockerfile - Base directory / Context:
/(raíz del monorepo) - Health check path:
/api/health - Puerto expuesto: 3001
Aplicación Web
- Build Pack: Dockerfile
- Dockerfile location:
apps/web/Dockerfile - Base directory / Context:
/ - Health check path:
/ - Puerto expuesto: 3000
Migraciones en producción
Ejecutar una vez (o en CI) antes/después del deploy de API:
pnpm db:generate
pnpm exec prisma migrate deploy --schema=packages/database/prisma/schema.prisma
En Coolify puedes usar un one-off command o job con imagen Node y DATABASE_URL del servicio Postgres.
Desarrollo local vs Coolify
| Local | Coolify | |
|---|---|---|
| Postgres/Redis | docker compose up |
Servicios gestionados |
| API | pnpm --filter @moraworld/api dev |
Contenedor NestJS |
| Web | pnpm --filter @moraworld/web dev |
Contenedor Next standalone |
| Dominio | localhost | HTTPS + dominio real |
Notas
- No subir
.enval repositorio. - Ajustar
CORS_ORIGINScon el dominio exacto del frontend. - Para archivos (facturas/fotos), configurar S3 o MinIO en Fase 1 (
S3_*en.env.example).