version: '3.8' services: # 메인 CTF 웹 서버 docx-ssrf-web: build: context: . dockerfile: Dockerfile container_name: docx-ssrf-challenge ports: - "13687:8080" environment: - FLAG=CTF{flag_flag} - ADMIN_TOKEN=60e27a00dc01ca8e39c21cc3989dd525e24371b0bd238fe506e789e8572a69ae - PYTHONUNBUFFERED=1 volumes: - ./uploads:/app/uploads - ./logs:/app/logs restart: unless-stopped networks: - ctf-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # 내부 Admin 서비스 (포트 3003) internal-admin: build: context: . dockerfile: Dockerfile.admin container_name: internal-admin-service expose: - "3003" environment: - FLAG=CTF{flag_admin} - ADMIN_TOKEN=60e27a00dc01ca8e39c21cc3989dd525e24371b0bd238fe506e789e8572a69ae networks: - ctf-network restart: unless-stopped # 내부 Database 서비스 (포트 3001) internal-db: build: context: . dockerfile: Dockerfile.internal container_name: internal-db-service expose: - "3001" environment: - SERVICE_NAME=Database Service - SERVICE_PORT=3001 networks: - ctf-network restart: unless-stopped # 내부 Cache 서비스 (포트 3002) internal-cache: build: context: . dockerfile: Dockerfile.internal container_name: internal-cache-service expose: - "3002" environment: - SERVICE_NAME=Cache Service - SERVICE_PORT=3002 networks: - ctf-network restart: unless-stopped # 내부 Metrics 서비스 (포트 3004) internal-metrics: build: context: . dockerfile: Dockerfile.internal container_name: internal-metrics-service expose: - "3004" environment: - SERVICE_NAME=Metrics Service - SERVICE_PORT=3004 networks: - ctf-network restart: unless-stopped # Redis (선택사항 - 세션 관리용) redis: image: redis:7-alpine container_name: ctf-redis expose: - "6379" networks: - ctf-network restart: unless-stopped command: redis-server --appendonly yes volumes: - redis-data:/data # 모니터링 (개발용) portainer: image: portainer/portainer-ce:latest container_name: ctf-portainer ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer-data:/data restart: unless-stopped networks: - ctf-network profiles: - dev volumes: redis-data: portainer-data: networks: ctf-network: driver: bridge ipam: config: - subnet: 172.20.0.0/16