panels-origin/docker-compose.yml
Cursor Agent b68313c5ee
compose: unir migrate y api a la red coolify
El host qzegekm3sr2bevgxl4wh4th2 es el UUID interno de Postgres;
solo resuelve en esa red. Sin ella Liquibase lanza UnknownHostException.

Co-authored-by: alberto.martinez <alberto.martinez@mrdev.mx>
2026-09-03 05:25:53 +00:00

114 lines
3.2 KiB
YAML

# Coolify / producción — Postgres y Redis son recursos gestionados aparte.
# Liquibase corre solo en el job `migrate` (un shot por deploy); la API espera
# a que termine. No arranca Java dentro del contenedor de tráfico.
#
# Coolify: un solo archivo — docker-compose.yml. No añadir overlays.
# Local: docker compose -f docker-compose.yml -f overlays/compose.local.yml up --build
#
# `data` = red donde viven Postgres/Redis de Coolify (UUID tipo
# qzegekm3sr2bevgxl4wh4th2). Sin esta red, Liquibase da UnknownHostException.
services:
migrate:
build:
context: .
dockerfile: Dockerfile.migrate
restart: "no"
networks:
- default
- data
environment:
DATABASE_URL_PLATFORM_OWNER: ${DATABASE_URL_PLATFORM_OWNER:?}
DATABASE_URL_IAM_OWNER: ${DATABASE_URL_IAM_OWNER:?}
DATABASE_URL_CORE_OWNER: ${DATABASE_URL_CORE_OWNER:?}
command: ["all", "--context-filter=!dev"]
api:
build:
context: .
dockerfile: Dockerfile.api
restart: unless-stopped
depends_on:
migrate:
condition: service_completed_successfully
environment:
DENO_ENV: ${DENO_ENV:-production}
PORT: ${PORT:-8000}
SESSION_SECRET: ${SESSION_SECRET:?}
DOCS_KEY: ${DOCS_KEY:?}
SEED_PASSWORD: ${SEED_PASSWORD:-}
API_KEY: ${API_KEY:-}
PANEL_LOGIN_URL: ${PANEL_LOGIN_URL:?}
COOKIE_SECURE: ${COOKIE_SECURE:-true}
CORS_ORIGINS: ${CORS_ORIGINS:-}
VCARD_BASE: ${VCARD_BASE:-}
SMTP_HOST: ${SMTP_HOST:-}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASS: ${SMTP_PASS:-}
SMTP_FROM: ${SMTP_FROM:-}
DATABASE_URL_PLATFORM: ${DATABASE_URL_PLATFORM:?}
DATABASE_URL_PLATFORM_OWNER: ${DATABASE_URL_PLATFORM_OWNER:-}
DATABASE_URL_IAM: ${DATABASE_URL_IAM:?}
DATABASE_URL_IAM_OWNER: ${DATABASE_URL_IAM_OWNER:?}
DATABASE_URL_CORE: ${DATABASE_URL_CORE:?}
DATABASE_URL_CORE_OWNER: ${DATABASE_URL_CORE_OWNER:?}
REDIS_URL_IAM: ${REDIS_URL_IAM:?}
REDIS_URL_CORE: ${REDIS_URL_CORE:?}
S3_ENDPOINT: ${S3_ENDPOINT:-}
S3_BUCKET: ${S3_BUCKET:-}
S3_REGION: ${S3_REGION:-auto}
S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-}
S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-}
networks:
- default
- data
volumes:
- panel-data:/app/data
expose:
- "8000"
healthcheck:
test:
[
"CMD",
"deno",
"eval",
"const r=await fetch('http://127.0.0.1:'+(Deno.env.get('PORT')||'8000')+'/v1/health'); if(!r.ok) Deno.exit(1)",
]
interval: 30s
timeout: 5s
retries: 5
start_period: 15s
web-panel:
build:
context: .
dockerfile: Dockerfile.web-panel
restart: unless-stopped
depends_on:
api:
condition: service_healthy
ports:
- "80"
expose:
- "80"
web-saas:
build:
context: .
dockerfile: Dockerfile.web-saas
restart: unless-stopped
depends_on:
api:
condition: service_healthy
ports:
- "80"
expose:
- "80"
volumes:
panel-data:
networks:
data:
name: ${PANELS_DOCKER_NETWORK:-coolify}
external: true