运维与授权
运维与故障排查
健康探针、日志体系、备份恢复、队列治理与一套救急命令——把生产环境稳定跑起来需要知道的一切。
健康探针
{
"status": "ok", // ok / degraded
"installed": true,
"checks": {
"db": { "ok": true }, // SELECT 1
"redis": { "ok": true }, // ping
"disk": { "ok": true }, // 剩余空间粗粒度
"queue": { "ok": true } // 消费进程存活
}
}
把它接进你的监控(Uptime Kuma、Prometheus blackbox 等),degraded 即告警。探针对外只报粗粒度状态,详情落服务端日志——不泄露基础设施信息。
日志在哪里
| 文件(runtime/logs/) | 内容 | 保留 |
|---|---|---|
tenraft.log | 应用主日志(按天滚动) | 按天 |
slow.log | 慢查询(> 500ms) | 按天 |
upgrade.log | 升级引擎全程 | 90 天 |
operation.log | 管理端操作审计 | 90 天 |
queue_failed.log | 队列失败任务 | 90 天 |
crontab.log | 定时任务执行 | 按天 |
stdout.log / workerman.log | 进程级输出 | — |
备份与恢复
- 后台操作:平台后台 →「系统」→ 备份恢复。备份为纯 PHP 流式导出
.sql.gz(不依赖 mysqldump 二进制);恢复前自动先做一份安全备份。 - 命令行:
php webman backup:run备份;php webman backup:restore-run恢复。 - 恢复期间全站进入维护模式(fail-closed);恢复异常中断留下的维护状态用
php webman maintenance:recover查询、接管或解除。 - 完整备份 = 数据库 +
.env+public/uploads+runtime(后三者是升级保护路径,文件级备份即可)。
队列与定时任务
- 异步事件与长任务(备份、导出)走 Redis 队列,各自独立消费进程——导出大文件不会阻塞通知发送。
- 失败任务管理:
php webman queue:failed(列出 / 重放 / 丢弃)。 - 定时任务由数据库驱动(每 10 秒扫描到期任务),平台后台可视化启停与手动触发;
php webman crontab:tick手动跑一轮。 - 内置任务包括:授权心跳、租户到期处理、支付 / 退款 / 提现对账、域名复验、回收站清理、导出产物清理、AI 卡死任务回收、小程序审核状态同步等。
运维命令速查
| 命令 | 用途 |
|---|---|
php webman migrate / migrate:status | 执行 / 查看数据库迁移 |
php webman db:lint | 扫描迁移 SQL 的 MySQL 双版本兼容红线 |
php webman backup:run / backup:restore-run | 数据库备份 / 恢复 |
php webman maintenance:recover | 处理异常残留的维护状态 |
php webman queue:failed | 失败队列管理 |
php webman storage:diag | 存储驱动全链路自检(上传 / 读取 / 删除) |
php webman ext:resume / system:resume | 扩展 / 核心升级的崩溃恢复 |
php webman audit:prune | 清理过期审计日志 |
php webman hook:list | 列出全部扩展点与已注册监听器 |
演示模式
对外开放体验环境时打开 DEMO_MODE:业务写操作(建商品、装修、建表单)照常放行让访客真实体验,只拦三类危险操作——破坏演示环境(改密码、删数据)、触达外部系统(群发、提审、打款)、动文件系统与全库(装卸扩展、升级、备份恢复)。演示数据以你预先制作的一份数据库备份为基线(黄金快照),每日凌晨自动恢复到该基线;登录页自动预填演示账号。
常见故障速查
| 症状 | 排查方向 |
|---|---|
| 全站 503「系统更新中」 | 升级 / 恢复中的正常维护态。异常残留时用 maintenance:recover;维护租约有超时兜底,不会永久 503 |
| MySQL 连接数打爆 | 多核机未设 HTTP_COUNT(默认 CPU × 2 个 worker,每个都持连接)。设小 worker 数并核对 max_connections |
| 生产环境接口全部维护中,本地正常 | 生产 Redis 不可用时 HTTP fail-closed(APP_ENV=local 才 fail-open)。先救 Redis |
| 扩展安装报「拒绝验签」 | 生产未配置官方公钥文件或包签名无效。检查 EXTENSION_OFFICIAL_PUBKEY_FILE;本地开发用 APP_ENV=local |
| 通知没发出去 | 查发送日志(场景 / 通道 / 错误);短信需装通道插件并配凭证;周期额度用尽会报超限并附用量 |
| 升级 / 安装中断 | system:resume / ext:resume 恢复一致状态,再看 upgrade.log 定位 |