Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
5.9 KiB
5.9 KiB
🔧 铸渊指令|PM2 服务排查 + 全系统健康诊断(2026-03-13·霜砚签发)
签发:霜砚(Notion执行体)
接收:铸渊(GitHub执行体)
时间:2026-03-13 12:00 CST
优先级:P1·正常
前置要求:⚠️ 必须先完成「阶段零·核心大脑认知恢复」再执行后续排查
阶段零 · 核心大脑认知恢复(必须最先执行)
步骤
- 读取曜冥核心大脑 v4.0
- Page ID:
30bfb92f383181b58713da7ecc34a37c - 通过 Notion API 读取全文:
GET https://api.notion.com/v1/blocks/30bfb92f383181b58713da7ecc34a37c/children?page_size=200 - 重点理解:
- 一、数字地球 = 唯一降落锚点
- 二、角色分工(曜冥/知秋/霜砚/铸渊)
- 五·二、全自动闭环架构(三层:入口层/调度层/处理层)
- 六、永久规则(broadcast_code_injection = always)
- 技术定义:Persona-Driven DevOps — 人格体驱动的开发运维系统
- Page ID:
- 读取数字地球主控台
- Database ID:
c6f7722729264a91a3769224d5f631a3 - 了解当前系统全貌:存在注册表里有所有页面/数据库的路径
- Database ID:
- 确认认知恢复完毕
- 在 Issue 或 PR 里写一行:
✅ 核心大脑 v4.0 认知恢复完毕 · [时间] - 然后再进入阶段一
- 在 Issue 或 PR 里写一行:
阶段一 · PM2 报错服务诊断
1.1 问题描述
服务器 8.155.62.235(阿里云 ECS)上 PM2 管理的 6 个服务中,有 3 个持续 errored:
| PM2 ID | 进程名 | 状态 | 重启次数 | 内存 |
|---|---|---|---|---|
| 3 | guanghulab | errored | 420 | 0b |
| 2 | guanghulab-backend | errored | 420 | 0b |
| 4 | guanghulab-ws | errored | 390 | 0b |
| 27 | guanghulab-proxy | online | 0 | 52.4mb |
| 0 | hololake | online | 3 | 65.3mb |
| 1 | hololake-api | online | 1 | 54.5mb |
| 28 | persona-studio | online | 0 | 59.7mb |
1.2 排查步骤
铸渊通过 SSH(DEPLOY_KEY 已在 GitHub Secrets)执行以下命令并记录输出:
# ━━━ 第1步:查看报错日志 ━━━
pm2 logs guanghulab --lines 50 --nostream
pm2 logs guanghulab-backend --lines 50 --nostream
pm2 logs guanghulab-ws --lines 50 --nostream
# ━━━ 第2步:查看进程详情 ━━━
pm2 show guanghulab
pm2 show guanghulab-backend
pm2 show guanghulab-ws
# ━━━ 第3步:查看启动脚本路径 ━━━
pm2 prettylist | grep -A5 'guanghulab\|guanghulab-backend\|guanghulab-ws'
# ━━━ 第4步:检查文件是否存在 ━━━
ls -la /var/www/guanghulab/
ls -la /var/www/guanghulab/backend/ 2>/dev/null || echo "backend目录不存在"
ls -la /var/www/guanghulab/persona-studio/backend/ 2>/dev/null || echo "persona-studio backend目录不存在"
# ━━━ 第5步:检查端口占用 ━━━
netstat -tlnp | grep -E '3000|3001|3002'
# ━━━ 第6步:检查Node版本和依赖 ━━━
node -v
npm -v
1.3 诊断后决策
根据排查结果,铸渊自行判断:
| 情况 | 处理方式 |
|---|---|
| 启动脚本路径不存在 | 删除该 PM2 进程(pm2 delete 进程名) |
| 依赖缺失(node_modules) | cd 目录 && npm install && pm2 restart 进程名 |
| 端口冲突 | 修改端口或合并服务 |
| 旧服务已被新服务替代 | 删除旧进程,保留新的(如 hololake 替代了 guanghulab) |
| 代码报错 | 修复代码,提 PR |
阶段二 · 全系统健康检查
排查完 PM2 后,铸渊对整个服务器做一次全面健康检查:
# ━━━ Nginx 状态 ━━━
nginx -t
systemctl status nginx
# ━━━ SSL 证书有效期 ━━━
openssl x509 -in /etc/letsencrypt/live/guanghulab.com/fullchain.pem -noout -dates
# ━━━ 磁盘空间 ━━━
df -h
# ━━━ 内存使用 ━━━
free -h
# ━━━ PM2 全局状态 ━━━
pm2 status
# ━━━ 网站可访问性 ━━━
curl -sI https://guanghulab.com | head -5
curl -s http://127.0.0.1:3001/api/v1/ | head -c 200 || echo "3001端口无响应"
curl -s http://127.0.0.1:3002/api/ps/ | head -c 200 || echo "3002端口无响应"
阶段三 · 生成诊断报告
铸渊完成排查后,在 Notion 工单队列写一条工单:
- 工单名:
PM2服务排查报告 · 2026-03-13 - 操作类型:其他
- 提交者:铸渊(需要在工单提交者选项里确认,如没有可写在具体内容里)
- 具体内容:包含以下信息
- 3 个 errored 服务的报错原因
- 处理结果(删除/修复/保留)
- 全系统健康检查结果
- SSL 证书到期时间
- 磁盘/内存使用情况
- 建议的后续优化
工单队列 Database ID:84edd0640bf146a9a5a7840107013e8c
当前 Nginx 配置参考(已由冰朔于 2026-03-13 12:00 更新)
配置文件路径:/etc/nginx/nginx.conf(注意:不是 snippets 目录)
当前路由:
| 路由 | 指向 | 用途 |
|---|---|---|
/ |
静态文件 /var/www/guanghulab/status-board |
光湖主站首页 |
/webhook/feishu |
127.0.0.1:3000 |
飞书 Webhook |
/api/v1/ |
127.0.0.1:3001 |
光湖后端 API |
/api/ps/ |
127.0.0.1:3002 |
Persona Studio API(新增·含CORS) |
/ws/preview |
127.0.0.1:3002 |
Persona Studio WebSocket(新增) |
关联文档
- 曜冥核心大脑 v4.0:Page ID
30bfb92f383181b58713da7ecc34a37c - 数字地球主控台:Database ID
c6f7722729264a91a3769224d5f631a3 - 工单队列:Database ID
84edd0640bf146a9a5a7840107013e8c - 铸渊配置清单:见同级页面「📋 铸渊配置清单」
- 全自动闭环对接规范:见同级页面「🔄 铸渊指令|全自动闭环对接规范」
✅ 铸渊完成后,在本页下方追加一行:
✅ PM2诊断完毕 · [日期时间] · 处理结果摘要