# R-135: Removed deprecated version key (Docker Compose v2+ ignores it) # Author RAG Chatbot SaaS — Docker Compose (Development) # Usage: docker-compose up -d # Services: postgres, redis, chromadb, celery worker, flower services: # ── PostgreSQL ────────────────────────────────────────── postgres: image: postgres:16-alpine container_name: authorbot_postgres environment: POSTGRES_DB: authorbot POSTGRES_USER: authorbot POSTGRES_PASSWORD: authorbot_dev_password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U authorbot -d authorbot"] interval: 10s timeout: 5s retries: 5 # ── Redis ─────────────────────────────────────────────── redis: image: redis:7-alpine container_name: authorbot_redis command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-authorbot_dev_redis} ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-authorbot_dev_redis}", "ping"] interval: 10s timeout: 5s retries: 5 # ── ChromaDB ──────────────────────────────────────────── chromadb: image: chromadb/chroma:latest container_name: authorbot_chroma ports: - "8000:8000" volumes: - chroma_data:/chroma/chroma environment: IS_PERSISTENT: "TRUE" ANONYMIZED_TELEMETRY: "FALSE" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/heartbeat"] interval: 10s timeout: 5s retries: 5 # ── FastAPI Backend ───────────────────────────────────── api: build: context: . dockerfile: Dockerfile container_name: authorbot_api env_file: .env ports: - "8080:8080" volumes: - .:/app - upload_data:/app/uploads - geoip_data:/app/geoip depends_on: postgres: condition: service_healthy redis: condition: service_healthy chromadb: condition: service_healthy command: uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload # ── Celery Worker ─────────────────────────────────────── celery_worker: build: context: . dockerfile: Dockerfile container_name: authorbot_celery env_file: .env volumes: - .:/app - upload_data:/app/uploads - geoip_data:/app/geoip depends_on: postgres: condition: service_healthy redis: condition: service_healthy command: celery -A app.tasks.celery_app worker --loglevel=info --concurrency=4 # ── Celery Beat (Scheduled Tasks) ─────────────────────── celery_beat: build: context: . dockerfile: Dockerfile container_name: authorbot_beat env_file: .env volumes: - .:/app depends_on: - redis command: celery -A app.tasks.celery_app beat --loglevel=info # ── Flower (Celery Monitor) ───────────────────────────── flower: build: context: . dockerfile: Dockerfile container_name: authorbot_flower env_file: .env ports: - "5555:5555" depends_on: - redis command: celery -A app.tasks.celery_app flower --port=5555 --basic-auth=admin:${FLOWER_PASSWORD:-changeme} volumes: postgres_data: redis_data: chroma_data: upload_data: geoip_data: