平台后台

系统维护

平台后台侧栏最下面那扇「系统」门:品牌与备案怎么配、备份怎么做、怎么升级框架、出事了去哪查——部署方日常打交道的十一个页面,一次讲透。

「系统」是一扇门,不是一堆菜单

客户、产品、团队这三组是你每天都要点的,系统这一组不是——品牌配一次就不动了,备份和升级几个月才碰一回。所以侧栏里「系统」被折成了一行:点它不会展开一串子项,而是进到一个目录页 /platform/system,十一个页面按四个区排在这里,每项一行「名字 + 一句话」,扫一眼就知道该进哪个。

分区页面什么时候用
基础配置平台设置换品牌名与 Logo、填备案号、配附件存储
基础配置数据字典维护下拉选项这类公共枚举
基础配置授权信息看本次部署的授权状态、粘贴凭证激活
运行维护备份恢复建备份、下载留底、把库回滚到某个时刻
运行维护定时任务看后台自动跑的任务,启停或手动触发一次
运行维护进程管理看常驻进程存活情况,平滑重启
运行维护框架升级检查新版本、上传升级包、查升级历史
运行记录系统日志查谁在什么时候动了什么、谁登录过
运行记录导出记录下载各列表页发起的导出文件
资源与工具素材库平台自己的图片、视频、音频与文档
资源与工具代码生成器设计一个实体,直接生成一套增删改查
  • 目录页显示的内容按权限裁剪:你打不开的项根本不会出现在这里,和侧栏完全一致;一项都没有时页面会明说「这里暂时没有你可以打开的项」,而不是给你一个空白页。
  • 各页面的网址没有变——原来收藏的 /platform/backup/platform/logs 之类的深链照常能打开。

平台设置:把这套系统变成你的

这是新部署后第一个该进的页面。它有四个页签:平台品牌、备案版权、下级策略、存储。前三个改的是同一份配置——在任意一个页签点「保存设置」,三个页签的改动会一起生效;「存储」是独立的一份,单独保存。

平台品牌

  • 平台名称Logo(亮色主题)Logo(暗色主题,可选)浏览器图标(favicon,可选)登录页描述(可选)
  • 留空就沿用内置标识。名称与 Logo 会同时用在平台登录页、租户登录页和工作台头部——改一处,全都跟着变。

备案版权

  • 主体名称版权文案ICP 备案号公安备案号,除 ICP 外都可留空。
  • 版权文案可以自定义,例如 © 2026 某某科技有限公司

下级策略

这里决定你的客户能把后台改成什么样。名称模板Logo 模板(亮/暗)是租户工作台头部展示的品牌,留空则回落到你的平台品牌。下面两个开关是关键:

开关关闭时开启时
允许租户自定义后台品牌全部租户后台统一使用上面的模板,由你统一代管租户所有者可以在租户设置里覆盖成自己的品牌
允许站点自定义品牌与合规信息站点后台「站点信息」里的 Logo、前台展示名与备案字段被锁定,只有你能代改(站点名称仍可由对方修改)站点自己配自己的品牌与备案

存储

这一页管的是平台自有素材放在哪里。默认驱动是「本地」,开箱即用,文件落在 public/uploads,随当前域名直接访问。要换成云存储时,先安装对应的存储插件——装好之后它就会自动出现在「默认驱动」的选项里,选中后再填该驱动要求的密钥字段即可。

  • 前端直传开关:开启后浏览器直接把文件传到云存储,不经服务器中转。用它需要在云控制台为 Bucket 配置 CORS(允许 POST)。
  • 直传是安全降级的:本地驱动或凭证没配全时会自动回落成服务器中转,上传体验不会因此变成报错。
  • 租户与站点各自的存储策略不在这里,在租户管理中单独配置。

数据字典:公共下拉选项

字典是平台统一维护、各处只读消费的一份枚举表。页面左右两栏:左边是字典类型,右边是选中那个类型下的数据项——先建类型,才能往里加数据项

  1. 1

    新建字典类型

    右上角「新建字典类型」,填字典名称、类型标识(小写 snake_case,例如 order_status)与备注。类型标识是各处引用它的名字,建好后别随意改。

  2. 2

    加数据项

    在左栏点中该类型,右上角出现「新增数据」。每条填显示文本、字典值、排序(数字小的排前面)与备注。

  3. 3

    停用而不是删除

    类型和数据项都可以「停用」——已经用过的值建议停用保留,直接删会让历史数据失去对应的显示文本。

授权信息:这套部署的凭证

页面左边是「当前授权」,右边是「激活授权」。向官方申请授权时,需要提供左边显示的本部署 install_id——授权凭证是与它一一绑定的。拿到官方签发的凭证(一段 JSON)后,粘进右边的框点「激活」,验签通过即刻生效。

状态含义
未激活还没激活。此时各应用的部署池不设上限,属本地体验模式
已授权正常
维保已到期(仍可用)维保期过了,系统照常运行
在线校验失败(宽限期内)配了在线校验端点但连不上。页面会显示宽限截止时间,超期未恢复将吊销
授权已吊销凭证校验失败或宽限超期,需要重新激活;凭证被改动过则要向官方申请重签
  • 校验模式一栏如实写明当前是哪一种:「在线校验(每日心跳,失败进入离线宽限)」,或者「本地防篡改(未配置在线校验端点)」——后者不参与宽限与吊销。
  • 已激活时还会显示版本、签发时间、维保期至(没有到期时间就显示「永久」)与上次校验时间。
  • 下方「各应用部署池上限」列出每个应用能绑多少个站点,不限 表示没有上限。名额怎么在平台、租户、站点之间流转,见授权与名额

备份恢复:先会备份,再谈恢复

系统自带一个内置定时任务「自动数据库备份」,每天凌晨 3:30 做一次全量备份,默认是开着的。第一次接手一套部署时,先去定时任务确认它确实是「启用」状态,再回来做下面这些事。

  1. 1

    手动建一份

    右上角「新建备份」,选模式:全量导出全部表结构与数据,是唯一能用于恢复的模式;仅结构只导出表结构不含数据,适合做建站模板或排查表结构问题。点「开始备份」后任务在后台跑,不用守着页面。

  2. 2

    盯进度

    运行中的行会显示进度条、「已完成表数 / 总表数」和当前正在导的表名。有任务在推进时列表每 3 秒自动刷新。

  3. 3

    核对结果

    完成后行上会有大小、数据量(N 表 · N 行)、耗时与完成时间;鼠标停在文件名上可以看到这份备份的 SHA-256。

  4. 4

    下载留底

    点「下载」把备份文件拉到本地。重要节点(上线前、大改前)的备份建议下载一份放到服务器之外。

恢复:整库回到某个时刻

  1. 1

    点「恢复」并手抄文件名

    确认框要求你原样输入完整的备份文件名才会解锁「确认恢复」按钮——这道门是故意设的,防的就是点错行。

  2. 2

    系统先自救

    破坏性操作开始之前,系统会自动生成一份安全备份,它在列表里的来源显示为「恢复前安全备份」。

  3. 3

    全站进入维护

    破坏阶段所有请求直接返回 503,直到恢复结束——这是为了防止有人在半恢复的库上读写。

  4. 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. 1

    先检查更新

    右上角「检查更新」只回答「有没有新版本」,不会自动下载。没有配置官方来源时,它会提示你手动上传升级包。

  2. 2

    上传升级包

    「上传升级包」选择 .tzcore 文件。确认框会再说一遍:升级前会自动创建整库备份,过程不可中断,失败将自动回滚,耗时以分钟计。

  3. 3

    上传阶段

    按钮显示「上传中 N%」并有进度条。这个阶段中断不会改动任何东西——包还没传完,后端连升级任务都没建,检查网络后重新传即可。

  4. 4

    升级阶段

    按钮变成「升级中…」。系统会依次做:验签解包 → 预检(版本、PHP、磁盘等)→ 整库安全备份 → 进维护态 → 换文件 → 跑数据库改动 → 落新版本 → 退维护态。期间服务可能短暂不可用,属正常现象,请勿关闭本页

  5. 5

    看结果

    成功会弹「框架升级成功,已从 x 升级到 y」,并按本机的重启能力告诉你新版本是已经生效、正在受管重启,还是需要你手动重启服务。

  • 受保护的东西绝不被覆盖.envruntimepublic/uploads、已装的应用与插件目录。config 走合并——你自己往里加的配置文件会保留下来。
  • 反过来说,appsupportdatabasevendor 这些核心目录会被整体换新。不要直接改核心目录里的文件,否则每次升级都要重演一遍冲突。
  • 升级前自动创建的那份整库备份,来源标为「升级前安全备份」,它不参与备份的滚动清理,一直留着当灾难兜底。
  • 版本落库之前任何一步失败,文件确定性回到旧版、数据库不动;版本落库之后只前进不回滚。数据库改动只新增不删改,所以升级失败时库始终是可用的。确实要把数据也退回去,就到「备份恢复」用那份升级前安全备份手动恢复。
  • 升级期间禁止一切应用装卸;已经有一个未完成的升级任务时,系统会拒绝开新升级,要求先做崩溃恢复。

「升级历史」表列出任务号、版本变化、状态(进行中 / 成功 / 失败 / 已回滚)、断点与时间。旁边的「崩溃恢复」按钮用来处理被中断的任务:已经越过成功界碑的补记成功,否则把文件回滚到旧版;为了避免误伤正在进行的升级,它只处理超过 10 分钟没有更新的任务

系统日志:谁在什么时候动了什么

后台的写操作与登录记录全部留痕,且只保存在本机、只有你能查。页面右上角切换两个页签:

页签记录了什么
操作日志时间、操作者、来源(平台 / 租户 / 站点)、调用的接口、入参摘要、结果(成功或错误码)、耗时、IP
登录日志时间、用户名、来源(平台 / 租户)、成功或失败、失败原因、IP
  • 筛选条支持关键词(操作日志搜路径或操作者,登录日志搜用户名)、来源、结果(仅登录日志),以及开始 / 结束日期,旁边有「今天 / 近 7 天 / 近 30 天 / 本月」四个快捷档。每页条数可调。
  • 入参摘要那一列是排查的关键:一屏长得一模一样的调用,靠它才能看出是哪一笔单。
  • 筛好之后可以点导出,产物到导出记录里下载。

导出记录:所有导出的落点

后台各个列表页点「导出」发起的任务,都汇总在这一页。生成中的行带行数进度条并每 3 秒刷新;完成后点「下载」取文件;失败的行会附上原因并多一个「重试」按钮,不用回原来那个页面重发一次。

  • 每个文件的有效期是 7 天,页面上有「有效期至」一列。到期后系统自动删除文件与记录,过期的行会变灰并标「已过期」,下载按钮随之失效。
  • 可以按任务标题搜索,也可以按来源(租户、站点、名额流水、操作日志、登录日志等)与状态筛选。
  • 下载走的是鉴权接口,产物不放在可以被 URL 直读的目录里。

素材库:平台自己的文件

这里放的是平台自己要用的图片、视频、音频与文档(比如你的 Logo、公告配图),各站点的素材在各自的站点后台,互不干扰。顶部按类型切换,配合分类下拉和文件名搜索定位;右上角显示当前共多少个文件、占了多少空间。

  • 「上传」支持一次选多个文件,会逐个显示文件名、第几个/共几个和百分比,中途可以「取消上传」。
  • 单个素材可以移动到分组、重命名或删除;分类可以新建,也可以删除当前选中的分类。
  • 右上角还有一个「存储设置」按钮,直接跳到平台设置的存储页签——想换云存储时不用自己找路。

代码生成器:设计一个实体,生出一套后台

如果你要给客户做一个框架里没有的小功能(报修单、预约登记、设备台账),不必从零写代码:在这里设计好字段,系统直接生成迁移、模型、控制器、权限点和一套能用的管理页,打包安装后到站点后台绑定就能看到。

  1. 1

    新建应用骨架

    右上角「新建应用」,填应用 key(小写字母开头,2-41 位小写字母/数字/下划线,例如 repair)、应用名,以及可选的管理端菜单标题。左栏会出现这个应用,标记为「未安装」。

  2. 2

    设计实体

    填实体名(英文,作表名后缀——表名会是 {应用key}_{实体名})与实体标题(中文,作菜单名),然后逐行加字段:字段名(英文)、标签(中文)、类型、是否必填、是否可检索。字段可以上下移动、删除。

  3. 3

    生成 CRUD

    点「生成 CRUD」。生成报告会列出写了哪些文件、表名以及配套的两个权限点(查看 / 管理)。同一个实体想改字段,勾上「覆盖重新生成」再点一次即可刷新产物。

  4. 4

    打包并安装

    「打包并安装」会签名打包并装进本框架,效果等同从应用商店安装;如果之前装过,则按升级流程覆盖代码,业务数据保留。装完的提示里会告诉你是否还需要重启服务——没能自动加载新路由时会明说「请重启服务以加载其后端路由」。

  5. 5

    到站点后台绑定

    站点绑定该应用之后,生成的管理页就出现在那个站点的后台里。

字段类型落库与控件
单行文本 / 多行文本 / 富文本文本框 / 多行输入 / 富文本编辑器
整数 / 小数(金额)数字输入,金额按两位小数存
开关开关控件
日期时间 / 日期日期时间选择 / 日期选择
图片上传控件
下拉选择选项每行一个,写成「值=标签」;值全是数字时按整数落库
  • 主键、站点归属、时间与软删列由框架自动补上,你不用管;生成的表自带按站点隔离数据的能力与两个权限点。
  • 设计器右上角可以「导出 JSON」把这份设计存档,或「导入 JSON」把存档载回来接着改。
  • 「打包」之后还可以「下载」,拿到签名后的应用包分发给别的部署。

演示环境:开放给别人随便点

如果这套部署是拿来给潜在客户体验的,可以打开演示模式。它的策略是「业务写照常放行 + 危险动作拉黑 + 每日重置」:建商品、装修页面、做表单这些真实体验必须的操作全部放行,只拦三类——会破坏演示环境的(改密码、删数据)、会触达外部系统的(群发、提审、打款)、会动文件系统与整库的(装卸应用、框架升级、备份恢复)。

  • 系统这一组里被拦的具体有:备份的新建 / 恢复 / 下载 / 删除,框架升级与崩溃恢复,定时任务的增删改与立即执行、清空日志,进程平滑重启,授权激活,代码生成器的新建 / 生成 / 打包 / 安装。另外「团队」一组里的管理员与菜单增删改、以及改自己的密码,同样被拦。
  • 被拦的按钮在点击之前就已经置灰并挂上「演示环境不可用」——不会让人填完一整套商户凭证、等一个 200MB 的包传完才碰壁。
  • 演示数据以你预先做好的一份数据库备份为基线,内置定时任务「演示环境每日重置」每天凌晨把库恢复成它;登录页会自动预填演示账号。
  • 非演示部署完全不受影响:这套名单根本不会下发,所有按钮外观与行为零变化。

首次部署的环境准备、目录权限与 .env 配置见安装与部署