services: postgres: image: postgres:17-alpine restart: always environment: POSTGRES_DB: minicontrol POSTGRES_USER: minicontrol POSTGRES_PASSWORD: minicontrol volumes: - ./deploy/mnt/pgdata:/var/lib/postgresql/data - ./deploy/migrations:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U minicontrol"] interval: 2s timeout: 5s retries: 10 logging: driver: "json-file" options: max-size: "50m" max-file: "3" server: build: context: . dockerfile: server/Dockerfile image: mini-control-server:latest restart: always depends_on: postgres: condition: service_healthy volumes: - ./deploy/config.yaml:/etc/minicontrol/config.yaml:ro - ./install/setup-host.sh:/etc/minicontrol/install.sh:ro - ./deploy/mnt/releases:/var/lib/minicontrol/releases logging: driver: "json-file" options: max-size: "100m" max-file: "5" cloudflared: image: cloudflare/cloudflared:latest restart: always depends_on: server: condition: service_started command: - tunnel - --no-autoupdate - run - --token - ${CLOUDFLARED_TOKEN:?set CLOUDFLARED_TOKEN in .env} logging: driver: "json-file" options: max-size: "20m" max-file: "3"