Ctrl K
ComunidadGuías…

docker-compose.prod.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
services:
  # Neo4j Database
  neo4j:
    image: neo4j:latest
    container_name: pwnflow-neo4j-prod
    # Remove external ports - only accessible within network
    volumes:
      - $PWD/neo4j-data-prod:/data
    environment:
      - NEO4J_AUTH=${NEO4J_AUTH:-neo4j/password}
      - NEO4J_PLUGINS=["apoc"]
      - NEO4J_dbms_security_procedures_unrestricted=apoc.*
    restart: unless-stopped
    networks:
      - pwnflow-prod-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-prod
    volumes:
      - redis-data-prod:/data
    restart: unless-stopped
    command: redis-server --appendonly yes
    networks:
      - pwnflow-prod-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s

  # Backend API
  backend:
    build:
      context: .
      dockerfile: backend/Dockerfile.prod
    container_name: pwnflow-backend-prod
    env_file:
      - ./.env.production
    environment:
      - NEO4J_URI=bolt://neo4j:7687
      - NEO4J_USER=neo4j
      - REDIS_URL=redis://redis:6379
      - AI_SERVICE_URL=http://ai-service:8001
      - PYTHONUNBUFFERED=1
      - PYTHONPATH=/app
    depends_on:
      neo4j:
        condition: service_healthy
      redis:
        condition: service_healthy
    restart: unless-stopped
    networks:
      - pwnflow-prod-network
    healthcheck:
      test:
        ["CMD-SHELL", "curl -f http://localhost:8000/api/v1/health || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 20s

  # AI Microservice API
  ai-service:
    build:
      context: .
      dockerfile: services/ai-service/Dockerfile
    container_name: pwnflow-ai-service-prod
    expose:
      - "8001"
    environment:
      - REDIS_URL=redis://redis:6379
      - GOOGLE_API_KEY=${GOOGLE_API_KEY}
      - SERVICE_VERSION=${APP_VERSION:-1.0.0}
    depends_on:
      redis:
        condition: service_healthy
    restart: unless-stopped
    networks:
      - pwnflow-prod-network

  # AI Celery Worker
  ai-worker:
    build:
      context: .
      dockerfile: services/ai-service/Dockerfile
    container_name: pwnflow-ai-worker-prod
    environment:
      - REDIS_URL=redis://redis:6379
      - GOOGLE_API_KEY=${GOOGLE_API_KEY}
    depends_on:
      redis:
        condition: service_healthy
      ai-service:
        condition: service_started
    restart: unless-stopped
    networks:
      - pwnflow-prod-network
    command: celery -A celery_app worker --loglevel=warning --concurrency=2

  # Nginx with Frontend
  nginx:
    build:
      context: .
      dockerfile: Dockerfile.nginx
      args:
        - VITE_API_BASE_URL=${FRONTEND_API_URL:-/api/v1}
        - VITE_APP_ENV=${APP_ENV:-production}
        - VITE_ENABLE_ANALYTICS=${ENABLE_ANALYTICS:-true}
    container_name: pwnflow-nginx-prod
    ports:
      - "80:80"
      - "443:443" # For HTTPS in production
    depends_on:
      backend:
        condition: service_healthy
    restart: unless-stopped
    networks:
      - pwnflow-prod-network
    volumes:
      # For Let's Encrypt certificates
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "wget --no-verbose --tries=1 --spider http://localhost/ || exit 1",
        ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s

networks:
  pwnflow-prod-network:
    driver: bridge

volumes:
  neo4j-data-prod:
  redis-data-prod: