Files
QuestionProject/ai_knowledge_base_v2/deployment/DEPLOYMENT_GUIDE.md

150 lines
4.7 KiB
Markdown
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.
# AI 知识库系统 V2 部署手册
## 适用范围
本文档用于 V2 当前版本的部署交接。当前版本包含:
- 后端FastAPI
- 用户端 H5Vue 3
- 管理后台Vue 3 + Element Plus
- 数据库MySQL 8.x
## 部署前检查
1. 确认服务器已经安装 Docker 和 Docker Compose。
2. 确认 MySQL 数据目录有持久化卷或外部数据库。
3. 确认以下密钥不再使用开发默认值:
- `JWT_SECRET_KEY`
- `BOOTSTRAP_ADMIN_PASSWORD`
- 模型 API Key
- 飞书检索服务凭证或适配服务密钥
4. 确认防火墙只开放必要端口。
5. 确认已经执行数据库备份。
## 本地开发启动
```bash
cd ai_knowledge_base_v2
docker compose -f docker-compose.dev.yml up --build
```
## 生产环境启动
生产环境必须使用 `docker-compose.prod.yml`。先复制根目录 `.env.example``.env`,替换其中全部示例密码和密钥,再执行:
```bash
docker compose -f docker-compose.prod.yml config --quiet
docker compose -f docker-compose.prod.yml up -d --build
```
生产编排只向宿主机暴露统一网关端口MySQL、Redis、后端、用户端和管理端均仅在容器网络内访问。用户端与管理端使用 Nginx 静态镜像,后端默认启动 4 个 worker。
`DATABASE_URL``REDIS_URL` 中的密码如包含 `@``:``/``#` 等特殊字符,必须先进行 URL 编码。`CONFIG_ENCRYPTION_KEY` 可通过以下命令生成,生成后必须妥善备份且不能随意更换:
```bash
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
如果用户端问答需要直读飞书知识库,优先在管理后台“系统设置 / 外部服务”中配置飞书 AppID 和 AppSecret保存后即可生效不需要重建容器。
也可以在启动前通过后端运行环境变量配置,作为系统设置为空时的兜底:
```bash
export FEISHU_APP_ID=你的飞书应用AppID
export FEISHU_APP_SECRET=你的飞书应用AppSecret
docker compose -f docker-compose.dev.yml up -d --build backend user-client admin-web
```
也可以在 `ai_knowledge_base_v2/.env` 中配置 `FEISHU_APP_ID``FEISHU_APP_SECRET``FEISHU_SEARCH_URL`。后台“知识库管理”只维护 SpaceID、NodeID 和启用状态;飞书应用凭证在后台“系统设置”维护,不存放在知识库记录中。若使用独立飞书检索适配服务,则在后台“系统配置”填写飞书检索服务地址,后端会优先调用该地址。
默认地址:
- 统一入口:`http://127.0.0.1:8080/`
- 用户端 H5`http://127.0.0.1:8080/`
- 管理后台:`http://127.0.0.1:8080/login`
- 后端健康检查:`http://127.0.0.1:8080/api/health`
- 用户端直连调试:`http://127.0.0.1:5173/`
- 管理后台直连调试:`http://127.0.0.1:5174/login/`
- 后端直连调试:`http://127.0.0.1:8100/api/health`
- MySQL`127.0.0.1:3307`
## 单域名访问
当前编排新增 `gateway` 服务作为统一入口。内网穿透时建议只穿透 `gateway:80`,域名路径分流如下:
```text
https://qa.huiyushuyuan.cn/ 用户端 H5
https://qa.huiyushuyuan.cn/login 管理后台登录页
https://qa.huiyushuyuan.cn/api/... 后端 API
```
`.env` 中推荐配置:
```bash
FRP_PROXY_NAME=qa-web
FRP_LOCAL_IP=gateway
FRP_LOCAL_PORT=80
FRP_CUSTOM_DOMAINS=qa.huiyushuyuan.cn
```
## 本地开发初始化账号
用户端:
```text
手机号:任意 11 位手机号
验证码123456
```
管理后台本地开发环境可通过环境变量初始化首个管理员,例如:
```text
账号admin
密码admin123456
```
生产环境不允许使用上述开发密码。正式部署前必须在 `.env` 或服务器环境变量中配置安全的 `BOOTSTRAP_ADMIN_USERNAME``BOOTSTRAP_ADMIN_PASSWORD`,并确认管理后台登录页不会预填账号密码。
## 数据库迁移
后端容器启动时会执行:
```bash
alembic upgrade head
```
如果需要手工执行:
```bash
cd apps/backend
alembic upgrade head
```
## 备份
可使用脚本:
```bash
cd ai_knowledge_base_v2
BACKUP_DIR=./backups ./scripts/mysql_backup.sh
```
## 回滚原则
1. 先停止新版本服务。
2. 切回上一版镜像或上一版 Git commit。
3. 如果数据库迁移不可逆,先从备份恢复。
4. 恢复后检查:
- `/api/health`
- 用户端登录
- 用户端提问
- 管理后台登录
- 管理后台数据列表
## 生产待补事项
- 在域名入口或上游反向代理配置 HTTPS 证书。
- 接入集中式结构化日志、主机与容器指标监控和异常告警。
- 根据正式流量压测结果调整 worker、数据库连接池和问答队列参数。
- 定期执行数据库备份和恢复演练,并单独备份 `CONFIG_ENCRYPTION_KEY`