services: postgres: image: postgres:18-alpine restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_DB: ${POSTGRES_DB:-appdb} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] interval: 5s timeout: 5s retries: 5 volumes: - ./data/postgres:/var/lib/postgresql/data frame-backend: image: docker.panic.haus/frame-backend:latest restart: unless-stopped depends_on: postgres: condition: service_healthy env_file: - backend.env ports: - "${BACKEND_PORT:-8080}:8080" frame-cms: image: docker.panic.haus/frame-cms:latest restart: unless-stopped depends_on: - frame-backend environment: VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:8080} ports: - "${CMS_PORT:-3000}:80" healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost/"] interval: 30s timeout: 5s retries: 3