version: '3.8' services: postgres: image: postgres:15-alpine container_name: opengroc-postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: opengroc volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: opengroc-redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile container_name: opengroc-backend environment: - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/opengroc - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 - OLLAMA_BASE_URL=http://ollama:11434 - ENVIRONMENT=development - DEBUG=true - CORS_ORIGINS=http://localhost:3000,http://frontend:3000 ports: - "8000:8000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - ./backend/app:/app/app - ./backend/alembic:/app/alembic - ./backend/alembic.ini:/app/alembic.ini celery-worker: build: context: ./backend dockerfile: Dockerfile container_name: opengroc-celery-worker command: celery -A app.core.celery_app worker --loglevel=info environment: - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/opengroc - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 - OLLAMA_BASE_URL=http://ollama:11434 - ENVIRONMENT=development depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - ./backend/app:/app/app celery-beat: build: context: ./backend dockerfile: Dockerfile container_name: opengroc-celery-beat command: celery -A app.core.celery_app beat --loglevel=info environment: - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/opengroc - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - ./backend/app:/app/app ollama: image: ollama/ollama:latest container_name: opengroc-ollama ports: - "11434:11434" volumes: - ollama_data:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] frontend: build: context: ./frontend dockerfile: Dockerfile container_name: opengroc-frontend environment: - NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 - NEXT_PUBLIC_GRAPHQL_URL=http://localhost:8000/graphql ports: - "3000:3000" depends_on: - backend volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public volumes: postgres_data: redis_data: ollama_data: