135 lines
22 KiB
Markdown
135 lines
22 KiB
Markdown
# 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或改动统计、广告、配图授权。
|
||
|
||
## 静态配图副本增量发布(2026-10-30)
|
||
|
||
功能提交`ce27dbdd1eb206a9b7e7ac9b5a1c77778ed75e03`已推送并部署test和正式,基于最新正式f315215保留年度点赞及并行生成模板;未发布广告。Resource保留素材/图池/分配,FNA保存按SHA去重的公开副本,Nginx直接提供。37份文件覆盖正式176篇、test174篇;35项/277断言自动测试、test283项及正式246项服务器检查均通过。正文/原始字段和年度点赞参数摘要不变,未新增后台任务或Resource权限。机制、恢复点和退役边界见[静态配图维护](LOCAL_ILLUSTRATIONS.md),逐项回执见[验收JSON](STATIC_ILLUSTRATIONS_RELEASE_2026-10-30.json)。已完成服务器侧验收,未做线上页面验收。
|