services: web: build: context: . dockerfile: Dockerfile.web ports: - "8000:80" volumes: - pdf-uploads:/app/uploads - pdf-results:/app/results depends_on: redis: condition: service_healthy postgres: condition: service_healthy env_file: .env restart: unless-stopped worker: build: context: . dockerfile: Dockerfile.worker volumes: - pdf-uploads:/app/uploads - pdf-results:/app/results - pdf-logs:/app/logs depends_on: redis: condition: service_healthy postgres: condition: service_healthy env_file: .env deploy: replicas: ${WORKER_COUNT:-2} restart: unless-stopped redis: image: redis:7-alpine volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 restart: unless-stopped postgres: image: postgres:16-alpine volumes: - pg-data:/var/lib/postgresql/data - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql environment: POSTGRES_DB: ${DB_NAME:-pdf_checker} POSTGRES_USER: ${DB_USER:-pdf_checker} POSTGRES_PASSWORD: ${DB_PASSWORD:-dev_password} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-pdf_checker}"] interval: 10s timeout: 3s retries: 3 restart: unless-stopped volumes: pdf-uploads: pdf-results: pdf-logs: redis-data: pg-data: