services: # ===================================== # Core Infrastructure Services # ===================================== postgres: image: postgres:15 container_name: pipeline_postgres environment: POSTGRES_USER: pipeline_admin POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: dev_pipeline volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - pipeline_network healthcheck: test: ["CMD-SHELL", "pg_isready -U pipeline_admin -d dev_pipeline"] interval: 30s timeout: 10s retries: 5 start_period: 60s redis: image: redis:7-alpine container_name: pipeline_redis command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data ports: - "6379:6379" networks: - pipeline_network healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 30s timeout: 10s retries: 5 start_period: 30s # mongodb: # image: mongo:7 # container_name: pipeline_mongodb # environment: # MONGO_INITDB_ROOT_USERNAME: pipeline_user # MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD} # volumes: # - mongodb_data:/data/db # ports: # - "27017:27017" # networks: # - pipeline_network # rabbitmq: # build: # context: ./infrastructure/rabbitmq # dockerfile: Dockerfile # image: automated-dev-pipeline-rabbitmq # container_name: pipeline_rabbitmq # environment: # RABBITMQ_DEFAULT_USER: pipeline_admin # RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} # volumes: # - rabbitmq_data:/var/lib/rabbitmq # - rabbitmq_logs:/var/log/rabbitmq # ports: # - "5672:5672" # - "15672:15672" # - "15692:15692" # networks: # - pipeline_network # healthcheck: # test: ["CMD", "rabbitmq-diagnostics", "ping"] # interval: 30s # timeout: 10s # retries: 5 # start_period: 60s # # ===================================== # # Application Services # # ===================================== # api-gateway: # build: ./services/api-gateway # container_name: pipeline_api_gateway # ports: # - "8000:8000" # environment: # - NODE_ENV=development # - PORT=8000 # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - RABBITMQ_HOST=rabbitmq # - RABBITMQ_PORT=5672 # - RABBITMQ_USER=pipeline_admin # - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD} # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # rabbitmq: # condition: service_healthy # requirement-processor: # build: ./services/requirement-processor # container_name: pipeline_requirement_processor # ports: # - "8001:8001" # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # - MONGODB_HOST=mongodb # - MONGODB_PORT=27017 # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # mongodb: # condition: service_started # tech-stack-selector: # build: ./services/tech-stack-selector # container_name: pipeline_tech_stack_selector # ports: # - "8002:8002" # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # architecture-designer: # build: ./services/architecture-designer # container_name: pipeline_architecture_designer # ports: # - "8003:8003" # environment: # - POSTGRES_HOST=postgres # - HOST=0.0.0.0 # - CLAUDE_API_KEY=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 # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - MONGODB_HOST=mongodb # - MONGODB_PORT=27017 # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # mongodb: # condition: service_started # healthcheck: # test: ["CMD", "curl", "-f", "http://localhost:8003/health"] # interval: 30s # timeout: 10s # retries: 3 # code-generator: # build: ./services/code-generator # container_name: pipeline_code_generator # ports: # - "8004:8004" # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - MONGODB_HOST=mongodb # - MONGODB_PORT=27017 # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # - CLAUDE_API_KEY=${CLAUDE_API_KEY} # - OPENAI_API_KEY=${OPENAI_API_KEY} # - NEO4J_URI=bolt://neo4j:7687 # - NEO4J_USER=neo4j # - NEO4J_PASSWORD=password # - CHROMA_HOST=chromadb # - CHROMA_PORT=8000 # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # mongodb: # condition: service_started # neo4j: # chromadb: # test-generator: # build: ./services/test-generator # container_name: pipeline_test_generator # ports: # - "8005:8005" # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # deployment-manager: # build: ./services/deployment-manager # container_name: pipeline_deployment_manager # ports: # - "8006:8006" # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - MONGODB_HOST=mongodb # - MONGODB_PORT=27017 # - RABBITMQ_HOST=rabbitmq # - RABBITMQ_PORT=5672 # - RABBITMQ_USER=pipeline_admin # - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD} # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # rabbitmq: # condition: service_healthy # mongodb: # condition: service_started # # ===================================== # # ===================================== # # Workflow Orchestration # # ===================================== # n8n: # image: n8nio/n8n:latest # container_name: pipeline_n8n # ports: # - "5678:5678" # environment: # - N8N_BASIC_AUTH_ACTIVE=true # - N8N_BASIC_AUTH_USER=pipeline_admin # - N8N_BASIC_AUTH_PASSWORD=pipeline_n8n_2024 # - N8N_HOST=localhost # - N8N_PORT=5678 # - N8N_PROTOCOL=http # - WEBHOOK_URL=http://localhost:5678 # - GENERIC_TIMEZONE=UTC # - DB_TYPE=postgresdb # - DB_POSTGRESDB_HOST=postgres # - DB_POSTGRESDB_PORT=5432 # - DB_POSTGRESDB_DATABASE=n8n # - DB_POSTGRESDB_USER=pipeline_admin # - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} # volumes: # - n8n_data:/home/node/.n8n # - ./orchestration/n8n/workflows:/home/node/.n8n/workflows # networks: # - pipeline_network # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # rabbitmq: # condition: service_healthy # healthcheck: # test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"] # interval: 30s # timeout: 10s # retries: 5 # start_period: 60s # # Volumes # # ===================================== # volumes: # postgres_data: # driver: local # redis_data: # driver: local # mongodb_data: # driver: local # rabbitmq_data: # driver: local # rabbitmq_logs: # driver: local # n8n_data: # driver: local # neo4j_data: # driver: local # chromadb_data: # driver: local # # ===================================== # # Networks # # ===================================== # networks: # pipeline_network: # driver: bridge # neo4j: # image: neo4j:5.15 # environment: # - NEO4J_AUTH=neo4j/password # ports: # - "7474:7474" # - "7687:7687" # volumes: # - neo4j_data:/data # networks: # - pipeline_network # chromadb: # image: chromadb/chroma:latest # ports: # - "8000:8000" # volumes: # - chromadb_data:/chroma/chroma # networks: # - pipeline_network # redis: # image: redis:7-alpine # container_name: pipeline_redis # environment: # REDIS_PASSWORD: redis123 # REDIS_USER: redisuser # ports: # - "6380:6379" # volumes: # - redis_data:/data # command: redis-server --requirepass redis123 # healthcheck: # test: ["CMD", "redis-cli", "--raw", "incr", "ping"] # interval: 30s # timeout: 10s # retries: 3 # start_period: 40s mongodb: image: mongo:7 container_name: pipeline_mongodb environment: MONGO_INITDB_ROOT_USERNAME: pipeline_user MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD} volumes: - mongodb_data:/data/db ports: - "27017:27017" networks: - pipeline_network rabbitmq: build: context: ./infrastructure/rabbitmq dockerfile: Dockerfile image: automated-dev-pipeline-rabbitmq container_name: pipeline_rabbitmq environment: RABBITMQ_DEFAULT_USER: pipeline_admin RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} volumes: - rabbitmq_data:/var/lib/rabbitmq - rabbitmq_logs:/var/log/rabbitmq ports: - "5673:5672" - "15672:15672" - "15692:15692" networks: - pipeline_network healthcheck: test: ["CMD", "rabbitmq-diagnostics", "ping"] interval: 30s timeout: 10s retries: 5 start_period: 60s # ===================================== # One-shot migrations runner (init job) # ===================================== # migrations: # image: node:18 # container_name: pipeline_migrations # working_dir: /app # volumes: # - ./:/app # environment: # - POSTGRES_HOST=postgres # - POSTGRES_PORT=5432 # - POSTGRES_DB=dev_pipeline # - POSTGRES_USER=pipeline_admin # - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # - NODE_ENV=development # entrypoint: ["/bin/sh", "-c", "chmod +x ./scripts/migrate-all.sh && ./scripts/migrate-all.sh"] # depends_on: # postgres: # condition: service_healthy # redis: # condition: service_healthy # networks: # - pipeline_network # restart: "no" # ===================================== # Enhanced Infrastructure for Code Generation # ===================================== neo4j: image: neo4j:5.15 container_name: pipeline_neo4j environment: - NEO4J_AUTH=neo4j/password - NEO4J_PLUGINS=["graph-data-science"] - NEO4J_dbms_security_procedures_unrestricted=gds.*,apoc.* ports: - "7474:7474" # Neo4j Browser - "7687:7687" # Bolt protocol volumes: - neo4j_data:/data - neo4j_logs:/logs networks: - pipeline_network healthcheck: test: ["CMD", "cypher-shell", "--username", "neo4j", "--password", "password", "MATCH () RETURN count(*) as count"] interval: 30s timeout: 10s retries: 5 start_period: 60s # chromadb: # image: chromadb/chroma:latest # container_name: pipeline_chromadb # ports: # - "8010:8000" # environment: # - CHROMA_SERVER_HOST=0.0.0.0 # - CHROMA_SERVER_HTTP_PORT=8000 # volumes: # - chromadb_data:/chroma/chroma # networks: # - pipeline_network # healthcheck: # test: ["CMD-SHELL", "curl -f http://localhost:8000/ || exit 1"] # interval: 30s # timeout: 10s # retries: 5 # start_period: 60s # chromadb: # image: chromadb/chroma:latest # container_name: pipeline_chromadb # ports: # - "8010:8000" # Changed port to avoid conflict with API Gateway # environment: # - CHROMA_SERVER_HOST=0.0.0.0 # - CHROMA_SERVER_HTTP_PORT=8000 # volumes: # - chromadb_data:/chroma/chroma # networks: # - pipeline_network # healthcheck: # test: ["CMD", "curl", "-f", "http://localhost:8000/api/v2/heartbeat"] # interval: 30s # timeout: 10s # retries: 5 # chromadb: # image: chromadb/chroma:latest # container_name: pipeline_chromadb # ports: # - "8010:8000" # environment: # - CHROMA_SERVER_HOST=0.0.0.0 # - CHROMA_SERVER_HTTP_PORT=8000 # - IS_PERSISTENT=TRUE # - PERSIST_DIRECTORY=/chroma/chroma # - ANONYMIZED_TELEMETRY=TRUE # volumes: # - chromadb_data:/chroma/chroma # networks: # - pipeline_network # healthcheck: # test: ["CMD", "curl", "-f", "http://localhost:8000/api/v2/heartbeat"] # interval: 30s # timeout: 10s # retries: 5 # start_period: 60s chromadb: image: chromadb/chroma:latest container_name: pipeline_chromadb ports: - "8010:8000" environment: - CHROMA_SERVER_HOST=0.0.0.0 - CHROMA_SERVER_HTTP_PORT=8000 - IS_PERSISTENT=TRUE - PERSIST_DIRECTORY=/chroma/chroma - ANONYMIZED_TELEMETRY=TRUE volumes: - chromadb_data:/chroma/chroma networks: - pipeline_network healthcheck: test: ["CMD-SHELL", "timeout 5 bash -c '