# Local / host-Postgres overlay. Restores the previous day-to-day workflow on top # of the production docker-compose.yml: # # docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build # # - DB_HOST=host.docker.internal (host Postgres; container postgres still starts # but is unused unless you flip DB_HOST back) # - Publishes API / ATS / Redis / frontend ports for direct host access # - Bind-mounts CV attachments to ./backend/inbox/decoded_attachments # - Live source mounts + --reload on API / ATS / workers # # Frontend stays as the built nginx image — run `npm run dev` on the host for the # Vite loop if you need HMR. services: redis: ports: - "${REDIS_PORT:-6379}:6379" postgres: ports: - "127.0.0.1:${POSTGRES_PORT:-5433}:5432" backend-api: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 command: [ "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload", ] ports: - "${BACKEND_PORT:-8000}:8000" volumes: - ./backend:/app - ./app:/app/app - ${ATTACHMENTS_DIR:-./backend/inbox/decoded_attachments}:/app/inbox/decoded_attachments ats-engine: command: [ "uvicorn", "app.main:create_app", "--factory", "--host", "0.0.0.0", "--port", "8100", "--reload", ] ports: - "${ATS_PORT:-8100}:8100" volumes: - ./app:/srv/app frontend: ports: - "${FRONTEND_PORT:-5173}:80" taskiq-worker: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 TASKIQ_QUEUE_NAME: inbox TASKIQ_WORKER_NAME: worker-01 volumes: - ./backend:/app - ./app:/app/app - ${ATTACHMENTS_DIR:-./backend/inbox/decoded_attachments}:/app/inbox/decoded_attachments taskiq-scheduler: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 TASKIQ_QUEUE_NAME: inbox volumes: - ./backend:/app - ./app:/app/app taskiq-cv-worker: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 TASKIQ_CV_QUEUE_NAME: cv_upload TASKIQ_WORKER_NAME: cv-worker-01 volumes: - ./backend:/app - ./app:/app/app - ${ATTACHMENTS_DIR:-./backend/inbox/decoded_attachments}:/app/inbox/decoded_attachments taskiq-cv-scheduler: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 TASKIQ_CV_QUEUE_NAME: cv_upload volumes: - ./backend:/app - ./app:/app/app taskiq-mailbox-sync-worker: environment: PYTHONPATH: /app DB_HOST: host.docker.internal REDIS_URL: redis://redis:6379/0 EMAIL_URL: ${EMAIL_URL:-http://host.docker.internal:5000} BACKEND_URL: http://backend-api:8000 TASKIQ_MAILBOX_SYNC_QUEUE_NAME: mailbox_sync TASKIQ_WORKER_NAME: mailbox-sync-worker-01 volumes: - ./backend:/app - ./app:/app/app - ${ATTACHMENTS_DIR:-./backend/inbox/decoded_attachments}:/app/inbox/decoded_attachments