fn_b/docs/maintenance/RELEASE_PREFLIGHT_2026-10-28.md

131 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FNA_V3 发布前核对 · 2026-10-28
状态:2026-10-29用户确认test“没问题,切到正式”,现已完成正式切换及323项服务器侧验收,0失败。正式入口https://clashfreenode.com/;test仍独立保留并禁止索引。新增广告未发布。以下test与准备段落保留其历史时点含义。
## 正式切换(2026-10-29)
用户已在test页面确认后明确授权切正式。本次复用原生产目录、数据库、域名及Nginx块,不将test数据库、会话或密钥替代生产;其他同代码正式实例不在范围。
- cfn:/www/wwwroot/clashfreenode-new.com,检出已推送且经过test确认的76141453bbdbd14b13c69647c14226bae7250afc,这是首次正式切换的功能提交;后续点赞功能增量见本文“文章点赞增量发布”。现有生产仓库为tom/fn_b.git,发布分支codex/fna-v3-release-20261029;本地复制历史不直接推送。Resource V2:/www/wwwroot/resource-v2/app,检出0d9e71a0cdbf9b6e298dc28b28ccc38879a5808e。两者沿先前codex/fna-v3-release-20261029推送提交发布,不通过源码包覆盖。原generated-tags-cloud未提交模板逐字保留;既有cron没有Git自动更新命令,未改计划。
- 已在原库上追加指定5张editorial表,限定更新client/advanced/shadowrocketids元数据。10篇教程从用户确认的test实际公开正文冻结,经生产临时凭据完成草稿→逐篇签名预览→同hash发布→回执核对;原7篇ID/slug/创建时间保留,新增3篇。当前184篇文章、9分类;原181篇全部保留,174篇非本次编辑文章的标题/摘要/正文/原始封面字段/分类/状态/日期全部逐项不变,原账号行一致。
- 原生产APP_ENV=local、DEBUG开启,现限定修正production/DEBUG=false;原DB、APP_KEY、会话、通知和其他配置保留。资源绑定https://resource-v2.gemcook.net,搜索改用专属cfn_articles_v3并完整初始化,原articles索引不删除。正式站原统计恢复,首页index/follow、正式canonical/robots/sitemap均通过;没有将test的全站noindex、API封闭或独立会话配置复制到正式。
- Resource仅追加已验证的图池代码/表,37张审核展示图按API上传/发布/授权;从test已确认状态恢复213条池/固定选择/游标引用,22猫/15狗,84篇免费节点/90篇免费苹果ID。所有已确认固定配图按SHA逐项保留;毛线球猫继续排除。原Resource的5个资产及20个历史客户端记录全部不变。
- Resource临时图片所有者21(read/write/publish/share)已在同操作finally撤销并删除密钥文件;仅正式fna-v3消费者22保持read/write,用于日更接收时创建持久配图,不含publish/share/delete。密钥只在服务器私有客户端文件及主站storage/app/private/illustrations.json,0600,不复制测试凭据。真实旧文章重复分配返回原图且不推进cursor,消费者发布权限403。
- 生产编辑临时密钥迁移后已删除,EDITORIAL_API_ENABLED=false,未留下可调用的无授权编辑接口;后续明确写作/发布任务按EDITORIAL_API.md流程临时启用并关闭。本次没有执行真实日更接收、Telegram通知或IndexNow;只核对原3条POST接收路由保留,并对相同图池服务的既有文章键做幂等验收。
- 新增DPL/HN/FUC广告组件/配置/CSS/图片仍排除,保留生产原有广告。主站及Resource原Nginx配置逐字未变,未改正式DNS或证书;test继续独立noindex。软件资源服务与其他正式实例未动。
### 备份、验收与恢复
切换前私有恢复点为VPS-003:/root/backups/cfn-fna-v3-20261029/production/(700/600):两个Git基线bundle、原.env、两个Nginx文件、原生成模板、生产代码/构建归档、18表/181篇一致性数据库快照、state-before.json;无生产秘密导出本机。Resource原生一致性备份为/www/wwwroot/resource-v2/app/storage/app/private/backups/20261029-113946-ee837e82-40f5-4085-8641-2c06c72c3e3c,含SQLite及资产哈希清单。
生产resource-receipt.json、cutover-receipt.json、editorial-operation.json记录各步骤/草稿与发布UUID;未知结果先查原UUID,不盲目重复发布。2026-10-29 11:50:13 UTC服务器侧323项检查全部通过,含59个页面引用资源和37张公开图片hash;非秘密结果见[正式验收JSON](PRODUCTION_VERIFICATION_2026-10-29.json)。test此前292项验收另留原件。用户已确认test页面,AI未做正式线上页面验收,不能把服务器侧验收写成正式页面验收。
回退必须先识别回退范围和上线后新增数据,不自动执行:保留现有184篇及后续文章;代码可固定回0792297bb8164fd2929b939d8d1206bc77b4ee81,但先保留已发布教程CSS/图片、恢复原构建清单所需文件,避免回退Git时删除仍被文章引用的资源。Resource服务与已发布media地址继续保留;不要drop新增表、撤回被文章引用图片或整库覆盖上线后的新数据。若仅关闭图池,设置RESOURCE_V2_ILLUSTRATIONS_ENABLED=false并清配置/响应缓存,恢复原字段展示。正文恢复走本站版本回退API,原7篇基线版本0已保存;新增文章不做无授权删除。APP_ENV=production/DEBUG=false维持,不能为代码回退重新开放调试。
## 当前门槛:先test预览,确认后再切正式(2026-10-29)
本节为此前test部署记录;用户现已确认,正式切换结果以上节为准。
用户最新要求先部署test子域名,确认无误后才切正式;此前正式发布授权按这个新顺序执行,当前不得切换正式站。本次新增广告继续排除。
已完成:
- Cloudflare ACC-001界面确认clashfreenode.com区域归属,zone ID为e3145aaaca4ca16b96855abc80e3e92f;仅新增test A→45.153.247.44,DNS-only、自动TTL。原主域名/www和邮件记录未修改。配置截图为/private/tmp/fna-release-20261029/test-dns.png。
- 在VPS-003生产历史的隔离分支codex/fna-v3-release-20261029构造提交并真实推送:cfn为76141453bbdbd14b13c69647c14226bae7250afc,Resource V2为0d9e71a0cdbf9b6e298dc28b28ccc38879a5808e。仓库沿目标服务器原origin,仅推送新分支,未修改正式分支或正式checkout。
- 新目录/www/wwwroot/fna-v3-test与/www/wwwroot/fna-v3-test-resource分别检出上述SHA;现已启用各自运行.env、独立数据库/存储及test HTTPS虚拟主机。代码暂存传输用于构造Git提交,实际预览目录由Git检出,未以源码归档覆盖正式站。
- cfn提交排除新增广告组件/配置/CSS/图片,保留生产既有侧栏广告位置;带首页、教程、独立编辑API、插画消费者及构建产物。Resource提交只增加图池控制器、图片健康检查、关联表迁移及两条图池路由,不包含软件下载业务。
- staging图片来源只接受https://test.clashfreenode.com/resource-v2,production仍只接受原Resource V2生产地址;staging模板noindex/nofollow并关闭正式站统计脚本。21项测试157断言通过。
- 本地私有暂存已选出10篇教程、栏目元数据,以及当前37张公开展示图片和199个pool/selection/cursor引用;未传送线上数据到本机,未恢复已排除毛线球猫。
用户在逐项范围说明后明确回复“继续啊”,已按批准范围完成:
1. 创建独立fna_v3_test库,只复制181篇公开文章、8个启用分类、25个标签及1409个关联,不复制用户、密码、会话、队列或点赞IP/指纹。为既有ORM查询建立空users和article_likes结构,users实际0行,无管理账号或会话。指定editorial五表在test安装。
2. 独立数据库账号仅SELECT/INSERT/UPDATE/DELETE,限定fna_v3_test;没有其他库或DDL权限,现场查询验证通过。应用以staging运行,主PHP-FPM实际账号为nginx(现场核实),test.env为root:nginx 0640,私有消费者凭据0600;独立资源服务使用resourcev2账号。
3. 测试Resource使用独立SQLite、存储、37张审核通过的展示图;不导入原PNG、提示词或其他资源。通过API恢复37条pool、160条selection及2条原cursor引用,再为生产快照多出的14篇资源文章配图;现84篇免费节点、90篇免费苹果ID。原197条pool/selection逐项按图片SHA验证不变,cursor只随新增文章正常推进。猫22/狗15,毛线球猫未恢复。临时所有者客户端1和写消费者2在同一次操作finally中撤销并移除凭据文件,只保留本测试SQLite的fna-v3只读客户端3;真实写分配请求403。
4. 栏目定点迁移client/advanced/shadowrocketids,10篇教程经临时编辑密钥完成草稿→逐篇签名预览→同hash发布→回执核对,保留7个旧slug、追加3篇。完成后test共184篇、9分类。搜索独立fna_v3_test_articles已重建,真实/search/Clash返回教程。临时编辑密钥已移除,EDITORIAL_API_ENABLED=false;所有/api/应用旧接口在test Nginx统一404,resource-v2独立API仅受限鉴权使用。未启动队列、定时任务、通知或IndexNow。
5. 独立/etc/nginx/conf.d/test.clashfreenode.com.conf启用HTTP→HTTPS,证书由Let’s Encrypt签发,至2027-01-27,沿现有Certbot续期;保留ACME webroot。整站X-Robots-Tag:noindex,nofollow,HTML同样noindex,robots禁止抓取;关闭正式Umami统计,独立缓存/会话,保留已有公开GitHub链接。Nginx配置校验通过后reload,未修改正式站server块、代码、数据库或证书。
验收:2026-10-29 11:15:36 UTC,292项通过、0失败;包含首页最新fn20261029及不高亮菜单、4栏目、10教程、真实搜索、55个引用资源、37张图片完整哈希、历史固定配图、API隔离、权限撤销及正式两个Git HEAD未变。公开预览为https://test.clashfreenode.com/。已完成服务器侧验收,未做线上页面验收,等待用户自行确认后才可切正式。非秘密结果见[验收JSON](PREVIEW_VERIFICATION_2026-10-29.json),服务器私有导入回执和验收原件在/root/backups/cfn-fna-v3-20261029/,不包含在公开站点根目录。
此前自动审批拒绝完整Nginx输出、整库复制及不在同命令撤销的临时凭据方案;已分别改为字段白名单、公开内容最小快照及同操作try/finally创建/使用/撤销,用户明确继续后执行。Git认证仅在内存中经私有Unix socket一次性传递,未保存Git密码文件。这些阻塞在test部署时解除;随后用户确认并授权切正式,执行结果见上方正式切换。
回退范围:仅撤销本次test DNS记录、test虚拟主机及其独立运行资源;保留私有回执和Git提交供恢复,不能恢复整库覆盖正式站。正式切换必须等用户确认本次预览后再执行。
## 本次更新
| 范围 | 当前本地结果 | 发布时需要携带 |
| --- | --- | --- |
| 首页 | 展示日期最新的已发布免费节点文章全文,不限当天,排除未来文章;首页不高亮免费节点菜单;免费节点页保留历史列表 | 控制器、服务、路由、菜单及首页缓存策略 |
| 教程栏目 | 客户端改为入门教程,新增综合教程;栏目横幅沿用原样式,修正全栏目计数 | 分类数据、模板及CSS |
| 教程正文 | 共10篇长期文章:原7篇重写/重分类,新增Windows纯入门、DNS防泄漏、系统代理与TUN;加入图解、封面及真实内链,清除内部验收口吻 | 正文源、公开文章数据、分类、资源和编辑版本,不是仅上传Markdown |
| 广告 | DPL与Hardnerd广告;HN当前为首字母大写、纯黑背景静态横幅,扫光已撤回 | 广告组件、CSS、实际引用图及生产链接配置 |
| 插画 | 本地Resource V2图池与文章固定配图,免费节点用猫、小火箭ID用狗;已去除用户拒绝的粉底毛线球猫,4篇定点换图 | 生产素材、授权、图池、固定分配及可用于production的消费者 |
| 独立文章API | 本站草稿、签名预览、按hash发布、显式旧文接管、版本/回执、回退、图片与内链校验;不经过ATOM | 新增迁移、独立生产密钥、基址与搜索配置、生产内容迁移流程 |
| 搜索 | 本地独立fna_v3_articles,编辑API具有缓存/搜索/sitemap后续处理回执 | 明确生产索引和初始化,不能直接复制本地索引名或未知共享索引 |
| SEO | 完成建议清单,首页和部分教程改造已实施 | 不能将36项SEO清单整体标为完成 |
当前本地数据库170篇文章,其中160篇自动资源文章、10篇长期教程,分类9个。十篇教程实际路径:m169、m170、m171、m172、m173、m174、m167、mihomo-dns-leak、clash-verge-rev-windows、system-proxy-vs-tun(均在/a/下,以.html结尾)。稳定关系以[写作索引](../content/WRITING.md)为准。
## 本次重新验证
- `vendor/bin/phpunit --process-isolation tests/Feature/LatestFreeNodeHomeTest.php tests/Feature/EditorialApiTest.php`:19项测试、149条断言通过。
- `npm run build`:成功,137个模块;manifest及CSS/JS构建产物已生成。构建后恢复原public/hot,保留本地5187开发预览。
- 关键新增PHP语法及本次代码diff空白检查通过。这些结果不等于全部业务、生产API或生产图片已验收。
- 首页noindex已于2026-10-28修复:按首页路由独立返回`index, follow`,无额外X-Robots-Tag;旧文章详情仍按原规则noindex,栏目仍index,三条本地HTTP实测通过。签名预览仍优先noindex,nofollow。
- 候选文件清单及SHA256:`output/release-preflight-20261028/candidate-manifest.json`,当前76个候选文件。它不是最终提交白名单,其中含需进一步筛选的历史广告/素材;不含私密环境文件。
## 线上只读现场
2026-10-28通过本机SSH→白色机→VPS-003,只读核对登记目录及数据库;无线上HTTP请求,无服务器配置或业务写入。
- cfn目录:`/www/wwwroot/clashfreenode-new.com`,展示域名clashfreenode.com。
- 当前Git HEAD:`0792297bb8164fd2929b939d8d1206bc77b4ee81`。线上不存在本地基线4778ca17,不能按两者共用历史直接pull/覆盖。
- 线上有未提交的`resources/views/components/generated-tags-cloud.blade.php`,发布前保留并识别生成方式。
- 线上PHP CLI 8.5.2,public/build/manifest.json存在;FPM与队列/调度配置本次未重新核实。
- 线上178篇文章,最新为ssi20261028;分类仍为8个、client名称为客户端,尚无advanced;editorial_documents表不存在。
- 本地仅170篇且自动资源快照更旧,绝对不能用本地整库覆盖线上178篇。必须保留生产新增节点、小火箭ID、点赞等数据,只定点迁移教程/分类/编辑表。
## 发布前必须解决
1. **发布仓库及生产差异。** 本地HEAD4778ca17,唯一remote为复制来的FN_B仓库;线上历史独立。需先取得生产文件差异并明确本项目发布仓库/分支,再生成只包含本次范围的提交。未经确认不向旧FN_B remote推送。
2. **提交卫生。** 当前仓库已跟踪8588个vendor文件、10046个node_modules文件及`_env/.env`。不将本地私密配置、缓存、旧环境文件、输出截图、临时回执或整个依赖目录混入本次发布;不能靠新增.gitignore自动清除历史跟踪。若建立新仓库,使用清洁发布树而非复制原Git历史。
3. **图片生产接入。** IllustrationPool明确只允许local且基址为resource.loc:8612。直接部署会继续使用旧图,不能兑现本地视觉。生产Resource V2已有独立服务登记,但图池接口/素材、消费者授权和生产兼容未在本次部署;须单独准备并验收。不能把.loc地址写入生产。
4. **教程及分类定点迁移。** 需按旧slug比对并显式接管7篇,新增3篇,创建/映射综合教程分类;迁移关联、封面和图片。生产ID由现场分配,不使用本地ID硬覆盖。先保存生产基线并生成可审核差异,普通编辑正文通过本站API的草稿→预览→hash发布完成。
5. **文章API生产配置。** 仅追加指定editorial表迁移;默认生产关闭。setup命令仅支持本地,须另行准备生产专用凭据,绑定真实环境和base_url,并确定生产搜索服务/独立索引。不复制本地密钥,不执行migrate:fresh。
6. **首页索引策略。** 首页继承老文章7天noindex的问题已本地修复并验收;该阻塞解除。首页与日更详情的canonical关系仍属于SEO-004/018剩余规则,本次未改。
7. **HN广告地址。** 生产未配置HN_AD_URL时HN不展示;本地默认hn.loc不能作为线上目标。上线配置必须给出已登记真实地址,不能猜域名。
8. **正式备份与回滚。** 上线动作前备份目标代码提交/未提交文件、生产数据库和站点配置;保存只读核对结果。代码与资源分别按明确Git提交部署,正文更新保存API基线版本。回滚代码不drop新增编辑表;内容按版本回退,不恢复整库覆盖上线后的新文章。
## 执行顺序
先完成生产差异清单和发布仓库选择,再处理图片/首页SEO/环境配置,完成隔离验收与定点数据预演;之后生成可审阅提交、备份清单和回滚命令。正式发布按提交→推送→目标服务器更新到该提交→指定迁移→API定点内容发布→服务器侧验收执行。当前未开始后半段操作。
线上页面验收未做;此次为准备工作,不将未发布状态写成服务器侧业务验收通过。用户若要求线上页面验收,仍须按Windows入口访问审批执行。
## 2026-10-29 继续发布:早期准备记录(已由上方test部署状态更新)
用户已授权继续发布全部关联更新,但本次排除广告;不发布DPL/HN/FUC新增组件、图片、CSS或链接,保留生产现有广告。这个范围不要求从本地删除广告实现。
已在VPS-003创建/root/backups/cfn-fna-v3-20261029/,生产代码备份code-before.tar.gz和Git基线baseline.bundle已确认完成;生产HEAD仍为0792297bb8164fd2929b939d8d1206bc77b4ee81,运行分支master,只有原generated-tags-cloud模板未提交修改。没有提交、推送、切换版本或迁移生产数据。
自动审批拒绝把完整生产Git基线导出本机;该路线已停止,后续改为服务器隔离工作区构造提交、推送后目标站点按明确SHA更新,不需要导出完整生产仓库。随后白色机104.168.30.40:22连续在SSH密钥交换前关闭连接,未进入密码认证。数据库备份和隔离工作区创建命令均未执行成功,不能视为已有完整回滚条件;恢复连接后先核对备份和现场状态再继续,不能跳过数据库备份。
关联Resource V2线上仍为77d4bb2b1737e668e28eb83699549b63c56b42d4,尚无PoolController、ImageHealth、CatalogController及其新增迁移;本次必须通过Git补发图池相关功能,不能只复制素材或假设生产已有池API。软件资源独立实例不在本次更新范围。
FNA_V3已本地准备图片消费者生产适配:仅local精确允许http://resource.loc:8612、production精确允许https://resource-v2.gemcook.net;其余环境/来源禁用。新增RESOURCE_V2_ILLUSTRATIONS_ENABLED开关,生产需显式配置和独立凭据;本次尚未启用生产服务。实现未触碰本地现有配图和文章数据。回归19项/149断言通过;环境边界另有IllustrationEnvironmentTest专项验证。
后续:补做数据库/Resource V2备份→服务器隔离工作区合并并排除广告→测试与Git提交/推送→Resource V2图池增量部署/素材迁移→cfn代码部署与指定表迁移→教程API定点发布→服务器侧验收。未绕过白色机直连。
### 白色机连接复核(2026-10-29 10:12 UTC)
按用户要求只读排查:本机到白色机经utun6/Clash TUN,运行时为global、当前GLOBAL选择日本JP-07;这是当前链路证据,不能单凭它认定代理故障。随后已收到正常OpenSSH横幅,真实登录白色机成功,并通过登记跳转真实登录VPS-003成功。
白色机ssh服务active,ActiveEnterTimestamp为2026-10-15,NRestarts=0;MaxStartups=10:30:100。近期服务日志未找到MaxStartups丢弃/限流记录。此前失败发生在认证前,目前仅能定性为间歇断连,具体根因未定位,不能归因于密码错误、服务器封禁或代理节点。全程没有切换节点、关闭TUN、重启SSH或修改防火墙。连接阻塞已解除;本次连接诊断没有执行新的发布或数据库写入,完整发布仍未完成。
## 文章点赞增量发布(2026-10-29)
用户随后授权上线新增一次性年度额度,并补齐未配置教程。正式cfn应用提交更新为`ea394987069cc0e7a980c60ebe2dc845c03b5fbe`(已推送`codex/article-like-growth-20261029`);本次仅点赞功能、指定三列迁移及关联规范,不携带广告、其他本地修改或Resource变更。10篇教程已补缺项,原7篇既有参数保留,3篇全0新文补全默认值,184篇文章及174篇非编辑资源数据保留。现有调度仍每分钟唤起Laravel、业务任务每5分钟运行;为修复已存在的文件缓存权限问题,只有该站调度PHP改由nginx用户执行,并恢复6个root缓存项归属。以nginx运行已成功。
恢复点为VPS-003:/root/backups/cfn-likes-20261029/;精确额度、验证、当前文档提交及回退唯一正文见[文章自动点赞维护](ARTICLE_LIKES.md)和[发布回执](ARTICLE_LIKES_RELEASE_2026-10-29.json)。服务器侧HTTP通过,未做线上页面验收。test保持原部署,本次没有重新启用编辑API或改动统计、广告、配图授权。