services: # Combined backend API + frontend static files app: build: . ports: - "${PORT:-8080}:8080" environment: - TZ=${TZ:-America/New_York} - DATABASE_URL=postgresql://gdl:${DB_PASSWORD}@db:5432/gallery_subscriber - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=${SECRET_KEY} - DOWNLOAD_PATH=/data/downloads - CONFIG_PATH=/data/config - COOKIES_PATH=/data/cookies - DOWNLOAD_PARALLEL_LIMIT=${DOWNLOAD_PARALLEL_LIMIT:-3} - DOWNLOAD_RATE_LIMIT=${DOWNLOAD_RATE_LIMIT:-3.0} - DEFAULT_CHECK_INTERVAL=${DEFAULT_CHECK_INTERVAL:-3600} volumes: - downloads:/data/downloads - config:/data/config - cookies:/data/cookies depends_on: db: condition: service_healthy redis: condition: service_started restart: unless-stopped # Celery worker for background tasks celery: build: . command: celery -A app.tasks.celery_app worker -B --loglevel=info environment: - TZ=${TZ:-America/New_York} - DATABASE_URL=postgresql://gdl:${DB_PASSWORD}@db:5432/gallery_subscriber - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=${SECRET_KEY} - DOWNLOAD_PATH=/data/downloads - CONFIG_PATH=/data/config - COOKIES_PATH=/data/cookies - DOWNLOAD_PARALLEL_LIMIT=${DOWNLOAD_PARALLEL_LIMIT:-3} - DOWNLOAD_RATE_LIMIT=${DOWNLOAD_RATE_LIMIT:-3.0} - DEFAULT_CHECK_INTERVAL=${DEFAULT_CHECK_INTERVAL:-3600} volumes: - downloads:/data/downloads - config:/data/config - cookies:/data/cookies depends_on: db: condition: service_healthy redis: condition: service_started restart: unless-stopped # PostgreSQL database db: image: postgres:15-alpine environment: - TZ=${TZ:-America/New_York} - POSTGRES_USER=gdl - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=gallery_subscriber volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U gdl -d gallery_subscriber"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped # Redis for Celery task queue redis: image: redis:7-alpine restart: unless-stopped volumes: postgres_data: downloads: config: cookies: