# 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 Worker Service celery_worker: build: context: ../backend dockerfile: Dockerfile container_name: celery_worker volumes: - ../backend:/app command: celery -A cremation_backend worker -l info # รัน worker process depends_on: - redis # Worker ต้องรอให้ Redis พร้อม - cockroach-1 # Worker อาจจะต้องเข้าถึง DB ด้วย # 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: