services: api: image: christianlouis/document-processor:latest container_name: document_api # We'll keep the code in /app, but set working_dir to the shared data directory working_dir: /workdir # We'll run uvicorn from the container's /app code command: ["sh", "-c", "cd /app && uvicorn app.main:app --host 0.0.0.0 --port 8000"] # Environment variables environment: - PYTHONPATH=/app env_file: - .env # Expose container's 8000 -> Host's 8000 ports: - "8000:8000" depends_on: - redis - worker # Mount the shared working directory for data volumes: # optional: mount your code if you want local dev changes to reflect # - ./app:/app - /var/docparse/workdir:/workdir worker: image: christianlouis/document-processor:latest container_name: document_worker # same shared working directory working_dir: /workdir command: ["celery", "-A", "app.celery_worker", "worker", "-B", "--loglevel=info", "-Q", "document_processor,default,celery"] env_file: - .env environment: - PYTHONPATH=/app depends_on: - redis - gotenberg # Mount the shared directory (and optionally your code if you want dev mode) volumes: # optional: mount your code if you want local dev changes # - ./app:/app - /var/docparse/workdir:/workdir gotenberg: image: gotenberg/gotenberg:latest container_name: gotenberg redis: image: redis:alpine container_name: document_redis restart: always