services: db: image: postgres:18 restart: unless-stopped environment: POSTGRES_USER: mdh POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env} POSTGRES_DB: mdh volumes: - dbdata:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U mdh -d mdh"] interval: 5s timeout: 3s retries: 20 app: build: . restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgres://mdh:${POSTGRES_PASSWORD}@db:5432/mdh APP_SECRET: ${APP_SECRET:?set APP_SECRET in .env (at least 32 characters)} PUBLIC_DOMAIN: ${PUBLIC_DOMAIN:-} TRUST_PROXY: ${TRUST_PROXY:-false} expose: - "3000" # no host port: a reverse proxy (Coolify, Caddy, ...) reaches it on the Docker network volumes: dbdata: