services: # Neo4j Database neo4j: image: neo4j:latest container_name: pwnflow-neo4j-dev ports: - "7474:7474" # HTTP - "7687:7687" # Bolt volumes: - $PWD/neo4j-data-dev:/data environment: - NEO4J_AUTH=${NEO4J_AUTH:-neo4j/password} - NEO4J_PLUGINS=["apoc"] # Note: Neo4j Community Edition doesn't support multiple databases # The default database is always 'neo4j' restart: unless-stopped networks: - pwnflow-dev-network healthcheck: test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:7474 || exit 1", ] interval: 10s timeout: 5s retries: 5 start_period: 30s # Redis Cache redis: image: redis:7-alpine container_name: pwnflow-redis-dev ports: - "6379:6379" volumes: - redis-data-dev:/data restart: unless-stopped command: redis-server --appendonly yes networks: - pwnflow-dev-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 # Redis UI redis-commander: image: rediscommander/redis-commander:latest container_name: pwnflow-redis-commander-dev ports: - "8081:8081" environment: - REDIS_HOSTS=local:redis:6379 networks: - pwnflow-dev-network depends_on: - redis restart: unless-stopped # Backend API backend: build: context: . dockerfile: backend/Dockerfile.dev container_name: pwnflow-backend-dev ports: - "8000:8000" volumes: - ./backend:/app/backend - ./packages/ai-schemas:/app/packages/ai-schemas - /app/.venv # Exclude virtual environment env_file: - .env.development # Use development env file environment: # Override database connections for Docker networking - NEO4J_URI=bolt://neo4j:7687 - REDIS_URL=redis://redis:6379 - AI_SERVICE_URL=http://ai-service:8001 # Python settings - PYTHONUNBUFFERED=1 - PYTHONPATH=/app - WATCHFILES_FORCE_POLLING=true # For hot reload in Docker depends_on: neo4j: condition: service_healthy redis: condition: service_healthy restart: unless-stopped networks: - pwnflow-dev-network command: python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload # AI Microservice API ai-service: build: context: . dockerfile: services/ai-service/Dockerfile container_name: pwnflow-ai-service-dev ports: - "8001:8001" volumes: - ./services/ai-service:/app/services/ai-service - ./packages/ai-schemas:/app/packages/ai-schemas environment: - REDIS_URL=redis://redis:6379 - GOOGLE_API_KEY=${GOOGLE_API_KEY} - PYTHONUNBUFFERED=1 depends_on: redis: condition: service_healthy restart: unless-stopped networks: - pwnflow-dev-network command: python -m uvicorn main:app --host 0.0.0.0 --port 8001 --reload # AI Celery Worker ai-worker: build: context: . dockerfile: services/ai-service/Dockerfile container_name: pwnflow-ai-worker-dev volumes: - ./services/ai-service:/app/services/ai-service - ./packages/ai-schemas:/app/packages/ai-schemas environment: - REDIS_URL=redis://redis:6379 - GOOGLE_API_KEY=${GOOGLE_API_KEY} - PYTHONUNBUFFERED=1 depends_on: redis: condition: service_healthy ai-service: condition: service_started restart: unless-stopped networks: - pwnflow-dev-network command: celery -A celery_app worker --loglevel=info -E # Flower - Celery monitoring flower: build: context: . dockerfile: services/ai-service/Dockerfile container_name: pwnflow-flower-dev ports: - "5555:5555" volumes: - ./services/ai-service:/app/services/ai-service - ./packages/ai-schemas:/app/packages/ai-schemas environment: - REDIS_URL=redis://redis:6379 - CELERY_BROKER_URL=redis://redis:6379 - CELERY_RESULT_BACKEND=redis://redis:6379 - FLOWER_UNAUTHENTICATED_API=true depends_on: redis: condition: service_healthy restart: unless-stopped networks: - pwnflow-dev-network command: celery -A celery_app flower --broker=redis://redis:6379 --port=5555 # Frontend frontend: build: context: ./frontend dockerfile: Dockerfile.dev container_name: pwnflow-frontend-dev ports: - "5173:5173" volumes: - ./frontend:/app - /app/node_modules # Exclude node_modules environment: - VITE_API_BASE_URL=http://localhost:8000/api/v1 - CHOKIDAR_USEPOLLING=true # For hot reload in Docker depends_on: - backend restart: unless-stopped networks: - pwnflow-dev-network command: pnpm dev --host 0.0.0.0 networks: pwnflow-dev-network: driver: bridge volumes: neo4j-data-dev: redis-data-dev: