nex_docus/docs/deploy/changelog.md

134 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 部署与配置变更日志
> 记录**影响部署方式、配置项、运维命令**的变更。纯功能/界面变更记录见 `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.md` |
| `fix_docker_deployment.sh` | 删除 | 针对已不存在的旧 compose 结构 |
- **原因**:根目录脚本混杂、命名不一致,历史一次性脚本已与新 schema 脱节,容易误执行。
- **影响**:所有引用 `./deploy.sh` 的命令、文档、CI 需改为 `./scripts/deploy.sh`。
- **迁移动作**:
```bash
./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`(开发由 vite `server.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.md` | `docs/quickstart.md` |
| `DATABASE.md` | `docs/database.md` |
| `DEPLOY.md` | `docs/deploy/README.md` |
| `CHANGELOG_DEPLOY.md` | `docs/deploy/changelog.md`(本文件) |
| `PROJECT.md` / `IMPLEMENTATION_PLAN.md` | `docs/archive/`(历史归档,与现状不符) |
| `docs/manual/docus系统使用手册.md` | `docs/manual/user-guide.md` |
| `DEPLOYEE.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`](../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 数据一次性导出:
```bash
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` 放大,避免答案被截断。