services: db: image: postgres:16-alpine environment: POSTGRES_DB: chat_backend POSTGRES_USER: chat_backend POSTGRES_PASSWORD: chat_backend volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U chat_backend -d chat_backend"] interval: 5s timeout: 5s retries: 10 start_period: 10s web: build: . ports: - "8003:8000" # No required env_file — CI has no .env. Defaults below; for local secrets: # docker compose --env-file .env up # # Do NOT interpolate ${DATABASE_URL} here. On the Act runner / control node that # var often points at shared prod/beta Postgres; compose would bake it into # containerized tests. Use COMPOSE_DATABASE_URL only if you need to override. environment: DJANGO_ENV: ${DJANGO_ENV:-dev} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me} DJANGO_DEBUG: ${DJANGO_DEBUG:-true} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0,testserver} DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://chat_backend:chat_backend@db:5432/chat_backend} OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://10.0.0.128:11434} SKIP_RAG_INIT: ${SKIP_RAG_INIT:-1} REDIS_URL: ${REDIS_URL:-} ALLOW_AGENTIC_TASKS: ${ALLOW_AGENTIC_TASKS:-false} depends_on: db: condition: service_healthy # Optional — only needed when REDIS_URL is set (multi-worker channel layer # fan-out + Celery broker for agent runs, #63). Not started by default # `docker compose up` unless the `agentic` profile is selected: # docker compose --profile agentic up redis: image: redis:7-alpine profiles: ["agentic"] ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 10 # Celery worker for long-running agent tasks (#63). Only useful once # REDIS_URL/CELERY_BROKER_URL point at the `redis` service above. worker: build: . profiles: ["agentic"] command: ["uv", "run", "celery", "-A", "llm_be", "worker", "--loglevel=info"] environment: DJANGO_ENV: ${DJANGO_ENV:-dev} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0,testserver} DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://chat_backend:chat_backend@db:5432/chat_backend} OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://10.0.0.128:11434} SKIP_RAG_INIT: "1" REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://redis:6379/0} ALLOW_AGENTIC_TASKS: ${ALLOW_AGENTIC_TASKS:-true} depends_on: db: condition: service_healthy redis: condition: service_healthy volumes: postgres_data: