157 lines
5.0 KiB
YAML
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: |