8.3 KiB
8.3 KiB
部署与配置变更日志
记录影响部署方式、配置项、运维命令的变更。纯功能/界面变更记录见
docs/sdd/releases/。 约定:新变更写在最上方;每条必须写清「变更 / 原因 / 影响 / 迁移动作」。
v1.0.0(待发布:需 git tag v1.0.0)
1. 仓库脚本统一迁移到 scripts/
-
变更:根目录的部署/启动脚本全部移入
scripts/,新增一键启动与停止脚本。旧位置 新位置 说明 ./deploy.sh./scripts/deploy.sh部署脚本保留,路径变更 — ./scripts/start.sh新增:本地一键启动(后端 + 前端 + 探活) — ./scripts/stop.sh新增:一键停止本地服务 backend/scripts/{init_database.sql,migrate_*.sql,add_*.py,check_*.py,…}删除 过期的一次性脚本/SQL,初始化与迁移链路见 docs/database.mdfix_docker_deployment.sh删除 针对已不存在的旧 compose 结构 -
原因:根目录脚本混杂、命名不一致,历史一次性脚本已与新 schema 脱节,容易误执行。
-
影响:所有引用
./deploy.sh的命令、文档、CI 需改为./scripts/deploy.sh。 -
迁移动作:
./scripts/deploy.sh --help # 查看可用子命令 ./scripts/start.sh # 本地开发一键启动
2. Compose 与 .env 配置项收敛
- 变更:
docker-compose.yml移除废弃的顶层version: '3.8'字段。- 移除前端镜像构建参数
VITE_API_BASE_URL(前端代码从未读取该变量)。 .env.example移除VITE_API_BASE_URL,改为注释说明前端固定请求同源/api/v1。
- 原因:前端 API 地址固定为相对路径
/api/v1(开发由 viteserver.proxy转发,容器内由frontend/nginx.conf反代到 compose 服务backend)。保留该变量会让人以为可以改前端 API 域名,实际compose默认值会直接产出坏产物。 - 影响:升级后重新
build前端镜像即可;.env中残留的VITE_API_BASE_URL不再生效(可直接删除)。 - 迁移动作:
grep -n VITE_API_BASE_URL .env确认并删除该行。
3. backups/ 纳入 .gitignore
- 变更:
.gitignore新增backups/。 - 原因:
./scripts/deploy.sh backup会在仓库根产出backups/(SQL + storage 归档),此前未被忽略,易被误提交(内含数据库全量数据)。 - 迁移动作:无需操作;历史遗留的
backup/(旧目录)请自行确认是否已离线保存后删除。
4. deploy.sh uninstall 行为修正
- 变更:
uninstall子命令改为docker compose down -v --rmi local --remove-orphans,并修正提示文案。 - 原因:旧实现里
docker rmi $(docker images | grep nex-docus)是空操作(镜像名不带该前缀),且文案暗示会删除数据;实际 storage 采用宿主机 bind mount,down -v不会删除文档文件。 - 影响:卸载会删除命名卷(MySQL/Redis 数据)与本地构建镜像;
STORAGE_PATH指向的宿主机目录仍需手动删除。 - 迁移动作:卸载前先执行
./scripts/deploy.sh backup。
5. 两套默认密码并存(重要,易踩坑)
| 场景 | 初始化管理员 | 新建普通用户默认密码 | 来源 |
|---|---|---|---|
本地开发(scripts/start.sh + backend/scripts/init_db.py) |
admin / admin@123 |
User@123 |
backend/scripts/init_db.py 与 config.py 的默认值 |
Docker 部署(docker-compose.yml + backend/scripts/init_db.py) |
admin / Admin@123456 |
User@123456 |
.env 的 ADMIN_PASSWORD / DEFAULT_USER_PASSWORD(compose 注入,见本文第 8 条) |
- 原因:历史原因两套初始化路径分别写死了不同默认值。
- 影响:跨环境复现问题时会以为"密码错了"。
- 迁移动作:任何环境部署后立即修改管理员密码;生产环境必须在
.env显式设置ADMIN_PASSWORD。 - 同时:
init_db.py的管理员默认邮箱由真实域名改为占位admin@example.com(原为admin@unisspace.com),部署后请在「个人设置」里改成实际邮箱。
6. 文档位置重组
-
变更:根目录文档全部迁入
docs/。旧位置 新位置 QUICKSTART.mddocs/quickstart.mdDATABASE.mddocs/database.mdDEPLOY.mddocs/deploy/README.mdCHANGELOG_DEPLOY.mddocs/deploy/changelog.md(本文件)PROJECT.md/IMPLEMENTATION_PLAN.mddocs/archive/(历史归档,与现状不符)docs/manual/docus系统使用手册.mddocs/manual/user-guide.mdDEPLOYEE.md/README_DOCKER.md删除(内容与 DEPLOY.md重复且过期) -
原因:根目录 8 份 Markdown 重复/矛盾,且部分文档含明文生产凭据。
-
迁移动作:外部书签按上表更新;文档总入口见
docs/README.md。
7. 后端版本号为 1.0.0
- 变更:
backend/app/core/config.py的APP_VERSION从0.9.9改为1.0.0,与前端package.json、发布计划对齐。 - 影响:
/openapi.json的info.version会随之变为 1.0.0;/health无变化(/health仅返回状态);如运维脚本按版本号做灰度判断需重新对齐。 - 上线动作:需执行
git tag -a v1.0.0 -m "NEX Docus v1.0.0"(见docs/sdd/releases/v1.0.0.md)。
8. DEFAULT_USER_PASSWORD 现在真的可以从 .env 配置
- 变更:
docker-compose.yml的 backend 服务补上DEFAULT_USER_PASSWORD=${DEFAULT_USER_PASSWORD:-User@123456},.env.example补上该键。 - 原因:
config.py一直支持该配置项,但 compose 从未透传,Docker 部署下改.env无效,新建用户永远是User@123456。 - 影响:升级后在
.env设置即可生效;未设置时行为不变。 - 迁移动作:
echo 'DEFAULT_USER_PASSWORD=<随机值>' >> .env && docker compose up -d backend。
9. 后端启动增加「安全自检」告警
- 变更:
Settings.security_warnings()在应用启动时检查SECRET_KEY与DEFAULT_USER_PASSWORD,命中仓库模板里的占位/默认值时打WARNING(只告警,不阻断启动,避免影响存量部署)。 - 原因:compose 用
${SECRET_KEY:-your-secret-key-change-me-in-production}之类的兜底默认值,运维漏配.env时会带着公开已知的 JWT 密钥上线且毫无提示。 - 影响:日志里可能出现
[安全自检]开头的告警行;看到这行必须改配置,不要忽略。 - 迁移动作:
SECRET_KEY=$(openssl rand -hex 32)写入.env;ADMIN_PASSWORD、DEFAULT_USER_PASSWORD改为随机值。
10. .env.example 去掉真实域名邮箱
- 变更:
ADMIN_EMAIL从admin@unisspace.com改为占位admin@example.com。 - 原因:模板不应携带真实域名;compose 与
init_db.py的默认值本就是admin@example.com,两处不一致会让运维以为默认邮箱是前者。 - 迁移动作:已有
.env自行决定是否替换;部署后在「个人设置」里改成实际邮箱。
v0.9.9 及更早(历史,仅作追溯)
以下条目来自旧
CHANGELOG_DEPLOY.md,其中提到的./deploy.sh现位于./scripts/deploy.sh;早期版本号v1.0.1为文案占位,git 发布线此前最高仅到 v0.9.9。
前端端口 80 → 8080
- 避免与宿主机常见服务冲突;可用
.env的FRONTEND_PORT覆盖。
Storage 由 Docker Volume 改为宿主机 bind mount
- 新增
STORAGE_PATH(默认./storage),便于直接访问、备份、挂载独立磁盘,数据独立于容器生命周期。 - 旧 volume 数据一次性导出:
确认无误后再docker run --rm -v nex-docus_storage_data:/from -v "$(pwd)/storage:/to" alpine \ sh -c "cd /from && cp -a . /to"docker volume rm nex-docus_storage_data。
后端容器时区固定为 Asia/Shanghai
- 容器内
TZ=Asia/Shanghai,避免日志与created_at与业务时间相差 8 小时。
新增 /health 健康检查
- 供 compose
healthcheck与外层负载均衡探活使用。
Nginx 增加 SSE 支持
- 知识库对话为流式响应:
proxy_buffering off、proxy_read_timeout放大,避免答案被截断。