# Docker Compose for Hybrid Deployment (with K8s) # ================================================ # 이 파일은 K8s와 함께 사용하는 하이브리드 배포용입니다. # Pipeline 워커들은 K8s로 이동하고, 인프라와 중앙 제어만 Docker에 유지합니다. version: '3.8' services: # ============ Infrastructure Services ============ # Local Docker Registry for K8s registry: image: registry:2 container_name: ${COMPOSE_PROJECT_NAME}_registry ports: - "5555:5000" volumes: - ./data/registry:/var/lib/registry networks: - site11_network restart: unless-stopped mongodb: image: mongo:7.0 container_name: ${COMPOSE_PROJECT_NAME}_mongodb ports: - "27017:27017" volumes: - ./data/mongodb:/data/db - ./data/mongodb-config:/data/configdb environment: - MONGO_INITDB_DATABASE=site11_db networks: - site11_network restart: unless-stopped redis: image: redis:7-alpine container_name: ${COMPOSE_PROJECT_NAME}_redis ports: - "6379:6379" volumes: - ./data/redis:/data command: redis-server --appendonly yes networks: - site11_network restart: unless-stopped zookeeper: image: confluentinc/cp-zookeeper:7.5.0 container_name: ${COMPOSE_PROJECT_NAME}_zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 volumes: - ./data/zookeeper/data:/var/lib/zookeeper/data - ./data/zookeeper/logs:/var/lib/zookeeper/logs networks: - site11_network restart: unless-stopped kafka: image: confluentinc/cp-kafka:7.5.0 container_name: ${COMPOSE_PROJECT_NAME}_kafka depends_on: - zookeeper ports: - "9092:9092" - "9101:9101" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' volumes: - ./data/kafka:/var/lib/kafka/data networks: - site11_network restart: unless-stopped # ============ Central Control & Monitoring ============ # Pipeline Scheduler - 중앙 제어 (Docker에 유지) pipeline-scheduler: build: context: ./services/pipeline dockerfile: scheduler/Dockerfile container_name: ${COMPOSE_PROJECT_NAME}_pipeline_scheduler restart: unless-stopped depends_on: - redis - mongodb environment: - REDIS_URL=redis://redis:6379 - MONGODB_URL=mongodb://mongodb:27017 - DB_NAME=ai_writer_db - LOG_LEVEL=INFO - SCHEDULER_INTERVAL=60 volumes: - ./services/pipeline/shared:/app/shared:ro - ./services/pipeline/config:/app/config:ro networks: - site11_network # Pipeline Monitor - 모니터링 대시보드 (Docker에 유지) pipeline-monitor: build: context: ./services/pipeline dockerfile: monitor/Dockerfile container_name: ${COMPOSE_PROJECT_NAME}_pipeline_monitor restart: unless-stopped depends_on: - redis - mongodb ports: - "8100:8000" environment: - REDIS_URL=redis://redis:6379 - MONGODB_URL=mongodb://mongodb:27017 - DB_NAME=ai_writer_db - LOG_LEVEL=INFO volumes: - ./services/pipeline/shared:/app/shared:ro networks: - site11_network # Pipeline Language Sync - 언어 동기화 (Docker에 유지) pipeline-language-sync: build: context: ./services/pipeline dockerfile: translator/Dockerfile container_name: ${COMPOSE_PROJECT_NAME}_pipeline_language_sync restart: unless-stopped depends_on: - redis - mongodb env_file: - ./services/pipeline/.env environment: - REDIS_URL=redis://redis:6379 - MONGODB_URL=mongodb://mongodb:27017 - DB_NAME=ai_writer_db - LOG_LEVEL=INFO - MODE=sync # sync 모드로 실행 volumes: - ./services/pipeline/shared:/app/shared:ro networks: - site11_network command: ["python", "language_sync.py"] # ============ Other Essential Services ============ console-backend: build: context: ./console/backend dockerfile: Dockerfile container_name: ${COMPOSE_PROJECT_NAME}_console_backend ports: - "8011:8000" environment: - ENV=${ENV} - MONGODB_URL=mongodb://mongodb:27017 - REDIS_URL=redis://redis:6379 - USERS_SERVICE_URL=http://users-backend:8000 depends_on: - mongodb - redis networks: - site11_network restart: unless-stopped console-frontend: build: context: ./console/frontend dockerfile: Dockerfile container_name: ${COMPOSE_PROJECT_NAME}_console_frontend ports: - "3000:80" environment: - VITE_API_URL=http://localhost:8011 networks: - site11_network restart: unless-stopped networks: site11_network: driver: bridge name: site11_network # ============ K8s로 이동한 서비스들 ============ # 다음 서비스들은 K8s에서 실행됩니다: # - pipeline-rss-collector # - pipeline-google-search # - pipeline-translator # - pipeline-ai-article-generator # - pipeline-image-generator # # K8s 배포 방법: # cd k8s/pipeline # ./deploy.sh