docs(rednote): record verified isolated production deployment

This commit is contained in:
xsl
2026-10-19 23:04:28 +08:00
parent 4af825a5e4
commit 459e21dad4
2 changed files with 46 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
# Rednote 生产发布记录 · 2026-10-19
状态:已发布并通过上线检查。
- 入口:<https://1me.xajuzi.com/rednote/>;后台:<https://1me.xajuzi.com/rednote/admin.html>(沿用原 Basic Auth)。
- 发布版本:`20261019-225927-4af825a`;运行代码提交:`4af825a5e422c633c43dd0df3923ada1e6a8f760`。
- 发布包 SHA256:`c8d3cc8f9d68b7214eafc3a3c832c09854d07f6c3b3a9f53a6bdfb0397e4933f`;148个运行文件及1份哈希清单,线上逐文件校验一致。
- 目录:`/home/ubuntu/juzi-rednote/releases/20261019-225927-4af825a`;`current` 指向该版本。
- 服务:`juzi-rednote.service`,已启用开机启动,仅监听 `127.0.0.1:8081`;数据:`/home/ubuntu/juzi-rednote-data`。
- 凭据:`/etc/juzi/rednote.env`,root所有、权限600;只在服务器内部提取现有 Face++ 凭据,没有复制微信配置或下载密钥。
- Nginx及基线备份:`/etc/juzi-deploy-backup/rednote-20261019-225927-4af825a/`,含 `nginx-juzi.before.conf`、`baseline.json`、`installed.json`、`published.json`。
## 原入口保护
原服务目录 `/home/ubuntu/juzi` 没有 git pull、文件覆盖、数据迁移或服务重启,仍为 `fc9f2519bdc50595556b244cdecf695ae90ba9eb`,工作区干净。原进程PID始终为689641,自动重启次数0。旧systemd主文件及微信drop-in哈希一致。
新服务独立运行;实际检查其挂载命名空间中 `/home/ubuntu/juzi` 为只读。Nginx只在原HTTPS server中增加 `/rednote` 路由块,移除该块可还原原文件;配置检查通过后平滑reload。发布前Nginx文件SHA256:`6c21c06e22c953628049601adb4bb8726c22f45e16b4973988c36115beefb484`;发布后:`5d0aa501340566d6eb8a0cccef0944fb8eccaece3c1a5809b87a57d1490ee7bf`。
发布后原 `/state/` 页面、健康接口、微信授权配置、域名验证文件的内容哈希与发布前一致;微信登录开关保持启用。原后台仍要求鉴权,私有数据不能公网直读。
## 验证结果和边界
本地Rednote后端5项测试及浏览器集成通过,覆盖最近5份报告、真实共享页面的样本检测/历史重载、所有者隔离、后台API/照片/导出子路径、同域双入口隔离、限流和数据路径保护。淘宝16项测试、共享公式一致性检查,以及原H5游客隐私、微信授权与退出、报告持久化、异步侧脸4组回归通过。
原H5较旧的两个单元断言 `tone-dark-circle.js:13`、`factual-copy.js:9` 在发布前HEAD也不通过,属于既有期望值/文案差异。本次未修改相关评分、文案实现,没有为通过断言调整业务结论。
线上通过:
- 新入口HTTPS页面、静态资源、健康和账号配置;不展示微信登录,不开放微信/淘宝登录API。
- 未同意隐私前不创建身份;同意后Cookie为Secure、HttpOnly、SameSite=Lax、`Path=/rednote/`、30天。
- 关闭并重建浏览器上下文、单独重启新服务后,同一Cookie仍恢复原身份,档案缓存及历史入口正常。
- 清除身份的取消/确认、服务端会话撤销、旧Cookie重放失败;原入口仍显示微信登录、没有继承新身份。
- 新旧后台页面/API/导出未鉴权返回401;私有数据和服务器源码路径不可访问;跨域创建身份返回403。
- 上线浏览器检查无JS异常、无资源失败;新服务自动重启次数0,启动/检查日志无错误。仅为持久化检查主动重启过新服务一次,原服务未重启。
线上未调用收费检测API,自动化没有代替手机摄像头实测或真实微信账号授权验收。发布后请在目标手机/内置浏览器完成拍摄、真实报告生成和关闭重开后的历史查看,并从微信打开原 `/state/` 核对真实授权。验证只新增1个空浏览器身份,检查结束已撤销其会话,没有测试照片或报告写入线上。
## 回退
备份中的 `nginx-juzi.before.conf` 是新增路由前的完整配置。先核对当前配置仍为本次发布后的哈希;若此后还有其他配置变更,应仅移除本次 `BEGIN rednote ... END rednote` 块,保留后续变更。
在确认没有后续变更的前提下,先另存当前Nginx配置,再将 `nginx-juzi.before.conf` 安装回 `/etc/nginx/sites-available/juzi`。执行 `sudo nginx -t`,通过后执行 `sudo systemctl reload nginx`,并核对 `/state/` 健康;之后执行 `sudo systemctl disable --now juzi-rednote.service`。若配置检查失败,恢复刚另存的配置并再次检查,不reload失败配置。
保留新入口发布目录及 `/home/ubuntu/juzi-rednote-data`,不删除数据,不改原服务,不重启原Node进程。
+2
View File
@@ -43,6 +43,8 @@ npm run test:h5
## 部署方式
已于2026-10-19发布到生产,版本 `20261019-225927-4af825a`。发布验证、备份位置及回退说明见 [发布记录](DEPLOYMENT-20261019.md)。
2026-10-19发布前基线:线上 `juzi-h5.service` 在127.0.0.1:8080运行,工作目录 `/home/ubuntu/juzi/h5`,版本 `fc9f251`;`/state/` 正常,微信授权已启用。新入口使用独立目录、进程和数据存储。
部署到 `/home/ubuntu/juzi-rednote/releases/<版本>/`,`current` 仅指向新入口发布目录;数据固定 `/home/ubuntu/juzi-rednote-data`。不能在旧线上目录执行 git pull、覆盖其静态文件、移动旧数据或重启旧服务。