services: api: build: context: . dockerfile: Dockerfile.api env_file: .env expose: - "8000" healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:8000/health"] interval: 15s timeout: 3s retries: 10 volumes: # Bind mount host ./data directory so container sees live DB & uploads - ./data:/app/data # Also mount at /data so path matches host expectation (/data) - ./data:/data - ./logs:/app/logs web: build: context: ./frontend dockerfile: Dockerfile.web environment: DB_FILE: /data/strong.db NEXT_PUBLIC_API_URL: http://localhost:8069 expose: - "3000" depends_on: api: condition: service_healthy volumes: # Read-only access to same host data dir (only needs to read DB) - ./data:/data:ro proxy: image: caddy:2 depends_on: api: condition: service_healthy web: condition: service_started ports: - "8069:80" # single host port volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro