Fago 文档 Fago 文档
首页
快速开始
后端手册
前端手册
规划备查
文档维护
首页
快速开始
后端手册
前端手册
规划备查
文档维护
  • 快速开始

    • 简介
    • 功能列表
    • 快速启动(后端)
    • 快速启动(前端)
    • 技术选型
    • 项目结构
    • 接口与错误码
  • 后端手册

    • 配置与环境
    • 登录与会话
    • 功能权限与菜单
    • 数据权限
    • 用户、部门、岗位与角色
    • 租户与安全策略
    • 异常处理与错误码
    • 参数、分页与响应
    • 数据库迁移
    • 日志、脱敏与请求加密
    • 平台租户与套餐
    • fago-cli 常用命令
    • 发布验证与恢复演练
    • 字典与参数配置
    • 文件与对象存储
    • 站内通知与执行恢复
    • 定时任务与运行恢复
    • 可靠消息后端与积压观测
    • 身份客户端与设备会话
    • 会员认证与账号管理
    • 服务账号与 scope
    • OIDC 提供方与外部绑定
    • 原生 SSO 验收客户端
    • 账号认证模式
    • 工作流 API 与运行目录
  • 前端手册

    • 本地启动
    • 菜单与路由
    • 请求合同
    • 页面与按钮权限
    • 浏览器单点登录
    • 审批中心与表单发起
    • 工作流定义与运行管理
  • 规划备查

    • Fago:架构与实施方案
    • 总体架构
    • 身份、权限与租户设计
    • Vben 5 前端与 API 合同
    • 数据库与消息后端适配
    • 纯 Go 通用工作流:文件、文档与业务流程
    • 核心数据模型
    • 分期、工作包与验收
    • 架构决策与风险
    • 参考来源与基线
    • 网络安全等级保护二级合规要求
    • M0 实施与验收
    • M1 身份与导航实施及验收
    • 项目配置、API 内容加密与敏感数据脱敏
    • M2 系统管理实施记录
    • M3 平台与 SaaS 实施记录
    • fago-cli 功能规划
    • 生产传输层 WARN 变更范围(2026-10-23)
    • M4 发布实施与验收
    • M4 加固检查归档(本地工程环境)
    • M5 通用平台与身份实施
    • M6 R3.1 正式工作流核心与基础审批
目录

发布验证与恢复演练

# 发布验证与恢复演练

当前 M4 验证入口面向 MySQL 8.4 和 PostgreSQL 16,要求专用测试数据库、Redis 及已初始化子模块。它不会把测试夹具写进生产初始化。生产部署仍须完成自己的 HTTPS、网络边界、最小权限账号、异地备份及 RPO/RTO 审核;本地通过不表示生产环境或等保测评通过。

# 执行发布验证

先在私有环境中设置 APP_ENV=test、FAGO_INTEGRATION=1、APP_DATABASE_DRIVER、APP_DATABASE_DSN 和 APP_REDIS_ADDR。DSN 不写入命令历史、报告或仓库。然后在外层仓库执行:

# 顺序执行 HTTP/TLS E2E、迁移、容量及真实发布进程检查。
bash scripts/release-acceptance.sh
# 单独复验某个门槛。
bash scripts/release-acceptance.sh e2e
bash scripts/release-acceptance.sh capacity
bash scripts/release-acceptance.sh runtime

默认证据目录是 .cache/release-acceptance/<driver>/,可用 FAGO_RELEASE_EVIDENCE 指定其他目录。E2E 和迁移启用 race;容量不启用 race,按并发 1/8/32 各重复三轮,每轮 300 次请求。两个随机租户各有 1000 个禁用的同名测试用户和一位管理员,校验返回 ID 归属、总数和分页。每轮错误数须为 0,p95 须不超过 500ms。这是本机、TLS loopback 和明文 JSON 列表场景的基线,不是生产并发用户承诺,也不覆盖 JWE 容量或长时间稳定性。

容量测量期间不要同时执行构建、其他基准或全量测试。失败时查看证据目录中的对应日志,不把最快一轮代替完整报告。验证完成后随机业务夹具会清理;调用者提供的测试数据库保留。

发布前还要对两种构建目标分别执行 APP_DATABASE_DRIVER=mysql bash scripts/release-security.sh 与 PostgreSQL 对应命令。扫描器固定为 Go 官方 govulncheck v1.9.0,安装在仓库 .cache/tools,从 API/worker/CLI 源代码检查可达漏洞。非零退出阻断发布,不能把「仅模块依赖存在、没有导入或调用」与已确认调用混为一谈。

runtime 只输出当前 OS/架构及所选数据库的 API、worker、CLI,验证就绪、本机指标、SIGTERM 和配置错误脱敏。OpenAPI/前端类型、前端回归、生产包检查与文档构建仍使用既有入口,见 M4 记录。

# 运行指标与告警

API 新增 http.metrics_address,环境变量 APP_METRICS_ADDR 优先,缺省 127.0.0.1:9091。只接受数值 loopback 地址及 1–65535 端口,拒绝通配地址、域名和非 loopback 地址。多个本机 API 实例应使用不同端口。端口被占用时启动失败,不能忽略指标失效继续上线。

curl --fail http://127.0.0.1:9091/metrics

指标使用独立监听器,不注册在业务路由。采集器须与 API 同机或作为同网络命名空间的 sidecar,再经受控网络输出到监控服务。不要把该端口加到公网代理中。健康 API 仍为 /api/health/live 和 /api/health/ready。

指标 用途
fago_http_requests_total 按标准方法、路由模板和状态类别观察流量与错误率
fago_http_duration_seconds 固定桶直方图,统计 p95 等分位数
fago_login_failures_total 登录 HTTP 失败,含来源/限流/依赖错误
fago_permission_denials_total 业务码 403001 的权限拒绝
fago_db_connections_* max_open/open/in_use/idle 连接池状态
fago_db_wait_total、fago_db_wait_seconds_total 等待连接的累计次数与耗时
fago_process_uptime_seconds 进程运行时长

标签不含用户/租户 ID、请求号、token、Cookie、完整 URL 或 query。未知路径归为 unmatched,非标准方法归为 OTHER。告警建议先观察本环境基线:ready 连续失败、5xx 错误比例持续升高、p95 持续超阈值、连接池使用率与等待同时上升、登录失败突然增加。通知渠道和阈值由部署方登记并实际试发;应用提供指标不等于告警平台已接通。

日志通过 stdout 输出结构化 JSON,由宿主机/容器采集器发送到受控日志平台。以服务端 requestId 关联问题,不采集请求体、Authorization、Cookie 或数据库连接串。日志留存与访问权限由部署方配置,业务审计保留策略仍按 日志与安全 执行。

后台任务新增全库只读快照指标,由 API 每 10 秒限时采样;抓取只读内存,失败保留旧快照并输出成功/时间标志。固定队列、租约/年龄含义、跨副本取 max 与示例告警见 可靠消息后端与积压观测。

# 升级、恢复与回滚

发布前保留旧二进制、配置和密钥版本,以及与旧 schema 对应的全库备份。先停写/进入维护状态,再做一致性快照,记录时间点、备份摘要与保存位置。显式运行新版本 fago-cli migrate,检查 ready 后再切换 API/前端。若迁移进入 dirty 或 ready 拒绝,保持停写并排查,禁止直接清除 dirty。

回滚以恢复升级前全库快照并切回匹配的旧二进制、配置和密钥为边界。不能只换旧 API 而保留新 schema;不能把清除 dirty 或手工删除新表当作恢复。恢复到独立新库并先核对数据、授权和会话,再切换连接。切换后原库保留到验收完成,清理需由部署方另行批准。

下面的脚本仅用于本地 Docker 演练:三个数据库名均由脚本随机生成,不接受业务库作为恢复目标。它使用容器既有管理环境,主机 DSN 只传给 CLI 子进程;SQL 备份在私有临时目录内保存,成功或失败退出时删除,报告只保留表行数和摘要。

FAGO_BUILD_OUTPUT="$PWD/.cache/m4-mysql-release" bash scripts/build-go.sh mysql
python3 scripts/release-recovery.py mysql \
  --container fago-m0-mysql-1 \
  --release .cache/m4-mysql-release \
  --output .cache/m4-mysql-recovery.json

PostgreSQL 使用 postgres 构建与对应容器名。当前脚本精确使用 v1–v16 原迁移字节构造上一版本数据,验证升级至 v19、幂等重跑、当前全库恢复、旧版快照回滚及恢复后序列新增。迁移目标变化时脚本拒绝旧基线,需显式更新演练版本。本地报告中的恢复耗时只覆盖脚本测量的操作,不包含生产停写、下载备份和切换流量,因此不能直接作为 RTO。

SQL 入口默认只恢复数据库快照;下节的可选参数可验证旧版 API 二进制,真实生产流量切换仍需在部署环境执行。外部文件、证书、JWE 密钥和对象存储不在数据库 dump 中,必须另外备份并校验。M5 演练在当前快照中加入非空字典、条目、敏感参数和自选部门关系,全部表参与指纹比较。实际执行证据与剩余边界见 M5 记录 和 M4 记录。

# R2.3 协同恢复演练

消息、任务和文件需要一起定义恢复点。先停止并等待 API、所有 worker、派发/消费、定时执行和文件清理退出,再备份业务库、Redis AOF/消费组/PEL、对象字节和部署配置。不能只恢复 SQL 后沿用已前进的 Redis 消费组:旧快照里尚未完成的事件可能已经在 broker 被确认,恢复后会漏投。对象恢复也须使用独立空间,不能让源库与恢复库的清理器同时操作同一对象命名空间。

当前提供两个仅操作随机专用环境的本地入口:

  • scripts/release-recovery.py 明确执行 v16→v19:升级前已有字典/参数/文件与部门关系,升级后九张消息/通知/任务新表均有非空离线历史。验证全表指纹、迁移幂等、v16 回滚、九表默认 ID 和关键唯一/租户外键。离线 done 夹具只证明数据可恢复,不冒充实际业务执行。
  • scripts/release-combined.py 使用真实发布 API/worker、两个租户、专用 Redis 与两个独立 S3 服务,备份并恢复 SQL、AOF/PEL 和实际对象字节。核对源进程先退出、未完成任务/PEL 通知恢复、已完成事件主动重投不重复业务、文件字节一致、清理恢复与跨租户下载拒绝。

恢复脚本只创建随机库,不接受现有业务库作为恢复目标。dump、AOF、对象清单与正文只在 0700 临时目录,结束自动删除;容器和匿名卷按本轮标签清理,报告只有计数、摘要、耗时和命名检查。S3 辅助程序只接受 loopback 和随机演练桶,显式禁止代理及 307/308 重定向,不使用默认云凭证链。它不是生产备份 CLI。

已有当前单数据库发布包后,可按当前项目的数据库选择运行(示例为 MySQL):

source scripts/go-env.sh
FAGO_RECOVERY_ROOT="$PWD"
mkdir -p "$FAGO_RECOVERY_ROOT/.cache/recovery"
(cd fago/fago-server/adapters/storage/fago-s3 && go build -o "$FAGO_RECOVERY_ROOT/.cache/recovery/s3-helper" "$FAGO_RECOVERY_ROOT/scripts/recovery-s3.go")
python3 scripts/release-recovery.py mysql --container fago-m0-mysql-1 --release .cache/release --output .cache/recovery/sql.json
python3 scripts/release-combined.py mysql --release .cache/release --s3-helper .cache/recovery/s3-helper --output .cache/recovery/combined.json

需要本地 Docker MySQL/PostgreSQL 管理权限及已锁定的 Redis/RustFS 测试镜像;原始管理凭证不写命令参数或报告。组合入口会显式创建并销毁本轮私有对象服务,不使用调用方已有桶。PostgreSQL 选择对应 driver、容器和发布包,不能混用产物。

SQL 回滚脚本可另传 --previous-release <旧发布目录> 与 --previous-redis-address <专用数值loopback地址>,核验旧发布包的 profile/大小/SHA,在 v16 回滚库启动真实旧 API,检查 ready、匿名文件认证拒绝和 SIGTERM 退出。未传旧产物时报告 oldBinaryVerified=false;不能以指纹相同代替旧程序兼容证明。当前 CLI 绝不对 v16 回滚库再次 migrate 到 v19。

上述入口是停止写入后的本地工程验证,不能自动证明生产在线切换、异地恢复、生产凭证轮换或 RPO/RTO。实际报告及认证边界见 M5 实施记录。

# Cron增量发布附件

当前构建包含固定Cron依赖的上游MIT许可证。使用统一入口构建,三个二进制和许可证先准备并校验,manifest.json最后发布;分发时携带完整文件集。旧的不含Cron发布集仍可复验,新发布若缺少或修改许可证会被拒绝。

bash scripts/build-go.sh mysql
ls .cache/release/
# fago-api  fago-worker  fago-cli  LICENSE-robfig-cron.txt  manifest.json

manifest的licenses记录固定附件名、大小和SHA256;恢复前的旧产物核验同样检查已声明附件,拒绝符号链接、路径穿越或摘要不符。构建与附件校验不等于生产部署或本次新增表的组合恢复认证,具体执行结果仍见M5增量记录。

最后更新: 2026/10/29 08:15:25
fago-cli 常用命令
字典与参数配置

← fago-cli 常用命令 字典与参数配置→

Theme by Vdoing | Copyright © 2026-2026 Fago 项目文档
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式