Ctrl K
ComunidadGuías…

docker-compose.dev.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-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: