services: claude2api: image: pushzx/claude2api:latest container_name: claude2api restart: unless-stopped ports: - "${PORT:-8080}:8080" env_file: - .env environment: - LISTEN_ADDR=:8080 depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 15s postgres: image: postgres:16-alpine container_name: claude2api-postgres restart: unless-stopped environment: POSTGRES_USER: ${DB_USER:-claude2api} POSTGRES_PASSWORD: ${DB_PASS} POSTGRES_DB: ${DB_NAME:-claude2api} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-claude2api} -d ${DB_NAME:-claude2api}"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: claude2api-redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASS:-redis_secret} volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASS:-redis_secret}", "ping"] interval: 10s timeout: 5s retries: 5 watchtower: image: containrrr/watchtower container_name: claude2api-watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WATCHTOWER_POLL_INTERVAL=600 - WATCHTOWER_CLEANUP=true - WATCHTOWER_INCLUDE_STOPPED=false command: claude2api volumes: postgres_data: redis_data: