Files
QMDSearch/docker-compose.yml
kplam a1b80566bb feat: 升级 Ollama 本地模型 qwen2.5:1.5b → qwen3:1.7b
- config.py / .env.example / docker-compose.yml:默认模型改为 qwen3:1.7b(备选 qwen3:4b),compose 同步拉取
- 经 runtime_settings 注入 summarize/query/classify 三用途,改默认值即全局生效
- README / CLAUDE.md / 前端 Settings.vue 占位符同步更新
2026-08-01 00:28:50 +08:00

118 lines
4.2 KiB
YAML
Raw Permalink 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.
# ============================================================
# QMDSearch — 部署 compose(相对路径,可任意目录部署)
# ------------------------------------------------------------
# 数据库数据 / 配置 / 代码 / 前端 全部从本地目录挂载,
# 日常更新(改代码或前端)只需改文件 + `docker compose restart app`
# 无需重新 build 镜像。
#
# 说明:
# - 相对路径相对于本 compose 文件所在目录(即项目根目录)解析,
# 因此直接把整个项目目录放到 NAS(或任意主机)即可部署。
# - app 服务复用已构建的 qmdsearch-app 镜像作为「带依赖的运行时」
# (Python 依赖装在镜像内,代码与前端构建产物走挂载)。
# - 仅当 Python 依赖(pyproject.toml)变化时,才需 `docker build -t qmdsearch-app .` 一次。
# - 数据目录默认 ./data,可通过 .env 的 NAS_DATA_DIR 覆盖到其他磁盘。
# ============================================================
services:
app:
# 不再 build 项目代码,改用已含依赖的运行时镜像;代码与前端均走下方挂载
image: qmdsearch-app:latest
container_name: qmdsearch-app
restart: unless-stopped
ports:
- "${APP_PORT:-8000}:8000"
environment:
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
- REDIS_URL=redis://redis:6379/0
- OLLAMA_BASE_URL=http://ollama:11434
# 针对 16 线程 / 61GB 内存的 NAS 调优:放宽入库并发
- INGEST_MAX_CONCURRENCY=${INGEST_MAX_CONCURRENCY:-4}
env_file:
- ./.env
depends_on:
qdrant:
condition: service_started
redis:
condition: service_healthy
ollama:
condition: service_started
volumes:
# ---- 代码(本地,改后 restart 即生效,免 build----
- ./app:/app/app
- ./scripts:/app/scripts
# ---- 前端构建产物(本地 frontend/dist,改前端后 build 到此目录 + restart----
- ./frontend/dist:/app/app/static/admin
# ---- 配置(显式文件映射,只读)----
- ./.env:/app/.env:ro
# ---- 数据 / 日志(持久化)----
- ${NAS_DATA_DIR:-./data}/logs:/app/logs
- ${NAS_DATA_DIR:-./data}/uploads:/app/uploads
networks:
- qmdsearch
qdrant:
image: qdrant/qdrant:latest
container_name: qmdsearch-qdrant
restart: unless-stopped
ports:
- "${QDRANT_PORT:-6333}:6333"
- "${QDRANT_DASHBOARD_PORT:-6334}:6334"
volumes:
- ${NAS_DATA_DIR:-./data}/qdrant:/qdrant/storage
# 官方 qdrant 镜像不含 curl/wget,内部 healthcheck 无法执行 HTTP 探测;
# 改用 service_started 依赖(qdrant 启动即就绪),由 app 的 restart 策略兜底。
networks:
- qmdsearch
redis:
image: redis:7-alpine
container_name: qmdsearch-redis
restart: unless-stopped
# 仅内部网络访问,不对外暴露主机端口(避免与 NAS 已有 redis 的 6379 冲突)
volumes:
- ${NAS_DATA_DIR:-./data}/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- qmdsearch
ollama:
image: ollama/ollama:latest
container_name: qmdsearch-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT:-11434}:11434"
volumes:
- ${NAS_DATA_DIR:-./data}/ollama:/root/.ollama
environment:
# 针对 Ryzen 9 7940HS16 线程)的 CPU 推理调优:
# 并行推理任务数、常驻模型数、单请求线程上限、KV 缓存量化以省内存
- OLLAMA_NUM_PARALLEL=4
- OLLAMA_MAX_LOADED_MODELS=3
- OLLAMA_NUM_THREADS=16
- OLLAMA_KV_CACHE_TYPE=q8_0
# 首次启动自动拉取所需模型(qwen3:1.7b 总结 + bge-m3 嵌入 + qwen3-reranker 重排),
# 下载完成后转交常驻 ollama serve。已存在时仅做健康检查。
entrypoint: /bin/bash
command:
- -c
- |
ollama serve &
SERVE_PID=$$!
sleep 6
ollama pull qwen3:1.7b
ollama pull bge-m3
ollama pull qwen3-reranker:0.6b
wait $$SERVE_PID
networks:
- qmdsearch
networks:
qmdsearch:
driver: bridge