fn_b/docs/maintenance/QUIET_MODE.md

4.9 KiB
Raw Permalink Blame History

暂避风头模式

2026-11-03按用户要求新增统一开关:免费节点暂停更新,机场广告暂时下掉。已Git推送并部署正式cfn,按用户明确要求在生产开启;本地仍关闭。当前发布回执、验收和恢复点见六项发布记录。以下本地测试记录保留当时范围。

操作

在本站项目目录运行:

php artisan site:quiet on
php artisan site:quiet off
php artisan site:quiet status
  • on:阻止免费节点新发布和覆盖更新;隐藏机场随机横幅、推荐表格、已知旧福云推广段与自动推荐跳转。
  • off:恢复正常接收与原广告配置,各服务商单独开关/链接/价格/优惠码保持原值。
  • status:只读查询。没有给公众网页增加操作入口或状态横幅。

初始无运行状态文件时按 SITE_QUIET_MODE 配置,默认false。运行命令后以 storage/app/private/site-mode.json 内的布尔值为优先,包括false;不必重启PHP或重建配置缓存。CLI与网页使用同一实例目录,不共享其他实例状态。环境变量只作为不存在文件时的缺省值,不覆盖已有运行选择。

状态文件原子替换、0600,私有目录不存在时0700创建,已确认Git忽略。发布后须以PHP运行账号执行开关命令,先核实该账号(已有cfn操作常用nginx),不要用root生成网页进程无法读取的0600文件。状态文件损坏/不可读取时保持暂停与隐藏,不能静默恢复;修复同一文件及所有者后运行off或on并分别核对CLI和页面。

开启/关闭会清理响应缓存;既有HTML响应缓存合同本已关闭。切换后新请求生效,已打开的旧页面需刷新。开关保存在项目运行目录,发布不能打包覆盖/删除它。

范围与实现

  • app/Services/SiteMode.php 读取开关,暂停返回HTTP503,JSON isDone=false / status=paused / code=FREE_NODE_UPDATES_PAUSED,带 Retry-After: 3600。不上报发布成功,不消耗正常发布回执;恢复后由正常上游重试/后续发布执行,不自动重放或补造历史文章。
  • 两个免费节点接收方法在解析/Flow/配图调用之前阻断;通用接收在目标分类或原文章为freenode时阻断,不能通过换分类绕过。没有改上游任务/服务或服务器调度。
  • 文章Eloquent保存事件补充检查:涉及节点正文、标题、图片、分类、发布时间、资源状态等发布字段时拒绝写入;同样保留旧数据。点赞、浏览等指标允许正常保存。直接绕过模型的SQL/人工运维不属于应用发布开关的保护范围。
  • 仅暂停freenode,原文章和订阅仍可访问;小火箭ID、教程、资讯、资源列表和站点导航不停止。
  • 随机广告组件及保留的三个旧广告组件均检查开关,关闭时不输出广告模板、图片或noscript广告。
  • 推荐模块providers为空,隐藏共用推荐并清理匹配的已知旧推广及自动跳转。只处理明确的旧推广结构,不猜测删除普通正文,账号/订阅复制值与正文数据库不变。
  • 该模式不删除数据、不撤下已发布资源、不切换现有SEO规则、域名、证书、图片池、上游服务器或其他项目。

验收

  • 专项 QuietModeTest:5项/51断言通过,覆盖命令双向切换、状态持久化/权限、异常状态、专用及通用入口阻断、换分类绕过、模型新建/更新保护、真实点赞字段保存、其他类型放行、广告/旧推广隐藏、复制值及原文保护、恢复。
  • 正常回归:QuietMode、ArticleRecommendations、SEO合同及苹果ID解析共32项/331断言通过;之后仅补充旧组件与真实点赞保存断言,再跑专项5项/51断言通过。测试基类隔离运行站点的开关,避免测试误继承本地暂时启用的状态;初轮未隔离的失败已修正。
  • 本地IAB开启实测:首页3个复制按钮保留,随机广告0、推荐表格0、旧推广0;教程正文可读,广告0、推荐0、自动推荐跳转0。截图 output/quiet-mode-20261103/quiet-on.png。
  • 关闭后同一首页恢复随机广告1、推荐模块1,3个订阅按钮保留。CLI回读明确关闭。未进行实际账号登录、上游真实发稿或线上访问。
  • PHP语法与本次diff检查通过,未进行生产构建。

发布与回退

本批已按用户明确授权完成Git发布,生产开启;后续变更仍按任务授权执行。相关文件包括SiteMode服务、QuietMode命令、配置、接收器入口、模型保存事件、推荐展示服务、四个广告组件、环境模板与测试/维护入口;不能漏发模型或展示服务。默认缺省关闭,不应随代码发布自动切换生产模式。

回退前关闭模式并核对正常状态,再增量撤销本批调用;不得整文件还原覆盖并行SEO、文章渲染或其他修改。运行状态文件须单独保留/按明确运维操作处理,不以Git回退等同模式切换。