version: "3.8" services: postgres: image: ankane/pgvector:latest container_name: agentic-os-db environment: POSTGRES_USER: agentic POSTGRES_PASSWORD: agentic POSTGRES_DB: agentic_os ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./backend/migrations/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U agentic -d agentic_os"] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: agentic-os-redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 backend: build: context: . dockerfile: backend/Dockerfile container_name: agentic-os-backend environment: - DATABASE_URL=postgresql+asyncpg://agentic:agentic@postgres:5432/agentic_os - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=dev-secret-key-change-in-production - LITELLM_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - LINEAR_CLIENT_ID=${LINEAR_CLIENT_ID} - LINEAR_CLIENT_SECRET=${LINEAR_CLIENT_SECRET} - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} - SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN} - SLACK_CLIENT_ID=${SLACK_CLIENT_ID} - SLACK_CLIENT_SECRET=${SLACK_CLIENT_SECRET} - FRONTEND_URL=http://localhost:3000 - WEBHOOK_BASE_URL=${WEBHOOK_BASE_URL:-https://your-ngrok-url.ngrok.io} ports: - "8000:8000" volumes: - ./backend:/app depends_on: postgres: condition: service_healthy redis: condition: service_healthy command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload frontend: build: context: . dockerfile: frontend/Dockerfile container_name: agentic-os-frontend environment: - REACT_APP_API_URL=http://localhost:8000 ports: - "3000:3000" volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public depends_on: - backend volumes: postgres_data: redis_data: