Files
xsk-education-management/app/MAINTENANCE.md
T
2026-06-20 19:28:26 +08:00

164 lines
6.0 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.
# 维护手册
新时空教务管理系统长期维护时,目标是每次更新都能做到可检查、可部署、可回滚,并且不误改业务数据。
以下命令默认在仓库根目录 `/root/新时空教务管理系统` 执行。根目录 `Makefile` 会转发到 `app/` 下的实际应用配置;不要在根目录直接运行裸 `docker compose`,需要直接调用时使用 `docker compose -f app/docker-compose.yml <命令>`
## 日常更新流程
1. 查看当前改动:
```bash
git status --short
```
2. 修改代码后先跑本地检查:
```bash
make check
make smoke
```
3. 部署前记录业务数据哈希:
```bash
make data-hash
```
4. 构建、重启、健康检查和部署后哈希复核:
```bash
make deploy
```
5. 确认容器运行状态:
```bash
make ps
```
## 常用命令
- `make check`:检查前端 JS 语法和后端 Python 编译。
- `make smoke`:运行轻量前端行为烟测,覆盖排序按钮、组内排序和纠错后排序。
- `make data-hash`:输出 `classnotes.txt`、`学生课时账户.md`,以及存在时的 `admin_tasks.json`、`course_summary_state.json` 的 SHA-256。
- `make build`:构建 Docker 镜像。
- `make up`:重启 Docker Compose 服务。
- `make health`:带认证访问 `/api/health`。
- `make deploy`:按推荐顺序执行检查、构建、重启、健康检查和哈希复核。
- `make logs`:查看最近服务日志。
- `make install-gitea-backup`:安装提交后自动推送到 Gitea 的 Git hook。
## 收尾验证注意事项
收尾阶段要验证“当前运行服务”,不要只验证工作区文件。应用镜像在构建时把源码复制进容器;修改 Python、HTML、JS、CSS 后,如果没有重新执行 `make build` 和 `make up``curl` 到的接口和浏览器加载的页面仍可能是旧镜像内容。
- 部署类验证按依赖顺序执行,不要并行运行 `make up`、`make ps`、`curl`。先等 `make up` 完成,再看 `make ps`,最后访问接口或页面。
- 如果接口返回旧字段或旧页面,先确认是否已重建并重启容器;不要直接把旧响应判断成代码逻辑错误。
- 前端脚本或样式变更后,记得同步更新 HTML 中对应静态资源的 `?v=` 参数,再构建镜像,避免浏览器继续使用缓存。
- 用 `curl` 做收尾验证时优先使用简单命令。需要检查 HTML 内容时,先直接获取页面;如果要配合 `grep`,先在本地确认引号转义正确,避免把 shell 引号错误误判成服务问题。
- 如果 `curl http://127.0.0.1:<端口>` 连接失败,但 `make ps` 显示容器和端口正常,先区分执行环境网络限制和服务异常;必要时再看 `make logs`。
推荐收尾顺序:
```bash
make check
make build
make up
make ps
```
随后再访问具体接口或页面,例如:
```bash
set -a; . ./app/.env
curl -sS -u "admin:${ACCOUNTS_AUTH_PASSWORD}" "http://127.0.0.1:${APP_PORT:-18080}/api/account-health"
curl -sS -u "admin:${ACCOUNTS_AUTH_PASSWORD}" "http://127.0.0.1:${APP_PORT:-18080}/admin"
```
## Gitea 自动备份
新时空教务管理系统推荐把 Gitea SSH 仓库配置为 `origin`,并用 `post-commit` hook 在每次提交后自动推送当前分支。
首次配置:
```bash
git remote add origin <你的 Gitea SSH 仓库地址>
make install-gitea-backup
```
安装后,每次 `git commit` 成功都会执行:
```bash
git push origin HEAD:<当前分支>
```
注意:
- 自动备份只推送已提交内容,不会自动提交工作区中的未提交改动。
- 如果 Gitea 暂时不可用或 SSH key 权限异常,本地 commit 仍会保留,hook 只打印错误提示。
- 如果当前仓库已有 `.git/hooks/post-commit`,安装脚本会拒绝覆盖;确需覆盖时执行 `python3 scripts/install_gitea_backup_hook.py --force`。
## 数据保护
业务数据文件位于:
```text
/root/新时空教务管理系统/data/classnotes.txt
/root/新时空教务管理系统/data/学生课时账户.md
/root/新时空教务管理系统/data/admin_tasks.json
/root/新时空教务管理系统/data/course_summaries/
/root/新时空教务管理系统/data/course_summary_state.json
/root/新时空教务管理系统/data/operation_logs.jsonl
```
普通前端和查询类改动不应该改变这些文件;课程小结查询页是只读功能,也不应该改变这些文件。部署前后 `make data-hash` 输出应一致;如果涉及登记 API、课时账户编辑、课程小结自动入账或审核批准,先确认自动备份目录:
```text
/root/新时空教务管理系统/data/backups/
```
恢复备份时先停止服务,把备份文件复制回数据目录,再重新启动服务。
## 回滚建议
如果部署后页面异常:
1. 查看容器和日志:
```bash
make ps
make logs
```
2. 回到上一个可用 Git 版本后重新部署:
```bash
git status --short
git log --oneline -5
```
3. 重新执行:
```bash
make deploy
```
如果业务数据哈希异常,先不要继续写入数据,优先从 `../data/backups/` 或外部备份恢复。
## 课程小结迁移维护
- VPS 是 `classnotes.txt` 和 `学生课时账户.md` 的唯一正式写入方。
- 本机 `com.xsk.education-management.sync` 常驻同步迁移后应停止,避免旧本地数据覆盖 VPS。
- 本机课程小结采集脚本用 `XSK_INGEST_URL` 和 `XSK_INGEST_TOKEN` 推送批次;失败批次保存在本机 `推送失败队列/`。
- 管理后台的“课程小结审核”处理低置信或冲突小结;“操作记录”追踪接收、自动入账、重复、失败、审核批准和驳回。
- 历史小结导入使用 `scripts/import_course_summaries.py`,历史 `classnotes缺失.txt` 只生成审核任务,不自动扣课时。
## 提交前检查清单
- `make check` 通过。
- `make smoke` 通过。
- 查询类或前端类改动部署前后业务数据哈希一致。
- `make health` 正常返回 `ok: true`。
- 重要功能改动已在 `README.md` 或本文件补充维护说明。