平台后台
系统维护
平台后台侧栏最下面那扇「系统」门:品牌与备案怎么配、备份怎么做、怎么升级框架、出事了去哪查——部署方日常打交道的十一个页面,一次讲透。
「系统」是一扇门,不是一堆菜单
客户、产品、团队这三组是你每天都要点的,系统这一组不是——品牌配一次就不动了,备份和升级几个月才碰一回。所以侧栏里「系统」被折成了一行:点它不会展开一串子项,而是进到一个目录页 /platform/system,十一个页面按四个区排在这里,每项一行「名字 + 一句话」,扫一眼就知道该进哪个。
| 分区 | 页面 | 什么时候用 |
|---|---|---|
| 基础配置 | 平台设置 | 换品牌名与 Logo、填备案号、配附件存储 |
| 基础配置 | 数据字典 | 维护下拉选项这类公共枚举 |
| 基础配置 | 授权信息 | 看本次部署的授权状态、粘贴凭证激活 |
| 运行维护 | 备份恢复 | 建备份、下载留底、把库回滚到某个时刻 |
| 运行维护 | 定时任务 | 看后台自动跑的任务,启停或手动触发一次 |
| 运行维护 | 进程管理 | 看常驻进程存活情况,平滑重启 |
| 运行维护 | 框架升级 | 检查新版本、上传升级包、查升级历史 |
| 运行记录 | 系统日志 | 查谁在什么时候动了什么、谁登录过 |
| 运行记录 | 导出记录 | 下载各列表页发起的导出文件 |
| 资源与工具 | 素材库 | 平台自己的图片、视频、音频与文档 |
| 资源与工具 | 代码生成器 | 设计一个实体,直接生成一套增删改查 |
- 目录页显示的内容按权限裁剪:你打不开的项根本不会出现在这里,和侧栏完全一致;一项都没有时页面会明说「这里暂时没有你可以打开的项」,而不是给你一个空白页。
- 各页面的网址没有变——原来收藏的
/platform/backup、/platform/logs之类的深链照常能打开。
平台设置:把这套系统变成你的
这是新部署后第一个该进的页面。它有四个页签:平台品牌、备案版权、下级策略、存储。前三个改的是同一份配置——在任意一个页签点「保存设置」,三个页签的改动会一起生效;「存储」是独立的一份,单独保存。
平台品牌
- 平台名称、Logo(亮色主题)、Logo(暗色主题,可选)、浏览器图标(favicon,可选)、登录页描述(可选)。
- 留空就沿用内置标识。名称与 Logo 会同时用在平台登录页、租户登录页和工作台头部——改一处,全都跟着变。
备案版权
- 主体名称、版权文案、ICP 备案号、公安备案号,除 ICP 外都可留空。
- 版权文案可以自定义,例如
© 2026 某某科技有限公司。
下级策略
这里决定你的客户能把后台改成什么样。名称模板与 Logo 模板(亮/暗)是租户工作台头部展示的品牌,留空则回落到你的平台品牌。下面两个开关是关键:
| 开关 | 关闭时 | 开启时 |
|---|---|---|
| 允许租户自定义后台品牌 | 全部租户后台统一使用上面的模板,由你统一代管 | 租户所有者可以在租户设置里覆盖成自己的品牌 |
| 允许站点自定义品牌与合规信息 | 站点后台「站点信息」里的 Logo、前台展示名与备案字段被锁定,只有你能代改(站点名称仍可由对方修改) | 站点自己配自己的品牌与备案 |
存储
这一页管的是平台自有素材放在哪里。默认驱动是「本地」,开箱即用,文件落在 public/uploads,随当前域名直接访问。要换成云存储时,先安装对应的存储插件——装好之后它就会自动出现在「默认驱动」的选项里,选中后再填该驱动要求的密钥字段即可。
- 前端直传开关:开启后浏览器直接把文件传到云存储,不经服务器中转。用它需要在云控制台为 Bucket 配置 CORS(允许 POST)。
- 直传是安全降级的:本地驱动或凭证没配全时会自动回落成服务器中转,上传体验不会因此变成报错。
- 租户与站点各自的存储策略不在这里,在租户管理中单独配置。
数据字典:公共下拉选项
字典是平台统一维护、各处只读消费的一份枚举表。页面左右两栏:左边是字典类型,右边是选中那个类型下的数据项——先建类型,才能往里加数据项。
- 1
新建字典类型
右上角「新建字典类型」,填字典名称、类型标识(小写 snake_case,例如
order_status)与备注。类型标识是各处引用它的名字,建好后别随意改。 - 2
加数据项
在左栏点中该类型,右上角出现「新增数据」。每条填显示文本、字典值、排序(数字小的排前面)与备注。
- 3
停用而不是删除
类型和数据项都可以「停用」——已经用过的值建议停用保留,直接删会让历史数据失去对应的显示文本。
授权信息:这套部署的凭证
页面左边是「当前授权」,右边是「激活授权」。向官方申请授权时,需要提供左边显示的本部署 install_id——授权凭证是与它一一绑定的。拿到官方签发的凭证(一段 JSON)后,粘进右边的框点「激活」,验签通过即刻生效。
| 状态 | 含义 |
|---|---|
| 未激活 | 还没激活。此时各应用的部署池不设上限,属本地体验模式 |
| 已授权 | 正常 |
| 维保已到期(仍可用) | 维保期过了,系统照常运行 |
| 在线校验失败(宽限期内) | 配了在线校验端点但连不上。页面会显示宽限截止时间,超期未恢复将吊销 |
| 授权已吊销 | 凭证校验失败或宽限超期,需要重新激活;凭证被改动过则要向官方申请重签 |
- 校验模式一栏如实写明当前是哪一种:「在线校验(每日心跳,失败进入离线宽限)」,或者「本地防篡改(未配置在线校验端点)」——后者不参与宽限与吊销。
- 已激活时还会显示版本、签发时间、维保期至(没有到期时间就显示「永久」)与上次校验时间。
- 下方「各应用部署池上限」列出每个应用能绑多少个站点,
不限表示没有上限。名额怎么在平台、租户、站点之间流转,见授权与名额。
备份恢复:先会备份,再谈恢复
系统自带一个内置定时任务「自动数据库备份」,每天凌晨 3:30 做一次全量备份,默认是开着的。第一次接手一套部署时,先去定时任务确认它确实是「启用」状态,再回来做下面这些事。
- 1
手动建一份
右上角「新建备份」,选模式:全量导出全部表结构与数据,是唯一能用于恢复的模式;仅结构只导出表结构不含数据,适合做建站模板或排查表结构问题。点「开始备份」后任务在后台跑,不用守着页面。
- 2
盯进度
运行中的行会显示进度条、「已完成表数 / 总表数」和当前正在导的表名。有任务在推进时列表每 3 秒自动刷新。
- 3
核对结果
完成后行上会有大小、数据量(N 表 · N 行)、耗时与完成时间;鼠标停在文件名上可以看到这份备份的 SHA-256。
- 4
下载留底
点「下载」把备份文件拉到本地。重要节点(上线前、大改前)的备份建议下载一份放到服务器之外。
恢复:整库回到某个时刻
- 1
点「恢复」并手抄文件名
确认框要求你原样输入完整的备份文件名才会解锁「确认恢复」按钮——这道门是故意设的,防的就是点错行。
- 2
系统先自救
破坏性操作开始之前,系统会自动生成一份安全备份,它在列表里的来源显示为「恢复前安全备份」。
- 3
全站进入维护
破坏阶段所有请求直接返回 503,直到恢复结束——这是为了防止有人在半恢复的库上读写。
- 4
看结局
成功后该行显示「恢复成功 · 整库已回滚到该备份创建时刻」。失败时系统会在同一个维护窗内用刚才那份安全备份自动回滚,失败原因会完整展开显示在状态列里,不截断。
- 保留份数是 5:每次备份成功后自动裁掉最旧的记录,但只清「手动」和「定时」两种来源——「恢复前安全备份」和「升级前安全备份」永远留着当灾难兜底。
- 操作日志、登录日志、任务日志这类高频表只备份结构不备份数据,所以恢复之后它们是空的。真要留档的日志,先去系统日志导出。
- 备份文件放在运行时目录里,不在能被浏览器直接访问的位置——只能通过后台的「下载」按钮取,走鉴权。
# 立即做一次备份
$ php webman backup:run
# 从某条备份记录恢复(高危,会自动先做安全备份)
$ php webman backup:restore-run <记录ID>
# 查询 / 接管 / 解除恢复留下的维护状态
$ php webman maintenance:recover status
定时任务:后台自己在跑的那些事
系统每 10 秒检查一次有没有到期的任务。列表每行告诉你:任务名与来源(内置 / 手动创建)、cron 规则、下次运行(停用时显示 —)、上次运行、启停状态、最近一次的结果。
| 部分内置任务 | 频率 | 在干什么 |
|---|---|---|
| 自动数据库备份 | 每天 3:30 | 全量备份,默认开启 |
| 支付掉单补偿与关单 | 每分钟 | 补回已付却没到账的单,关掉超时未付的单 |
| 计费搁浅单重激活 | 每 5 分钟 | 收款成功但权益没发下去的订单自动补发 |
| 租户订阅到期处理与提醒 | 每天 9:00 | 分级提醒,过了宽限期停用并同步站点状态 |
| 三方退款对账收敛 / 提现打款对账收敛 | 每 5 分钟 | 向渠道查单,把在途结果收敛成终态 |
| 小程序代发布查审收敛 | 每 5 分钟 | 审核回调丢失时主动去查审核状态 |
| 自定义域名控制权复验 | 每小时 | 复验域名解析,连续失败自动停用该域名 |
| 站点回收站超期清理 | 每天 4:10 | 物理清除软删超过 30 天的站点 |
| 清理定时任务日志 | 每天 3:30 | 保留最近 30 天的执行记录 |
自己加任务时,表单要填:任务名称、cron 表达式(5 段:分 时 日 月 周,旁边有「每分钟 / 每小时 / 每天 0 点 / 每周一 3 点」四个快捷按钮)、类型、站点 ID(0 表示全部站点)、执行目标、参数与备注。类型有两种——「任务处理器」执行系统里已有的任务代码(填完整类名,输入框会提示本页已在用的候选);「后台命令」执行一条命令,比如 audit:prune(不支持管道与重定向)。参数是一个 JSON 对象,例如 {"keep_days":30},留空表示不传。
- 「查看日志」看最近 30 条执行记录:时间、触发方式(手动 / 定时)、结果、耗时、摘要。也可以「清空日志」,清了不可恢复。
- 内置任务只能停用不能删除;手动创建的任务删除时会连它的执行日志一起删掉。
进程管理:后台还活着吗
页面顶部三张卡——存活进程数、队列消费者(数量 + 运行中/未运行)、总内存占用,每 5 秒自动刷新。下面的表按类型(队列消费 / 定时调度 / HTTP)列出每个进程的进程名、PID、内存与最后一次心跳距今多久。
- 队列消费者显示「未运行」时要立刻处理:备份、导出这类后台长任务靠它执行,它不在,任务就会一直排队不动。
- 表格空着并提示「暂时收不到任何进程的心跳」时,要么后台服务根本没在运行,要么缓存服务不可用——先查这两样。
右上角「平滑重启」让全部后台进程依次重启,正在处理的请求不会被打断,用户端基本无感。仅 Linux 支持;Windows 开发环境请手动关掉服务再重开。发出信号后页面会明确区分两种结果:成功是「已发送重启信号,进程会依次平滑重启,期间服务不中断」,失败会明说「重启信号发送失败,进程未做任何变动」——不会把失败画成一条看起来像成功的提示。
框架升级:一次不能中途反悔的操作
页面上半部分是三张卡:当前框架版本(含上次升级时间与从哪个版本来)、运行环境(PHP 版本、代码版本、操作系统)、检查更新。其中「操作系统」一栏如实写明本机的重启能力——Linux(平滑重启)、Windows(受管自动重启) 或 Windows(手动重启),它决定升级完成后新版本是自动生效还是要你去手动重启。
- 1
先检查更新
右上角「检查更新」只回答「有没有新版本」,不会自动下载。没有配置官方来源时,它会提示你手动上传升级包。
- 2
上传升级包
「上传升级包」选择
.tzcore文件。确认框会再说一遍:升级前会自动创建整库备份,过程不可中断,失败将自动回滚,耗时以分钟计。 - 3
上传阶段
按钮显示「上传中 N%」并有进度条。这个阶段中断不会改动任何东西——包还没传完,后端连升级任务都没建,检查网络后重新传即可。
- 4
升级阶段
按钮变成「升级中…」。系统会依次做:验签解包 → 预检(版本、PHP、磁盘等)→ 整库安全备份 → 进维护态 → 换文件 → 跑数据库改动 → 落新版本 → 退维护态。期间服务可能短暂不可用,属正常现象,请勿关闭本页。
- 5
看结果
成功会弹「框架升级成功,已从 x 升级到 y」,并按本机的重启能力告诉你新版本是已经生效、正在受管重启,还是需要你手动重启服务。
- 受保护的东西绝不被覆盖:
.env、runtime、public/uploads、已装的应用与插件目录。config走合并——你自己往里加的配置文件会保留下来。 - 反过来说,
app、support、database、vendor这些核心目录会被整体换新。不要直接改核心目录里的文件,否则每次升级都要重演一遍冲突。 - 升级前自动创建的那份整库备份,来源标为「升级前安全备份」,它不参与备份的滚动清理,一直留着当灾难兜底。
- 版本落库之前任何一步失败,文件确定性回到旧版、数据库不动;版本落库之后只前进不回滚。数据库改动只新增不删改,所以升级失败时库始终是可用的。确实要把数据也退回去,就到「备份恢复」用那份升级前安全备份手动恢复。
- 升级期间禁止一切应用装卸;已经有一个未完成的升级任务时,系统会拒绝开新升级,要求先做崩溃恢复。
「升级历史」表列出任务号、版本变化、状态(进行中 / 成功 / 失败 / 已回滚)、断点与时间。旁边的「崩溃恢复」按钮用来处理被中断的任务:已经越过成功界碑的补记成功,否则把文件回滚到旧版;为了避免误伤正在进行的升级,它只处理超过 10 分钟没有更新的任务。
系统日志:谁在什么时候动了什么
后台的写操作与登录记录全部留痕,且只保存在本机、只有你能查。页面右上角切换两个页签:
| 页签 | 记录了什么 |
|---|---|
| 操作日志 | 时间、操作者、来源(平台 / 租户 / 站点)、调用的接口、入参摘要、结果(成功或错误码)、耗时、IP |
| 登录日志 | 时间、用户名、来源(平台 / 租户)、成功或失败、失败原因、IP |
- 筛选条支持关键词(操作日志搜路径或操作者,登录日志搜用户名)、来源、结果(仅登录日志),以及开始 / 结束日期,旁边有「今天 / 近 7 天 / 近 30 天 / 本月」四个快捷档。每页条数可调。
- 入参摘要那一列是排查的关键:一屏长得一模一样的调用,靠它才能看出是哪一笔单。
- 筛好之后可以点导出,产物到导出记录里下载。
导出记录:所有导出的落点
后台各个列表页点「导出」发起的任务,都汇总在这一页。生成中的行带行数进度条并每 3 秒刷新;完成后点「下载」取文件;失败的行会附上原因并多一个「重试」按钮,不用回原来那个页面重发一次。
- 每个文件的有效期是 7 天,页面上有「有效期至」一列。到期后系统自动删除文件与记录,过期的行会变灰并标「已过期」,下载按钮随之失效。
- 可以按任务标题搜索,也可以按来源(租户、站点、名额流水、操作日志、登录日志等)与状态筛选。
- 下载走的是鉴权接口,产物不放在可以被 URL 直读的目录里。
素材库:平台自己的文件
这里放的是平台自己要用的图片、视频、音频与文档(比如你的 Logo、公告配图),各站点的素材在各自的站点后台,互不干扰。顶部按类型切换,配合分类下拉和文件名搜索定位;右上角显示当前共多少个文件、占了多少空间。
- 「上传」支持一次选多个文件,会逐个显示文件名、第几个/共几个和百分比,中途可以「取消上传」。
- 单个素材可以移动到分组、重命名或删除;分类可以新建,也可以删除当前选中的分类。
- 右上角还有一个「存储设置」按钮,直接跳到平台设置的存储页签——想换云存储时不用自己找路。
代码生成器:设计一个实体,生出一套后台
如果你要给客户做一个框架里没有的小功能(报修单、预约登记、设备台账),不必从零写代码:在这里设计好字段,系统直接生成迁移、模型、控制器、权限点和一套能用的管理页,打包安装后到站点后台绑定就能看到。
- 1
新建应用骨架
右上角「新建应用」,填应用 key(小写字母开头,2-41 位小写字母/数字/下划线,例如
repair)、应用名,以及可选的管理端菜单标题。左栏会出现这个应用,标记为「未安装」。 - 2
设计实体
填实体名(英文,作表名后缀——表名会是
{应用key}_{实体名})与实体标题(中文,作菜单名),然后逐行加字段:字段名(英文)、标签(中文)、类型、是否必填、是否可检索。字段可以上下移动、删除。 - 3
生成 CRUD
点「生成 CRUD」。生成报告会列出写了哪些文件、表名以及配套的两个权限点(查看 / 管理)。同一个实体想改字段,勾上「覆盖重新生成」再点一次即可刷新产物。
- 4
打包并安装
「打包并安装」会签名打包并装进本框架,效果等同从应用商店安装;如果之前装过,则按升级流程覆盖代码,业务数据保留。装完的提示里会告诉你是否还需要重启服务——没能自动加载新路由时会明说「请重启服务以加载其后端路由」。
- 5
到站点后台绑定
站点绑定该应用之后,生成的管理页就出现在那个站点的后台里。
| 字段类型 | 落库与控件 |
|---|---|
| 单行文本 / 多行文本 / 富文本 | 文本框 / 多行输入 / 富文本编辑器 |
| 整数 / 小数(金额) | 数字输入,金额按两位小数存 |
| 开关 | 开关控件 |
| 日期时间 / 日期 | 日期时间选择 / 日期选择 |
| 图片 | 上传控件 |
| 下拉选择 | 选项每行一个,写成「值=标签」;值全是数字时按整数落库 |
- 主键、站点归属、时间与软删列由框架自动补上,你不用管;生成的表自带按站点隔离数据的能力与两个权限点。
- 设计器右上角可以「导出 JSON」把这份设计存档,或「导入 JSON」把存档载回来接着改。
- 「打包」之后还可以「下载」,拿到签名后的应用包分发给别的部署。
演示环境:开放给别人随便点
如果这套部署是拿来给潜在客户体验的,可以打开演示模式。它的策略是「业务写照常放行 + 危险动作拉黑 + 每日重置」:建商品、装修页面、做表单这些真实体验必须的操作全部放行,只拦三类——会破坏演示环境的(改密码、删数据)、会触达外部系统的(群发、提审、打款)、会动文件系统与整库的(装卸应用、框架升级、备份恢复)。
- 系统这一组里被拦的具体有:备份的新建 / 恢复 / 下载 / 删除,框架升级与崩溃恢复,定时任务的增删改与立即执行、清空日志,进程平滑重启,授权激活,代码生成器的新建 / 生成 / 打包 / 安装。另外「团队」一组里的管理员与菜单增删改、以及改自己的密码,同样被拦。
- 被拦的按钮在点击之前就已经置灰并挂上「演示环境不可用」——不会让人填完一整套商户凭证、等一个 200MB 的包传完才碰壁。
- 演示数据以你预先做好的一份数据库备份为基线,内置定时任务「演示环境每日重置」每天凌晨把库恢复成它;登录页会自动预填演示账号。
- 非演示部署完全不受影响:这套名单根本不会下发,所有按钮外观与行为零变化。
首次部署的环境准备、目录权限与 .env 配置见安装与部署。