运维与授权
在线升级
平台后台点一下完成框架与扩展升级:验签、预检、备份、迁移、健康检查、失败回滚全自动。本章讲升级引擎的行为边界与「什么时候需要重启」。
三档生效模型
不同操作对进程的要求不同,Tenraft 把它收敛为三档,后台会明确告诉你当前处于哪一档:
| 操作 | 生效方式 | 停机窗口 |
|---|---|---|
| 装 / 卸 / 启停扩展 | 注册物(通道、菜单、功能键、驱动)跨进程即时生效;扩展类动态装载当场可用 | 零 |
| 扩展带后端路由 | 路由需一次平滑加载才挂上——商店页出现「重启加载」横幅,攒一批点一次 | Linux 零(平滑 reload) |
| 框架核心升级 | 替换已加载进内存的类文件,必须换进程 | Linux 平滑 reload 零停机;Windows 受管重启数秒维护窗 |
核心升级流程
平台后台 → 框架升级:在线检查更新(云端 manifest 经 Ed25519 验签,仅提示有无新版)或直接上传 .tzcore 升级包。执行流程:
- 1
验签
Ed25519 总签名 + 逐文件 sha256 清单校验,签名不过直接拒绝。
- 2
预检(preflight)
磁盘余量、包完整性、PHP 版本与扩展、路径可写、已装扩展的框架版本兼容检查。
- 3
备份与暂存
将被覆盖的文件先备份再落新文件(staged 写入);数据库按需备份。
- 4
迁移
执行本版本迁移(幂等,且已通过 MySQL 5.7 / 8.0 双版本兼容检查)。
- 5
换进程与健康检查
平滑 reload / 受管重启后轮询健康探针;不通过自动回滚已备份文件。
- 保护路径永不覆盖:
.env、public/uploads、runtime、已装应用与插件目录。 - 升级全程写断点日志(WAL 式):进程中途被 kill,重启后用
system:resume回滚或续跑,不会留下半套文件。 - 扩展升级复用同一引擎:按版本增量迁移链逐版执行,升级前自动快照该扩展目录,同样支持
ext:resume崩溃恢复。
重启的三种姿势
# Linux 生产(推荐):平滑 reload,零停机
$ php start.php reload
# Windows / 单机受管:supervisor 优雅重启
$ php supervisor.php # 常驻;收到重启信号后 3s 排空在途请求,
# 换新进程期间返回干净的 503 维护页
# 后台按钮:平台后台 → 进程管理 → reload / restart
升级期间的维护模式有租约与超时兜底:即使升级进程异常消失,维护状态也会在租约到期后自动解除,绝不会永久 503。
升级常见问题
| 问题 | 答案 |
|---|---|
| 升级会覆盖我改过的内核文件吗 | 会(保护路径除外)。改内核不受支持——需求走扩展点或联系官方,否则每次升级都要重演冲突 |
| 升级失败会怎样 | 自动回滚备份文件并标记失败,服务回到升级前状态;诊断信息在升级日志(runtime/logs/upgrade.log) |
| 升级中断电 / 被 kill | 重启后运行 php webman system:resume(核心)或 php webman ext:resume(扩展)恢复到一致状态 |
| 装了插件但接口 404 | 带后端路由的插件需要一次「重启加载」——看商店页顶部横幅,点一下即可 |