record 20260630release baseline
This commit is contained in:
@@ -4,10 +4,10 @@
|
||||
|
||||
## 当前状态
|
||||
|
||||
- 当前任务:菜单展开 Logo 增加 SIP 文字并发布到 B
|
||||
- 本次变更摘要:已核对 `tests/reports/` 下 8.2-8.10 远程测试结果;修复客户充值接口负数扣款、active call hangup 超长/无分隔 ID 参数校验、Fastify 路由参数长度限制,以及既有环境号码库内置角色权限补齐迁移。追加修复业务前缀管理页面 `normalizeBusinessPrefix is not defined`、号码库页面 `emptyNumberLibraryRows is not defined`、客户网关编辑触发 React #137 的前端运行时错误。最新 s53 在菜单展开 Logo 后增加 `SIP` 文字,收起菜单仍展示 `logo2`,并发布 Web-only release。新增测试门禁:`pnpm lint` 覆盖 `apps/web/src/**`,`pnpm test:remote-web-ui` 使用真实浏览器登录并逐个点击核心菜单及每页一个安全主操作,客户网关编辑动作会验证业务前缀 checkbox 可 false->true->false 往返切换。B 当前 release 为 `s53-brand-logo-sip-text-20260630105500`;准备提交 Git。
|
||||
- 总体状态:S30 已完成;本地 KVM 开发环境 V2 闭环原冻结 release 为 `s28-v2-20260621220924`;B 二期冻结基线为 `s42-phase2-business-prefix-20260624140000`,当前 release 为 `s53-brand-logo-sip-text-20260630105500`;2026-06-30 开机后已恢复 A/B/T 服务:A `opensips`、`rtpengine-daemon`、`rtpengine-recording-daemon`、`lisglosips-redis-auth-proxy`、`lisglosips-node-exporter`、`lisglosips-recording-finalize.timer` active,`lisglosips-redis-hotpath-load.service` Result=success;B `mysql`、`redis-server`、`nginx`、`lisglosips@api`、`lisglosips@cdr-worker`、`lisglosips@recording-worker`、`lisglosips@config-publisher`、`heplify-server`、`lisglosips-prometheus`、`grafana-server` active,preflight ok,API ready ok;T `opensips`、`rtpengine-daemon`、`rtpengine-recording-daemon`、`lisglosips-s28-uas`、`apache2`、`mariadb/mysql` active;三机 `systemctl --failed` 均为 0。B preflight、远程 smoke、8.2/8.7/8.8 定向复测均通过;业务前缀、号码库、客户网关编辑与前缀选择 Web-only 修复后,s53 当前首页引用 Web JS `index-CrjpbrU-.js`、CSS `index-CrJGI5_R.css`,并包含 `/favicon.ico`、`/brand/logo1.png`、`/brand/logo2.png`;远程 smoke `REMOTE_SMOKE_20260630T031146Z.md` 通过;完整按钮级远程浏览器巡检 `REMOTE_WEB_UI_SMOKE_20260629T104040Z.md` 通过,覆盖 15 个核心菜单及安全主操作,客户网关管理编辑报告包含 `business-prefix-checkbox-toggle-ok: false->true->false`;B 本机号码库四个列表接口均返回 200,当前 total 均为 0,符合真实号段尚未导入状态;本地代码验证 `lint`、`typecheck`、全量 `test`、`build`、`node --check tests/web/remote-web-ui-smoke.mjs` 均通过;Redis `cfg:active_version=s28-v1`,A 当前 EVALSHA 脚本在 Redis 中存在;A 已加载二期 Lua 热路径 SHA1 `aff9995dbda2a2425e95a3e25b5d7ce194348ce7`;当前仍未导入真实 80 万手机号段;阿里云迁移前需按 S30 Runbook 重新演练
|
||||
- 最后更新:2026-06-30 11:12 +08:00
|
||||
- 当前任务:`20260630release` 稳定版封版
|
||||
- 本次变更摘要:已核对 `tests/reports/` 下 8.2-8.10 远程测试结果;修复客户充值接口负数扣款、active call hangup 超长/无分隔 ID 参数校验、Fastify 路由参数长度限制,以及既有环境号码库内置角色权限补齐迁移。追加修复业务前缀管理页面 `normalizeBusinessPrefix is not defined`、号码库页面 `emptyNumberLibraryRows is not defined`、客户网关编辑触发 React #137 的前端运行时错误。最新 s53 在菜单展开 Logo 后增加 `SIP` 文字,收起菜单仍展示 `logo2`,并发布 Web-only release。已将稳定代码提交 `9920575bbae7fbef4929843632f94d687ffbe289` 标记为 `20260630release`,并创建稳定分支 `stable/20260630release`;B 当前 release 为 `s53-brand-logo-sip-text-20260630105500`。
|
||||
- 总体状态:S30 已完成;本地 KVM 开发环境 V2 闭环原冻结 release 为 `s28-v2-20260621220924`;B 二期冻结基线为 `s42-phase2-business-prefix-20260624140000`,当前 release 为 `s53-brand-logo-sip-text-20260630105500`;稳定版名称 `20260630release`,Git tag `20260630release` 和分支 `stable/20260630release` 均指向稳定代码提交 `9920575bbae7fbef4929843632f94d687ffbe289`。2026-06-30 开机后已恢复 A/B/T 服务:A `opensips`、`rtpengine-daemon`、`rtpengine-recording-daemon`、`lisglosips-redis-auth-proxy`、`lisglosips-node-exporter`、`lisglosips-recording-finalize.timer` active,`lisglosips-redis-hotpath-load.service` Result=success;B `mysql`、`redis-server`、`nginx`、`lisglosips@api`、`lisglosips@cdr-worker`、`lisglosips@recording-worker`、`lisglosips@config-publisher`、`heplify-server`、`lisglosips-prometheus`、`grafana-server` active,preflight ok,API ready ok,封版 MySQL 备份 `/data/backups/mysql/20260630T061723Z`,Redis 备份 `/data/backups/redis/20260630T061723Z`;T `opensips`、`rtpengine-daemon`、`rtpengine-recording-daemon`、`lisglosips-s28-uas`、`apache2`、`mariadb/mysql` active。B preflight、远程 smoke、8.2/8.7/8.8 定向复测均通过;业务前缀、号码库、客户网关编辑与前缀选择 Web-only 修复后,s53 当前首页引用 Web JS `index-CrjpbrU-.js`、CSS `index-CrJGI5_R.css`,并包含 `/favicon.ico`、`/brand/logo1.png`、`/brand/logo2.png`;封版远程 smoke `REMOTE_SMOKE_20260630T061636Z.md` 通过;完整按钮级远程浏览器巡检 `REMOTE_WEB_UI_SMOKE_20260629T104040Z.md` 通过,覆盖 15 个核心菜单及安全主操作,客户网关管理编辑报告包含 `business-prefix-checkbox-toggle-ok: false->true->false`;封版报告为 `docs/20260630_RELEASE_BASELINE_REPORT.md`;当前仍未导入真实 80 万手机号段;阿里云迁移前需按 S30 Runbook 重新演练
|
||||
- 最后更新:2026-06-30 14:20 +08:00
|
||||
- 当前阻塞:本轮 8.2/8.7/8.8、业务前缀页面、号码库页面、客户网关编辑运行时错误、测试门禁修复、B SSH/HTTPS 来源限制移除无阻塞。遗留问题:未提交 Git;未改 A OpenSIPS/Lua/RTPEngine 或 T 配置;8.9 轻量 API burst p95 超过 10 秒需结合服务端日志和测试方式继续定位;SIP CPS 探针中 BYE 被 `403 Rate Limited` 属 A 侧限流策略问题,修复前需说明影响、备份 A 配置并安排维护窗口;8.10 备份、隔离恢复、真实回滚、OpenSIPS 配置恢复受权限或维护窗口阻塞;真实 80 万手机号段尚未导入;OpenSIPS dialog 残留根因仍待单独分析。
|
||||
- 当前环境:A/B/T 为本地 KVM 开发服务器,通过 Tailscale 联调;开发完成后再迁移阿里云
|
||||
- 私密访问资料:`.codex-private/SERVER_ACCESS.md`,只在实际连接时读取,禁止回显
|
||||
@@ -90,6 +90,16 @@
|
||||
|
||||
## 交接记录
|
||||
|
||||
### 2026-06-30 14:20 - `20260630release` 稳定版封版
|
||||
|
||||
- 状态:已完成
|
||||
- 操作服务器:本地、A、B、T;未改业务代码,未发布新 release,未改数据库 schema
|
||||
- 完成内容:将稳定代码提交 `9920575bbae7fbef4929843632f94d687ffbe289` 打 tag `20260630release`,创建分支 `stable/20260630release`;触发 B `lisglosips-backup.service` 生成封版 MySQL/Redis 备份;采集 A/B/T 服务状态、OpenSIPS 配置校验和关键 SHA;生成封版报告 `docs/20260630_RELEASE_BASELINE_REPORT.md`。
|
||||
- 修改文件:`docs/20260630_RELEASE_BASELINE_REPORT.md`、`IMPLEMENTATION_STATUS.md`、新增 smoke 报告 `tests/reports/REMOTE_SMOKE_20260630T061636Z.md`
|
||||
- 验证结果:B current 为 `/opt/lisglosips/releases/s53-brand-logo-sip-text-20260630105500`;B backup result `success`,MySQL 备份 `/data/backups/mysql/20260630T061723Z`,Redis 备份 `/data/backups/redis/20260630T061723Z`;B preflight ok;远程 smoke `REMOTE_SMOKE_20260630T061636Z.md` 通过;A OpenSIPS 配置 SHA256 `f163fa37f7aaa492e12ed496cb82f07d9b0f1030a6ed297855a22d2c4bf1c8a5`,热路径 Lua SHA1 `aff9995dbda2a2425e95a3e25b5d7ce194348ce7`,热路径加载 `success`;T OpenSIPS 配置 SHA256 `5255dd540d33c3a7bf3db278fe6fe39540b176eb79e7fe12a7a26e5217c263da`;A/T `fwupd-refresh.service` failed 为既有无关遗留。
|
||||
- 回滚方式:代码回滚可执行 `git checkout 20260630release` 或 `git switch stable/20260630release`;B 应用回滚可将 `/opt/lisglosips/current` 指回 `/opt/lisglosips/releases/s53-brand-logo-sip-text-20260630105500` 并重启 API/Worker、reload Nginx;数据恢复使用封版备份前必须先在隔离环境验证。
|
||||
- 未解决问题:真实 80 万手机号段尚未导入;8.9/8.10 既有遗留问题未处理;A/T `fwupd-refresh.service` failed 未处理。
|
||||
|
||||
### 2026-06-30 11:12 - Web-only s53 菜单展开 Logo 增加 SIP
|
||||
|
||||
- 状态:已完成
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
# LisgloSIPS V2 20260630release 稳定版封版报告
|
||||
|
||||
## 封版信息
|
||||
|
||||
| 项目 | 值 |
|
||||
| --- | --- |
|
||||
| 稳定版名称 | `20260630release` |
|
||||
| 封版时间 | 2026-06-30 14:18 +08:00 |
|
||||
| Git commit | `9920575bbae7fbef4929843632f94d687ffbe289` |
|
||||
| B current release | `/opt/lisglosips/releases/s53-brand-logo-sip-text-20260630105500` |
|
||||
| Web 验收地址 | `https://100.90.90.91/` |
|
||||
|
||||
## Git 基线
|
||||
|
||||
封版 tag 与稳定分支:
|
||||
|
||||
- Tag:`20260630release`
|
||||
- Branch:`stable/20260630release`
|
||||
|
||||
后续开发应从该 tag 或分支新建功能分支;需要恢复代码时,可 checkout tag 或 stable 分支。
|
||||
|
||||
## 服务器基线
|
||||
|
||||
### A / TonyHouse
|
||||
|
||||
| 项目 | 值 |
|
||||
| --- | --- |
|
||||
| Tailscale IP | `100.90.90.90` |
|
||||
| OpenSIPS 配置 SHA256 | `f163fa37f7aaa492e12ed496cb82f07d9b0f1030a6ed297855a22d2c4bf1c8a5` |
|
||||
| 热路径 Lua SHA1 | `aff9995dbda2a2425e95a3e25b5d7ce194348ce7` |
|
||||
| 热路径加载结果 | `success` |
|
||||
| OpenSIPS 监听 | `100.90.90.90:15060/udp`、`100.90.90.90:9061/hep_udp` |
|
||||
|
||||
服务状态:
|
||||
|
||||
- `opensips`: active
|
||||
- `rtpengine-daemon`: active
|
||||
- `rtpengine-recording-daemon`: active
|
||||
- `lisglosips-redis-auth-proxy`: active
|
||||
- `lisglosips-node-exporter`: active
|
||||
- `lisglosips-recording-finalize.timer`: active
|
||||
|
||||
已知无关 failed unit:
|
||||
|
||||
- `fwupd-refresh.service`
|
||||
|
||||
### B / YanZi
|
||||
|
||||
| 项目 | 值 |
|
||||
| --- | --- |
|
||||
| Tailscale IP | `100.90.90.91` |
|
||||
| Current release | `/opt/lisglosips/releases/s53-brand-logo-sip-text-20260630105500` |
|
||||
| MySQL 封版备份 | `/data/backups/mysql/20260630T061723Z` |
|
||||
| Redis 封版备份 | `/data/backups/redis/20260630T061723Z` |
|
||||
| Backup service result | `success` |
|
||||
| Preflight | `preflight ok` |
|
||||
|
||||
服务状态:
|
||||
|
||||
- `mysql`: active
|
||||
- `redis-server`: active
|
||||
- `nginx`: active
|
||||
- `lisglosips@api`: active
|
||||
- `lisglosips@cdr-worker`: active
|
||||
- `lisglosips@recording-worker`: active
|
||||
- `lisglosips@config-publisher`: active
|
||||
- `heplify-server`: active
|
||||
- `lisglosips-prometheus`: active
|
||||
- `grafana-server`: active
|
||||
|
||||
API ready:
|
||||
|
||||
```json
|
||||
{"status":"ok","service":"api","checks":{"config":"ok","database":"ok","redis":"ok"}}
|
||||
```
|
||||
|
||||
### T / SteveTable
|
||||
|
||||
| 项目 | 值 |
|
||||
| --- | --- |
|
||||
| Tailscale IP | `100.93.185.30` |
|
||||
| OpenSIPS 配置 SHA256 | `5255dd540d33c3a7bf3db278fe6fe39540b176eb79e7fe12a7a26e5217c263da` |
|
||||
| OpenSIPS 监听 | `100.93.185.30:5060/udp` |
|
||||
|
||||
服务状态:
|
||||
|
||||
- `opensips`: active
|
||||
- `rtpengine-daemon`: active
|
||||
- `rtpengine-recording-daemon`: active
|
||||
- `lisglosips-s28-uas`: active
|
||||
- `apache2`: active
|
||||
- `mariadb`: active
|
||||
|
||||
已知无关 failed unit:
|
||||
|
||||
- `fwupd-refresh.service`
|
||||
|
||||
## 验证结果
|
||||
|
||||
- B release preflight:通过
|
||||
- 远程 Web/API smoke:通过,报告 `tests/reports/REMOTE_SMOKE_20260630T061636Z.md`
|
||||
- 最近完整按钮级浏览器巡检:通过,报告 `tests/reports/REMOTE_WEB_UI_SMOKE_20260629T104040Z.md`
|
||||
- A OpenSIPS 配置检查:通过
|
||||
- T OpenSIPS 配置检查:通过
|
||||
|
||||
## 回滚方式
|
||||
|
||||
### 代码回滚
|
||||
|
||||
```bash
|
||||
git checkout 20260630release
|
||||
# 或
|
||||
git switch stable/20260630release
|
||||
```
|
||||
|
||||
### B 应用回滚到封版 release
|
||||
|
||||
```bash
|
||||
sudo ln -sfn /opt/lisglosips/releases/s53-brand-logo-sip-text-20260630105500 /opt/lisglosips/current
|
||||
sudo systemctl restart lisglosips@api lisglosips@cdr-worker lisglosips@recording-worker lisglosips@config-publisher
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
sudo /opt/lisglosips/current/infra/server-b/s30/lisglosips-release-preflight.sh
|
||||
```
|
||||
|
||||
### 数据恢复点
|
||||
|
||||
封版备份:
|
||||
|
||||
- MySQL:`/data/backups/mysql/20260630T061723Z`
|
||||
- Redis:`/data/backups/redis/20260630T061723Z`
|
||||
|
||||
生产式数据库恢复前必须先在隔离环境验证备份可恢复性,再安排维护窗口执行。
|
||||
|
||||
## 后续开发约束
|
||||
|
||||
- 新功能或修复从 `stable/20260630release` 或 `20260630release` 新建分支。
|
||||
- B 服务器发布必须新增 release 目录,不覆盖 `s53-brand-logo-sip-text-20260630105500`。
|
||||
- A/B/T 服务器配置修改前必须先备份配置并记录回滚命令。
|
||||
- 数据库 schema、服务重启、服务器写操作、SSH、防火墙、数据删除、生产式迁移前,必须先说明影响、风险和回滚点。
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Remote Smoke Test Report
|
||||
|
||||
Date: 2026-06-30T06:16:36.256Z
|
||||
Base URL: https://100.90.90.91
|
||||
Timeout: 30000ms
|
||||
Attempts: 2
|
||||
|
||||
| Result | Check | Detail |
|
||||
| --- | --- | --- |
|
||||
| PASS | / returns 200 | status=200, duration=5724ms, attempt=1 |
|
||||
| PASS | frontend HTML contains app root | contentType=text/html, bytes=466, attempt=1 |
|
||||
| PASS | /api/v2/health/live returns 200 | status=200, duration=596ms, attempt=1 |
|
||||
| PASS | live health reports ok | body={"status":"ok","service":"api","timestamp":"2026-06-30T06:16:35.041Z","checks":{"process":"ok"}} |
|
||||
| PASS | /api/v2/health/ready returns 200 | status=200, duration=158ms, attempt=1 |
|
||||
| PASS | ready health reports database and redis ok | body={"status":"ok","service":"api","timestamp":"2026-06-30T06:16:35.202Z","checks":{"config":"ok","database":"ok","redis":"ok"}} |
|
||||
| PASS | /api/v2/auth/captcha returns 200 | status=200, duration=1793ms, attempt=1 |
|
||||
| PASS | captcha endpoint returns id, image, and expiry | captchaId=df88f31f-3a39-4fc9-b60d-2ecda12f8446, expiresAt=2026-06-30T06:21:36.991Z, attempt=1 |
|
||||
|
||||
## Raw Endpoints
|
||||
|
||||
- /: status=200, duration=5724ms, attempt=1, contentType=text/html
|
||||
- /api/v2/health/live: status=200, duration=596ms, attempt=1, contentType=application/json; charset=utf-8
|
||||
- /api/v2/health/ready: status=200, duration=158ms, attempt=1, contentType=application/json; charset=utf-8
|
||||
- /api/v2/auth/captcha: status=200, duration=1793ms, attempt=1, contentType=application/json; charset=utf-8
|
||||
Reference in New Issue
Block a user