a1b80566bb
- config.py / .env.example / docker-compose.yml:默认模型改为 qwen3:1.7b(备选 qwen3:4b),compose 同步拉取 - 经 runtime_settings 注入 summarize/query/classify 三用途,改默认值即全局生效 - README / CLAUDE.md / 前端 Settings.vue 占位符同步更新
118 lines
4.2 KiB
YAML
118 lines
4.2 KiB
YAML
# ============================================================
|
||
# 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 7940HS(16 线程)的 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
|