Files
consume-rs/docker-compose.prod.yml
2026-06-17 11:20:36 +02:00

69 lines
1.8 KiB
YAML

services:
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- pgdata:/var/lib/postgresql/data
# No published port: db is reachable only on the compose network.
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
backend:
build: ./backend
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
BACKEND_HOST: 0.0.0.0
BACKEND_PORT: 8080
SESSION_SECRET: ${SESSION_SECRET}
COOKIE_SECURE: "true"
PUBLIC_APP_URL: ${PUBLIC_APP_URL}
CORS_ORIGINS: ${CORS_ORIGINS}
SMTP_HOST: ${SMTP_HOST}
SMTP_PORT: ${SMTP_PORT}
SMTP_USERNAME: ${SMTP_USERNAME}
SMTP_PASSWORD: ${SMTP_PASSWORD}
SMTP_FROM: ${SMTP_FROM}
SMTP_SECURITY: ${SMTP_SECURITY}
# No published port: reached via caddy only.
frontend:
build: ./frontend
restart: unless-stopped
depends_on:
- backend
environment:
PUBLIC_API_BASE: ${PUBLIC_API_BASE}
# adapter-node needs the public origin for CSRF/redirects behind a proxy.
ORIGIN: ${PUBLIC_APP_URL}
# No published port: reached via caddy only.
caddy:
image: caddy:2-alpine
restart: unless-stopped
depends_on:
- frontend
- backend
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
pgdata:
caddy_data:
caddy_config: