nodehub/docs/maintenance/FREENODE.md

2.2 KiB
Raw Blame History

免费节点订阅接收

Nodehub只负责接收和托管产物;上游生成、内核校验和站点分发见master01维护正文。项目身份和访问规则见GemDocs项目档案。

订阅日期契约

POST /api/freenode/file/put由Api/v1/FreenodeController::filePut()接收,参数仍为site_code_short和各格式raw,接口及链接算法不变。

接收时通过CarbonImmutable::now('Asia/Shanghai')确定一次业务日期,目录令牌和所有格式文件名均使用同一日期。应用默认时区仍为UTC,不改整个应用的日期、任务或日志。与master01按北京时间生成的当天链接保持一致;当天首次正常分发前不保证新日期文件已存在。

旧实现用UTC的date(),北京时间00:15、06:15两轮会写到前一天目录,直到12:15一轮才产生当天文件。2026-10-21已确认该问题;本次改动仅修复订阅接收日期,不移动历史文件、不复制旧节点伪造未来批次。

回归验证

php vendor/bin/phpunit tests/Feature/FreenodeDateTest.php --do-not-cache-result在隔离临时目录运行真实接收控制器,模拟北京时间零点前后以及00:15、06:15、12:15同步时刻,核对三种格式的日期、目录、内容以及全局UTC时区保持不变。Telegram被替换为测试对象,不访问网络或真实公开目录。

2026-10-21本机PHP 8.4.1通过5项、35断言。macOS本机使用真实PHP二进制/usr/local/Cellar/php/8.4.1_1/bin/php运行,避免Herd包装器导致PHPUnit隔离子进程启动失败。生产部署及验收结果另按实际记录。

发布与恢复

通过Git提交、服务端推送仓库,再将线上工作树更新到明确提交。提交只包括控制器、上述测试和本文;保留已有权限及未跟踪文件。部署前在服务器保存旧提交、控制器原字节/权限、工作区状态和当日订阅哈希;回退只还原本次控制器并记录代码版本,不reset整个有并行改动的工作树,不清除公开订阅目录。数据库、环境配置和系统时间不需要改动。