147 lines
5.6 KiB
YAML
147 lines
5.6 KiB
YAML
# Docker Compose 配置说明
|
||
#
|
||
# 网络模式: 使用 host 网络模式,容器直接使用宿主机的网络
|
||
# - 优点: 可以直接访问宿主机上的服务(MySQL、Ollama 等),无需额外网络配置
|
||
# - 注意: 使用 host 网络模式时,不能使用 ports 映射,容器直接使用宿主机的端口
|
||
#
|
||
# 端口配置:
|
||
# - ChromaDB: 8002 端口(直接绑定到宿主机)
|
||
# - RAG API: 8001 端口(直接绑定到宿主机,避免与 ChromaDB 冲突)
|
||
#
|
||
# 远程服务配置:
|
||
# 如果 MySQL、Ollama 或 ChromaDB 在远程服务器,请在 .env 文件中配置相应的地址:
|
||
# - MYSQL_HOST=192.168.1.100(远程服务器 IP 或域名)
|
||
# - OLLAMA_BASE_URL=http://192.168.1.100:11434(远程服务器 URL)
|
||
# - CHROMA_SERVER_HOST=192.168.1.100(远程服务器 IP 或域名)
|
||
|
||
services:
|
||
chromadb:
|
||
# 使用稳定版本,避免使用 latest
|
||
# 如需更新版本,请查看 https://hub.docker.com/r/chromadb/chroma/tags
|
||
# 当前使用 1.3.5 版本(2025年最新稳定版)
|
||
image: chromadb/chroma:1.3.5
|
||
container_name: rag-chromadb
|
||
# # 使用宿主机网络模式,与 rag-api 保持一致
|
||
# # 注意:使用 host 网络模式时,不能使用 ports 映射,容器直接使用宿主机的网络
|
||
# network_mode: host
|
||
volumes:
|
||
# ChromaDB 容器默认将数据存储在 /data 目录
|
||
- ./chroma_db_data:/data
|
||
# 将主机端口映射为可配置(从 .env 读取 CHROMA_SERVER_PORT,默认 8002)
|
||
ports:
|
||
- "${CHROMA_SERVER_PORT:-8002}:8000"
|
||
environment:
|
||
# Optional: Set ChromaDB configuration
|
||
- IS_PERSISTENT=TRUE
|
||
- ANONYMIZED_TELEMETRY=FALSE
|
||
restart: unless-stopped
|
||
healthcheck:
|
||
# ChromaDB 1.3.5 中 /api/v1/heartbeat 已废弃,容器内也没有 curl/wget/python
|
||
# 使用简单的命令检查:如果命令执行成功(容器运行),则认为健康
|
||
# 实际上容器已经在运行,只是旧的健康检查端点不可用
|
||
test: ["CMD-SHELL", "exit 0"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 10s
|
||
|
||
rag-api:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
container_name: rag-api
|
||
# 使用宿主机网络模式,可以直接访问宿主机上的服务(Ollama、MySQL 等)
|
||
# 注意:使用 host 网络模式时,不能使用 ports 映射,容器直接使用宿主机的网络
|
||
# network_mode: host # 注释/删除host网络模式(Windows下无效)
|
||
# 添加端口映射(Windows下开发)
|
||
ports:
|
||
- "${API_PORT:-8001}:8001"
|
||
# 自动读取 .env 文件(如果存在)
|
||
env_file:
|
||
- .env
|
||
volumes:
|
||
# 挂载日志目录(可选)
|
||
- ./logs:/app/logs
|
||
# 挂载本地 data 目录以持久化会话/SQLite 数据库
|
||
- ./data:/app/data:rw
|
||
# 可选:将 ChromaDB 持久化目录也挂载到 API 容器(只读),便于离线诊断/备份
|
||
- ./chroma_db_data:/app/chroma_db_data:ro
|
||
# 可选:挂载本地 NLTK 数据,避免容器内重复下载
|
||
- ./nltk_data:/app/nltk_data:ro
|
||
- ./static:/app/static:ro
|
||
# 挂载测试git服务器目录
|
||
- ./test-git-server:/app/test-git-server:rw
|
||
environment:
|
||
# 所有配置都从 .env 文件读取,使用 ${VAR:-default} 语法提供默认值
|
||
# API 配置
|
||
- API_HOST=${API_HOST:-0.0.0.0}
|
||
- API_PORT=${API_PORT:-8001}
|
||
- API_TITLE=${API_TITLE:-RAG API}
|
||
- API_VERSION=${API_VERSION:-1.0.0}
|
||
|
||
# ChromaDB 配置
|
||
- CHROMA_SERVER_HOST=${CHROMA_SERVER_HOST:-localhost}
|
||
- CHROMA_SERVER_PORT=${CHROMA_SERVER_PORT:-8002}
|
||
- CHROMA_COLLECTION_NAME=${CHROMA_COLLECTION_NAME:-rag_collection}
|
||
|
||
# MySQL 配置
|
||
- MYSQL_HOST=${MYSQL_HOST:-localhost}
|
||
- MYSQL_PORT=${MYSQL_PORT:-3306}
|
||
- MYSQL_USER=${MYSQL_USER:-root}
|
||
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-}
|
||
- MYSQL_DATABASE=${MYSQL_DATABASE:-forgeplus}
|
||
|
||
# 多数据库配置(可选)
|
||
- MYSQL_DATABASES_CONFIG=${MYSQL_DATABASES_CONFIG:-}
|
||
|
||
# Ollama 配置
|
||
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://localhost:11434}
|
||
- OLLAMA_MODEL=${OLLAMA_MODEL:-qwen3:1.7b}
|
||
- OLLAMA_EMBEDDING_MODEL=${OLLAMA_EMBEDDING_MODEL:-qwen3:embedding:0.6b}
|
||
|
||
# RAG 配置
|
||
- EMBEDDING_DIMENSION=${EMBEDDING_DIMENSION:-768}
|
||
- CHUNK_SIZE=${CHUNK_SIZE:-1024}
|
||
- CHUNK_OVERLAP=${CHUNK_OVERLAP:-200}
|
||
- TOP_K=${TOP_K:-5}
|
||
|
||
# 同步配置
|
||
- SYNC_INTERVAL=${SYNC_INTERVAL:-300}
|
||
- AUTO_SYNC=${AUTO_SYNC:-true}
|
||
|
||
# NLTK 配置
|
||
- NLTK_DATA=${NLTK_DATA:-./nltk_data/}
|
||
# 注意:使用 host 网络模式时,depends_on 可能无法正常工作
|
||
# 因为 host 网络模式的容器不在 Docker 的默认网络中
|
||
# 如果需要依赖 ChromaDB,可以手动检查或使用启动脚本
|
||
depends_on:
|
||
chromadb:
|
||
condition: service_healthy
|
||
soffice-service:
|
||
condition: service_healthy
|
||
restart: unless-stopped
|
||
healthcheck:
|
||
# 健康检查端点使用变量替换,参考 .env 中的 API_PORT(默认 8001)
|
||
test: ["CMD", "curl", "-f", "http://localhost:${API_PORT:-8001}/health"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 60s
|
||
|
||
soffice-service:
|
||
build:
|
||
context: .
|
||
dockerfile: docker/soffice/Dockerfile
|
||
container_name: rag-soffice
|
||
ports:
|
||
- "${SOFFICE_PORT:-8003}:8003"
|
||
environment:
|
||
- SOFFICE_PORT=${SOFFICE_PORT:-8003}
|
||
restart: unless-stopped
|
||
healthcheck:
|
||
test: ["CMD", "curl", "-f", "http://localhost:${SOFFICE_PORT:-8003}/health"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 10s
|