Files
tobiichiGPT/docker-compose.yml
2026-02-01 01:24:56 +08:00

136 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
version: '3.8'
services:
# PostgreSQL - 共用資料庫(支援 pgvector
postgres:
image: pgvector/pgvector:pg15
container_name: tobiichiGPT-postgres
restart: unless-stopped
environment:
POSTGRES_DB: tobiichiGPT
POSTGRES_USER: tobiichi3227
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- /mnt/data/External/tobiichiGPT/db_data/pg:/var/lib/postgresql/data
networks:
- tobiichiGPT-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U tobiichi3227"]
interval: 10s
timeout: 5s
retries: 5
# MongoDB - Rocket.Chat 資料庫
mongo:
image: mongo:7.0
container_name: tobiichiGPT-mongo
restart: unless-stopped
volumes:
- /mnt/data/External/tobiichiGPT/db_data/mongo:/data/db
networks:
- tobiichiGPT-network
command: mongod --oplogSize 128 --replSet rs0
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
# MongoDB Replica Set 初始化
mongo-init-replica:
image: mongo:7.0
container_name: tobiichiGPT-mongo-init
restart: "no"
depends_on:
mongo:
condition: service_healthy
networks:
- tobiichiGPT-network
command: >
bash -c "
for i in {1..30}; do
mongosh mongo/rocketchat --eval \"
rs.initiate({
_id: 'rs0',
members: [ { _id: 0, host: 'mongo:27017' } ]
})\" && break || echo \"嘗試 $$i 次,等待 5 秒...\" && sleep 5;
done
"
# API 轉接層 - 偽裝 OpenAI API
api:
image: python:3.11-slim
container_name: tobiichiGPT-api
restart: unless-stopped
ports:
- "18000:8000"
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_NAME=tobiichiGPT
- DB_USER=tobiichi3227
- DB_PASSWORD=${DB_PASSWORD}
- ROCKETCHAT_URL=http://rocketchat:3000
- ROCKETCHAT_USER=${ROCKETCHAT_USER}
- ROCKETCHAT_PASSWORD=${ROCKETCHAT_PASSWORD}
volumes:
- /mnt/data/External/tobiichiGPT/api_data:/app
working_dir: /app
command: >
sh -c "
pip install --no-cache-dir -r requirements.txt &&
python server.py
"
networks:
- tobiichiGPT-network
depends_on:
postgres:
condition: service_healthy
rocketchat:
condition: service_started
# Open WebUI - 用戶對話介面
openwebui:
image: ghcr.io/open-webui/open-webui:main
container_name: tobiichiGPT-ui
restart: unless-stopped
ports:
- "10060:8080"
environment:
- DATABASE_URL=postgresql://tobiichi3227:${DB_PASSWORD}@postgres:5432/tobiichiGPT
- WEBUI_AUTH=True
- ENABLE_FORWARD_USER_INFO_HEADERS=True
volumes:
- /mnt/data/External/tobiichiGPT/ui_data:/app/backend/data
networks:
- tobiichiGPT-network
depends_on:
postgres:
condition: service_healthy
# Rocket.Chat - 管理員對話介面
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:latest
container_name: tobiichiGPT-rocketchat
restart: unless-stopped
ports:
- "13000:3000"
environment:
MONGO_URL: mongodb://mongo:27017/rocketchat?replicaSet=rs0
MONGO_OPLOG_URL: mongodb://mongo:27017/local?replicaSet=rs0
ROOT_URL: http://localhost:13000
PORT: 3000
DEPLOY_METHOD: docker
networks:
- tobiichiGPT-network
depends_on:
mongo:
condition: service_healthy
mongo-init-replica:
condition: service_completed_successfully
networks:
tobiichiGPT-network:
driver: bridge
name: tobiichiGPT-network # 固定網路名稱,讓 proxy stack 可以連接