185 行
4.9 KiB
Markdown
185 行
4.9 KiB
Markdown
# Docker Compose 部署指南
|
||
|
||
## 1. 启动
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
```
|
||
|
||
查看状态:
|
||
|
||
```bash
|
||
docker compose ps
|
||
docker compose logs --tail=100 backend
|
||
docker compose logs --tail=100 frontend
|
||
```
|
||
|
||
## 2. 访问地址
|
||
|
||
- 前端:`http://<服务器IP>:7888/`
|
||
- 后端健康检查(反代):`http://<服务器IP>:7888/admin139/api/health`
|
||
|
||
示例:
|
||
|
||
- `http://caddns.pandoras.work:7888/`
|
||
- `http://caddns.pandoras.work:7888/admin139/api/health`
|
||
|
||
## 3. 端口与持久化
|
||
|
||
- `7888:3000`(frontend 对外)
|
||
- backend 默认不直接暴露端口(经 frontend 反代)
|
||
- 数据卷:`csp_data` -> `/data/csp.db`
|
||
|
||
## 4. 常用运维命令
|
||
|
||
```bash
|
||
docker compose down
|
||
docker compose up -d --build
|
||
docker compose restart frontend backend
|
||
```
|
||
|
||
## 4.1 初始化大规模题库(winterant/oi)
|
||
|
||
```bash
|
||
set -a; source .env; set +a
|
||
python3 scripts/import_winterant_oi.py \
|
||
--db-path /var/lib/docker/volumes/csp_csp_data/_data/csp.db \
|
||
--workers 3 \
|
||
--clear-all-problems
|
||
```
|
||
|
||
当前导入流程为:下载 PDF -> LLM 识别 -> 固定 JSON 落库 + 任务状态落库(内置 500/502/503/504 自动重试)。
|
||
|
||
仅下载导入、跳过 LLM:
|
||
|
||
```bash
|
||
python3 scripts/import_winterant_oi.py --skip-llm --workers 3
|
||
```
|
||
|
||
前端可通过 `/imports` 查看导入进度与明细结果。
|
||
|
||
请在 `.env` 中配置:
|
||
|
||
```env
|
||
OI_LLM_API_URL=https://one.hao.work/v1/chat/completions
|
||
OI_LLM_API_KEY=<your_key>
|
||
OI_LLM_MODEL=qwen3-max
|
||
OI_LLM_STREAM=true
|
||
OI_LLM_RETRY_MAX=5
|
||
OI_LLM_RETRY_SLEEP_SEC=1.5
|
||
OI_PDF_RETRY_MAX=5
|
||
OI_PDF_RETRY_SLEEP_SEC=1.5
|
||
OI_IMPORT_DIRECT_FALLBACK=true
|
||
OI_IMPORT_PREFER_DIRECT=true
|
||
OI_IMPORT_AUTO_RUN=true
|
||
OI_IMPORT_WORKERS=3
|
||
OI_IMPORT_CLEAR_EXISTING=true
|
||
OI_IMPORT_CLEAR_SOURCE_PREFIX=winterant/oi
|
||
OI_IMPORT_CLEAR_ALL_PROBLEMS=false
|
||
|
||
# SQLite 锁守护(定时探测 + 自愈)
|
||
CSP_SQLITE_BUSY_TIMEOUT_MS=15000
|
||
CSP_DB_LOCK_GUARD_ENABLED=true
|
||
CSP_DB_LOCK_GUARD_INTERVAL_SEC=20
|
||
CSP_DB_LOCK_GUARD_PROBE_TIMEOUT_MS=2000
|
||
CSP_DB_LOCK_GUARD_BUSY_STREAK=3
|
||
|
||
# Lark 机器人(事件回调 + 对话)
|
||
CSP_LARK_BOT_ENABLED=false
|
||
CSP_LARK_VERIFICATION_TOKEN=
|
||
CSP_LARK_APP_ID=
|
||
CSP_LARK_APP_SECRET=
|
||
CSP_LARK_OPEN_BASE_URL=https://open.feishu.cn
|
||
CSP_LARK_LLM_API_URL=
|
||
CSP_LARK_LLM_API_KEY=
|
||
CSP_LARK_LLM_MODEL=qwen3-max
|
||
CSP_LARK_LLM_SYSTEM_PROMPT=你是 CSP Quest World 的编程助教。请用简洁中文回答,先给结论,再给步骤。
|
||
CSP_LARK_LLM_TIMEOUT_SEC=30
|
||
CSP_LARK_API_TIMEOUT_SEC=15
|
||
CSP_LARK_MEMORY_TURNS=6
|
||
CSP_LARK_MAX_REPLY_CHARS=1200
|
||
|
||
# 网站爬虫守护(URL 入库后自动:生成规则 -> 测试 -> 运行)
|
||
CSP_CRAWLER_ENABLED=true
|
||
CSP_CRAWLER_INTERVAL_SEC=15
|
||
CSP_CRAWLER_REQUEUE_INTERVAL_SEC=43200
|
||
CSP_CRAWLER_FETCH_TIMEOUT_SEC=20
|
||
CSP_CRAWLER_SCRIPT_DIR=/data/crawlers
|
||
CSP_CRAWLER_LLM_API_URL=https://one.hao.work/v1/chat/completions
|
||
CSP_CRAWLER_LLM_API_KEY=替换为你的Key
|
||
CSP_CRAWLER_LLM_MODEL=qwen3-max
|
||
CSP_CRAWLER_LLM_TIMEOUT_SEC=30
|
||
```
|
||
|
||
说明:
|
||
|
||
- `CSP_SQLITE_BUSY_TIMEOUT_MS`:主连接遇到锁时的等待时间(毫秒)。
|
||
- `CSP_DB_LOCK_GUARD_ENABLED`:是否启用定时守护。
|
||
- `CSP_DB_LOCK_GUARD_INTERVAL_SEC`:守护探测间隔(秒)。
|
||
- `CSP_DB_LOCK_GUARD_PROBE_TIMEOUT_MS`:守护探测连接的 busy timeout(毫秒)。
|
||
- `CSP_DB_LOCK_GUARD_BUSY_STREAK`:连续探测到 busy/locked 达到阈值后触发一次自愈(WAL checkpoint + optimize)。
|
||
- `CSP_LARK_BOT_ENABLED`:是否启用 Lark 对话机器人回调处理。
|
||
- `CSP_LARK_VERIFICATION_TOKEN`:Lark 事件回调 token(建议配置)。
|
||
- `CSP_LARK_APP_ID/CSP_LARK_APP_SECRET`:Lark 应用凭据。
|
||
- `CSP_LARK_LLM_*`:机器人对话调用的模型配置。
|
||
- `CSP_CRAWLER_*`:网站爬虫守护配置(URL 入库后自动生成规则/测试/运行)。
|
||
- `CSP_CRAWLER_REQUEUE_INTERVAL_SEC`:已激活目标再次入队执行的周期(秒,`43200`=12小时,`0`=关闭周期重跑)。
|
||
|
||
## 5. 故障排查
|
||
|
||
### 5.1 无法访问 7888
|
||
|
||
1) 检查监听:
|
||
```bash
|
||
ss -ltnp | rg 7888
|
||
```
|
||
|
||
2) 检查容器端口映射:
|
||
```bash
|
||
docker compose ps
|
||
```
|
||
|
||
3) 本机探活:
|
||
```bash
|
||
curl -i http://127.0.0.1:7888/
|
||
curl -i http://127.0.0.1:7888/admin139/api/health
|
||
```
|
||
|
||
### 5.2 检查是否被 Clash 拦截
|
||
|
||
通常 inbound 到 `7888` 不会被 Clash 代理规则拦截,但可按下列方式确认:
|
||
|
||
```bash
|
||
ps -ef | rg clash
|
||
cat /opt/clash/runtime.yaml | rg "allow-lan|port|socks-port|redir-port"
|
||
iptables -t nat -S
|
||
nft list ruleset
|
||
```
|
||
|
||
若你希望 Clash 自身也允许局域网访问(与本项目 7888 端口不是同一件事),可设置:
|
||
|
||
- `/opt/clash/runtime.yaml` 中 `allow-lan: true`
|
||
- 重启 Clash 服务/进程
|
||
|
||
### 5.3 Docker 拉取慢/失败
|
||
|
||
可为 Docker 配置镜像加速,例如:
|
||
|
||
`/etc/docker/daemon.json`
|
||
```json
|
||
{
|
||
"registry-mirrors": ["https://docker.m.daocloud.io"]
|
||
}
|
||
```
|
||
|
||
然后:
|
||
```bash
|
||
systemctl daemon-reload
|
||
systemctl restart docker
|
||
```
|
||
|
||
## 6. 安全建议
|
||
|
||
- 生产环境建议在 Nginx/Caddy 前加 TLS。
|
||
- 在线编译运行属于高风险能力,建议部署到隔离沙箱执行。
|