# 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 services: migrate: build: context: . dockerfile: Dockerfile.migrate restart: "no" 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:-} 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: