RAG/docker-compose.yml

143 lines
5.4 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.

# 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
# 自动读取 .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
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