help-desk/infra/docker-compose.yml
2025-11-18 21:53:33 +00:00

157 lines
5.0 KiB
YAML

# infra/docker-compose.yml
version: '3.8'
services:
# Node 1: Primary Node (Bootstrap)
cockroach-1:
image: cockroachdb/cockroach:latest
container_name: cockroach-1
command: start --insecure --host=cockroach-1 --listen-addr=cockroach-1:26257 --advertise-addr=cockroach-1:26257 --join=cockroach-1:26257,cockroach-2:26257,cockroach-3:26257
restart: always
volumes:
- cockroach1:/cockroach/data
ports:
- "26257:26257" # Default SQL Port
- "8080:8080" # Web UI Port (สำหรับดูสถานะ Cluster)
# Node 2: Joining Node
cockroach-2:
image: cockroachdb/cockroach:latest
container_name: cockroach-2
command: start --insecure --host=cockroach-2 --listen-addr=cockroach-2:26257 --advertise-addr=cockroach-2:26257 --join=cockroach-1:26257,cockroach-2:26257,cockroach-3:26257
restart: always
volumes:
- cockroach2:/cockroach/data
# Node 3: Joining Node
cockroach-3:
image: cockroachdb/cockroach:latest
container_name: cockroach-3
command: start --insecure --host=cockroach-3 --listen-addr=cockroach-3:26257 --advertise-addr=cockroach-3:26257 --join=cockroach-1:26257,cockroach-2:26257,cockroach-3:26257
restart: always
volumes:
- cockroach3:/cockroach/data
# 4. Init Cluster (ตั้งค่าครั้งแรก)
init-cluster:
image: cockroachdb/cockroach:latest
container_name: init-cluster
command: init --insecure --host=cockroach-1:26257
depends_on:
- cockroach-1
- cockroach-2
- cockroach-3
# ตั้งค่าให้ Container ตายหลังจากรัน init เสร็จ (ไม่รันซ้ำ)
restart: "no"
# Redis Service
redis:
image: redis:7-alpine
container_name: redis
ports:
- "6379:6379"
restart: always
# Celery Flower Monitoring Service
flower:
build:
context: ../backend
dockerfile: Dockerfile.celery
container_name: celery_flower
ports:
- "5555:5555"
environment:
CELERY_BROKER_URL: redis://redis:6379/0
CELERY_APP: core
volumes:
- ../backend:/app
working_dir: /app
depends_on:
- redis
- celery_worker
command: celery -A core flower --port=5555
restart: always
# Celery Worker Service
celery_worker:
build:
context: ../backend
dockerfile: Dockerfile.celery
container_name: celery_worker
volumes:
- ../backend:/app
command: celery -A core worker -l info # รัน worker process
depends_on:
- redis # Worker ต้องรอให้ Redis พร้อม
- cockroach-1 # Worker อาจจะต้องเข้าถึง DB ด้วย
# Environment Variables สำหรับการส่งอีเมล
environment:
MAILJET_SMTP_HOST: ${MAILJET_SMTP_HOST}
MAILJET_SMTP_PORT: ${MAILJET_SMTP_PORT}
MAILJET_API_KEY: ${MAILJET_API_KEY}
MAILJET_SECRET_KEY: ${MAILJET_SECRET_KEY}
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL}
# กำหนด HOST/PORT DB/Redis ซ้ำอีกครั้ง (เป็น Best Practice)
REDIS_HOST: redis
DB_HOST: cockroach-1
# Backend/API (DRF)
backend:
build:
context: ../backend
dockerfile: Dockerfile
volumes:
- ../backend:/app
ports:
- "8000:8000"
# เปลี่ยนให้พึ่งพา Node ฐานข้อมูลโดยตรง (เพราะ entrypoint script จะจัดการการรอ)
depends_on:
- cockroach-1
- cockroach-2
- cockroach-3
- redis
environment:
DB_HOST: cockroach-1
DB_PORT: 26257
DB_NAME: my_db
DB_USER: root
DB_PASSWORD: ''
# AI Model Serving Service (MONAI Inference)
ai_model_server:
build:
context: ../ # อ้างอิงจาก Root Monorepo
dockerfile: infra/docker/Dockerfile.ai
container_name: ai_model_server
volumes:
- ../ai-medical:/app/ai-medical # Map โฟลเดอร์โค้ด AI
# - /path/to/gpu/device:/dev/nvidia0 # Uncomment ถ้าใช้ GPU
ports:
- "8001:8001" # Port สำหรับ API Model Serving
depends_on:
- backend # ให้มั่นใจว่า Backend พร้อมใช้งานก่อน
environment:
# กำหนดตัวแปรสภาพแวดล้อมที่ AI Service ต้องใช้
MODEL_STORAGE_URL: http://minio:9000/models/
MODEL_FILE_NAME: monai_model_v1.pth
# MinIO Service (S3-Compatible Object Storage)
minio:
image: minio/minio
container_name: minio
ports:
- "9000:9000" # API Port
- "9001:9001" # Console/Web UI Port
volumes:
- minio_data:/data
environment:
MINIO_ROOT_USER: minio_admin
MINIO_ROOT_PASSWORD: minio_p@ssw0rd!
command: server /data --console-address ":9001"
restart: always
volumes:
cockroach1:
cockroach2:
cockroach3:
minio_data: