services: postgres: image: postgres:16-alpine restart: always environment: POSTGRES_DB: ${DB_NAME:-pdf_accessibility} POSTGRES_USER: ${DB_USER:-pdf_accessibility} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-pdf_accessibility}"] interval: 10s timeout: 5s retries: 5 labels: - "com.centurylinklabs.watchtower.enable=false" redis: image: redis:7-alpine restart: always command: redis-server --appendonly yes volumes: - redis_data:/data labels: - "com.centurylinklabs.watchtower.enable=false" minio: image: minio/minio:latest restart: always command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${STORAGE_ACCESS_KEY} MINIO_ROOT_PASSWORD: ${STORAGE_SECRET_KEY} volumes: - minio_data:/data labels: - "com.centurylinklabs.watchtower.enable=false" api: image: registry.ai-impress.com/pdf-accessibility/api:latest restart: always env_file: .env environment: - DB_HOST=postgres - REDIS_URL=redis://redis:6379/0 - STORAGE_ENDPOINT=http://minio:9000 depends_on: postgres: condition: service_healthy redis: condition: service_started labels: - "com.centurylinklabs.watchtower.enable=false" celery: image: registry.ai-impress.com/pdf-accessibility/api:latest command: uv run celery -A app.services.queue.celery_app worker --loglevel=info -c 2 restart: always env_file: .env environment: - DB_HOST=postgres - REDIS_URL=redis://redis:6379/0 - STORAGE_ENDPOINT=http://minio:9000 depends_on: postgres: condition: service_healthy redis: condition: service_started labels: - "com.centurylinklabs.watchtower.enable=false" nextjs: image: registry.ai-impress.com/pdf-accessibility/frontend:latest restart: always env_file: frontend/.env.local labels: - "com.centurylinklabs.watchtower.enable=false" caddy: image: caddy:2-alpine restart: always ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config depends_on: - api - nextjs volumes: postgres_data: redis_data: minio_data: caddy_data: caddy_config: