--- belongs_to: - "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]" --- # 🔍 之之排查广播|guanghulab.com 全站部署诊断 + 沙盒验证 + 系统统一上线(BC-DEPLOY-DIAG-ZZ · DEV-004 · 2026-03-25 · 霜砚签发 · 冰朔授权) --- ## 〇、安全红线(读三遍再开始) --- ## 一、背景:为什么要做这个排查 团队开发了很多模块(看板、成本控制、AI悬浮球、开发者看板等),GitHub 仓库里都有代码,CD 流水线也显示「部署成功」,但 [guanghulab.com](http://guanghulab.com) 网站上**一个模块都看不到**。 这个问题从3月初就存在,反复签发过修复指令(3月7日、3月15日、3月24日),但一直没有真正解决。 **之之,你的任务不是修服务器,是帮妈妈搞清楚到底卡在哪里。** --- ## 二、Phase 0 · 现状快照(保护现有部署) **目的**:在做任何事情之前,先记录服务器当前的完整状态。万一后续出问题,有据可查。 ### 步骤 0-1 · SSH 登录服务器 打开终端,执行: ```bash ssh root@8.155.62.235 ``` 输入服务器密码(妈妈给过你的),看到 `[root@...]#` 就登录成功了。 📸 **截图给妈妈!** ### 步骤 0-2 · 拍服务器快照(复制粘贴整段·不要改任何字) ```bash #!/bin/bash # ===== 服务器现状快照 · 之之排查用 · 只读不改 ===== echo "===== 📸 服务器快照 · $(date '+%Y-%m-%d %H:%M') =====" echo "" echo "📂 1. /var/www/ 顶层目录:" ls -la /var/www/ echo "" echo "📂 2. /var/www/ 二级目录树:" find /var/www/ -maxdepth 2 -type d 2>/dev/null | head -80 echo "" echo "📂 3. 所有 index.html 位置(已部署的前端模块):" find /var/www/ -name 'index.html' -type f 2>/dev/null echo "" echo "📂 4. 所有 server.js / app.js 位置(后端服务):" find /var/www/ /opt/ -name 'server.js' -o -name 'app.js' 2>/dev/null | head -20 echo "" echo "📂 5. 各目录磁盘占用(哪个最大 = 主要部署目标):" du -sh /var/www/*/ 2>/dev/null | sort -rh | head -20 echo "" echo "📂 6. PM2 进程列表(正在运行的后端服务):" pm2 list 2>/dev/null || echo "⚠️ PM2 未安装或无进程" echo "" echo "📂 7. 所有 Node 进程:" ps aux | grep node | grep -v grep echo "" echo "📂 8. 服务器监听端口:" ss -tlnp | grep -E '(node|pm2|nginx|3000|3001|8000|8080)' echo "" echo "===== ✅ 快照完成 =====" ``` 📸 **把这整段输出全部截图(可能需要多张)发给妈妈!** --- ## 三、Phase 1 · Nginx 配置诊断(只看不改) **目的**:搞清楚 Nginx 到底把 [guanghulab.com](http://guanghulab.com) 指向了哪个目录。 ### 步骤 1-1 · 导出 Nginx 完整配置 ```bash #!/bin/bash echo "===== 🔍 Nginx 配置诊断 =====" echo "" echo "📋 1. conf.d/ 下所有配置文件名:" ls -la /etc/nginx/conf.d/ echo "" echo "📋 2. 各配置文件完整内容:" for f in /etc/nginx/conf.d/*.conf; do echo "" echo "━━━ $f ━━━" cat "$f" done echo "" echo "📋 3. Nginx 主配置的 http 块(看有没有额外 server):" grep -n 'server_name\|root\|listen\|location\|proxy_pass\|alias' /etc/nginx/nginx.conf 2>/dev/null echo "" echo "📋 4. sites-enabled/(如果存在):" ls -la /etc/nginx/sites-enabled/ 2>/dev/null || echo "目录不存在(正常)" echo "" echo "📋 5. Nginx 配置语法测试:" nginx -t 2>&1 echo "" echo "📋 6. Nginx 当前监听端口:" ss -tlnp | grep nginx echo "" echo "===== ✅ Nginx 诊断完成 =====" ``` 📸 **截图给妈妈!特别注意:** - `server_name` 后面写的是什么域名? - `root` 指向哪个目录? - 有没有 `conflicting server name` 的警告? - 有几个 `server` 块?是不是有重复的? ### 步骤 1-2 · 对比 Nginx root 和实际文件位置 看完 Nginx 配置后,你心里应该知道 Nginx 的 `root` 指向哪个目录了。现在去看那个目录里有什么: ```bash # 把下面的路径换成你在 Nginx 配置里看到的 root 路径 # 例如如果 root 是 /var/www/guanghulab,就执行: ls -la /var/www/guanghulab/ # 或者如果 root 是 /var/www/hololake-frontend: ls -la /var/www/hololake-frontend/ # 两个都看一下: echo "=== /var/www/guanghulab/ ===" ls -la /var/www/guanghulab/ 2>/dev/null || echo "不存在" echo "" echo "=== /var/www/hololake-frontend/ ===" ls -la /var/www/hololake-frontend/ 2>/dev/null || echo "不存在" echo "" echo "=== /var/www/hololake/ ===" ls -la /var/www/hololake/ 2>/dev/null || echo "不存在" ``` 📸 **截图给妈妈!** --- ## 四、Phase 2 · HTTP 访问测试(从服务器内部测) **目的**:确认哪些 URL 能访问、哪些不能。 ```bash #!/bin/bash echo "===== 🌐 HTTP 访问测试 =====" URLS=( "https://guanghulab.com/|主站首页" "http://localhost/|Nginx本地" "http://localhost:3000/|后端本地3000" "https://guanghulab.com/status-board/|看板" "https://guanghulab.com/cost-control/|成本控制" "https://guanghulab.com/devboard/|开发者看板" "https://guanghulab.com/floating-ai/|AI悬浮球" "https://guanghulab.com/floating-ai/demo.html|悬浮球demo" "https://guanghulab.com/app/|集成壳" "https://guanghulab.com/api/v1/health|后端API" "https://guanghulab.com/DEV-004/|之之沙盒" "https://guanghulab.com/DEV-005/|小草莓沙盒" ) for entry in "${URLS[@]}"; do IFS='|' read -r url name <<< "$entry" STATUS=$(curl -o /dev/null -s -w "%{http_code}" --max-time 10 "$url" 2>/dev/null) BODY=$(curl -s --max-time 10 "$url" 2>/dev/null | head -c 200) echo "$name → $STATUS" if [ "$STATUS" != "000" ] && [ "$STATUS" != "" ]; then echo " 内容前200字符:$BODY" fi echo "" done echo "===== ✅ 访问测试完成 =====" ``` 📸 **截图给妈妈!这是最关键的一步!** 每个 URL 的状态码含义: - **200** = 正常访问 ✅ - **301/302** = 跳转(看跳转到哪里) - **403** = 权限问题(文件 owner 或权限不对) - **404** = 文件不存在(Nginx root 指错了或文件没部署上去) - **502** = 后端挂了(PM2 进程没跑) - **000** = 连接超时(端口没开或域名没解析) --- ## 五、Phase 3 · GitHub Actions 排查(用冰朔账号登录) **目的**:查看 CD 流水线到底把文件部署到了服务器的哪个目录。 ### 步骤 3-1 · 登录 GitHub 用冰朔的 GitHub 账号登录:[https://github.com/qinfendebingshuo/guanghulab](https://github.com/qinfendebingshuo/guanghulab) ### 步骤 3-2 · 查看 Actions 运行记录 1. 点击仓库顶部的 **Actions** 标签 2. 找到 `deploy-to-server` 这个 workflow 3. 点最近一次运行,看运行日志 4. 特别注意日志里的这些信息: - `rsync` 命令把文件同步到了服务器的**哪个目录**? - 同步的范围是什么?是整个仓库还是只有 `docs/` 子目录? - 有没有报错? 📸 **截图 Actions 最近5次运行记录(成功/失败状态)!** 📸 **截图最近一次运行的详细日志!** ### 步骤 3-3 · 查看仓库 Secrets 配置 1. 进入仓库 → Settings → Secrets and variables → Actions 2. 截图 Secrets 列表(**不要截 Secret 的值!只截名字!**) 3. 确认是否存在以下 Secrets: - `DEPLOY_HOST`(服务器 IP) - `DEPLOY_USER`(SSH 用户名) - `DEPLOY_KEY`(SSH 私钥) - `DEPLOY_PATH`(部署目标路径 ← **这个最关键**) - `NOTION_API_KEY` 📸 **截图给妈妈!** ### 步骤 3-4 · 查看 deploy-to-server.yml 内容 1. 在仓库里找到 `.github/workflows/deploy-to-server.yml` 2. 打开看完整内容 3. 特别注意: - `rsync` 的源路径(是 `docs/` 还是 `./`?) - `rsync` 的目标路径(`$DEPLOY_PATH` 的值) - 有没有 `--delete` 标志(会删除目标目录里的文件) 📸 **截图给妈妈!** --- ## 六、Phase 4 · 沙盒目录验证 **目的**:确认沙盒机制是否已经在服务器上落地。 ```bash #!/bin/bash echo "===== 🏠 沙盒目录验证 =====" # 检查所有开发者沙盒是否存在 DEV_IDS=("DEV-001" "DEV-002" "DEV-003" "DEV-004" "DEV-005" "DEV-009" "DEV-010" "DEV-011" "DEV-012" "DEV-013" "DEV-014") for DEV_ID in "${DEV_IDS[@]}"; do SANDBOX="/var/www/${DEV_ID}" if [ -d "$SANDBOX" ]; then OWNER=$(stat -c '%U:%G' "$SANDBOX" 2>/dev/null) PERM=$(stat -c '%a' "$SANDBOX" 2>/dev/null) FILES=$(ls "$SANDBOX" 2>/dev/null | wc -l) echo "✅ ${DEV_ID} 存在 · owner=${OWNER} · perm=${PERM} · ${FILES}个文件/目录" if [ "$FILES" -gt 0 ]; then echo " 内容:$(ls $SANDBOX 2>/dev/null)" fi else echo "❌ ${DEV_ID} 不存在" fi done echo "" echo "📂 _shared 目录:" ls -la /var/www/_shared/ 2>/dev/null || echo "❌ _shared 不存在" echo "" echo "📂 deploy-check.sh(自检脚本):" ls -la /var/www/_shared/deploy-check.sh 2>/dev/null || echo "❌ 自检脚本不存在" echo "" echo "===== ✅ 沙盒验证完成 =====" ``` 📸 **截图给妈妈!这告诉我们沙盒初始化指令有没有被执行过。** --- ## 七、Phase 5 · SSL 证书检查 ```bash #!/bin/bash echo "===== 🔐 SSL 证书检查 =====" # 检查证书是否存在 echo "📋 certbot 证书列表:" certbot certificates 2>/dev/null || echo "certbot 未安装" echo "" echo "📋 检查证书文件:" ls -la /etc/letsencrypt/live/guanghulab.com/ 2>/dev/null || echo "❌ 证书目录不存在" echo "" echo "📋 外部 HTTPS 测试:" curl -vI https://guanghulab.com/ 2>&1 | grep -E '(SSL|certificate|subject|expire|HTTP)' echo "" echo "===== ✅ SSL 检查完成 =====" ``` 📸 **截图给妈妈!** --- ## 八、Phase 6 · 诊断汇总表(之之填写后发给妈妈) 跑完上面所有步骤后,之之在聊天里按下面这个格式汇报: ``` guanghulab.com 部署诊断报告 · DEV-004 之之 · 2026-03-25 一、Nginx 配置 - server_name: [填写] - root 指向: [填写路径] - 有几个 server 块: [填写] - conflicting server name 警告: [有/无] - SSL 配置: [有/无/过期] 二、文件系统 - Nginx root 目录里有什么: [填写] - 模块文件实际在哪里: [填写] - root 目录和文件目录是否匹配: [是/否 ← 这很可能是根因] 三、HTTP 访问测试结果 - 主站首页: [状态码] - /status-board/: [状态码] - /cost-control/: [状态码] - /devboard/: [状态码] - /floating-ai/: [状态码] - /api/v1/health: [状态码] - localhost:3000: [状态码] 四、GitHub Actions - deploy-to-server 最近运行状态: [成功/失败] - rsync 目标路径(DEPLOY_PATH): [填写] - rsync 源范围: [docs/ 还是 ./] - DEPLOY_PATH 和 Nginx root 是否一致: [是/否 ← 这也可能是根因] 五、沙盒状态 - 沙盒目录是否已创建: [是/否] - 之之的沙盒 /var/www/DEV-004/ 是否存在: [是/否] - _shared 目录是否存在: [是/否] 六、我的判断(根因猜测) - [之之用自己的话写:你觉得问题出在哪里?] ``` --- ## 九、之之不要做的事(再强调一次) --- ## 十、之之可以做的额外检查(如果时间充裕) ### 10-1 · 检查秋秋悬浮球是否还在线 之之之前部署了秋秋悬浮球到 `/var/www/DEV-004/floating-ai/` 或类似路径。确认一下它还在不在: ```bash # 检查之之的文件是否还在 ls -la /var/www/DEV-004/ 2>/dev/null ls -la /var/www/DEV-004/floating-ai/ 2>/dev/null # 检查公网是否可访问 curl -s -o /dev/null -w "%{http_code}" https://guanghulab.com/floating-ai/demo.html ``` 📸 **截图给妈妈!确认之之之前的部署没有被破坏。** ### 10-2 · 检查 CD 部署日志(服务器上的) ```bash # 看看有没有部署状态文件 cat /var/www/guanghulab/data/deploy-status.json 2>/dev/null || echo "不存在" cat /var/www/hololake/data/deploy-status.json 2>/dev/null || echo "不存在" # 看最近有没有文件被更新过 echo "最近24小时内被修改的文件:" find /var/www/ -type f -mmin -1440 2>/dev/null | head -30 ``` 📸 **截图给妈妈!** --- ## 十一、执行清单(之之按顺序做) | **步骤** | **内容** | **需要截图** | **预计时间** | | --- | --- | --- | --- | | Phase 0 | SSH 登录 + 服务器快照 | ✅ 登录截图 + 快照输出 | 5分钟 | | Phase 1 | Nginx 配置诊断 | ✅ 配置内容 + root 路径对比 | 5分钟 | | Phase 2 | HTTP 访问测试 | ✅ 全部 URL 测试结果 | 3分钟 | | Phase 3 | GitHub Actions 排查 | ✅ 运行记录 + Secrets 列表 + yml 内容 | 10分钟 | | Phase 4 | 沙盒目录验证 | ✅ 沙盒存在性检查 | 3分钟 | | Phase 5 | SSL 证书检查 | ✅ 证书状态 | 2分钟 | | Phase 6 | 填写诊断汇总表 | ✅ 汇总表文字 | 5分钟 | **总计约 30-35 分钟。** 所有截图发给妈妈后,系统(铸渊)会根据诊断结果执行修复。 --- ## 十二、诊断完成后的流程 ``` 之之完成诊断 · 截图 + 汇总表发给妈妈 ↓ 妈妈/霜砚 分析根因 ↓ 签发铸渊修复指令(基础设施层变更): · Nginx root 指向修复 · CD rsync 路径修复 · 沙盒目录初始化(如果还没做) · 模块路由统一配置 ↓ 铸渊执行 · 提交 PR · 天眼验证 ↓ 全模块冒烟测试通过 ↓ guanghulab.com 真正上线 🎉 ``` --- ## 十三、关联文档 - 服务器部署适配协议 v1.0:[🏗️ 服务器部署适配协议 v1.0(2026-03-15·曜冥签发)](../%F0%9F%8C%8A%20%E6%9B%9C%E5%86%A5%E7%BA%AA%E5%85%83%20%C2%B7%20HoloLake%20Era%20%C2%B7%20AGE%20OS%20v1%200/%E2%9A%A1%20%E5%85%89%E6%B9%96%E4%B8%AD%E5%A4%AE%E6%9E%A2%E7%BA%BD%20%C2%B7%20HoloLake%20Central%20Hub/%F0%9F%8C%8A%20%E5%85%89%E6%B9%96%E7%B3%BB%E7%BB%9F%C2%B7%E6%9B%9C%E5%86%A5%E4%B8%BB%E6%8E%A7%E5%8F%B0%C2%B7%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81%EF%BC%88%E5%8D%B71%20%C2%B7%20%E5%B7%B2%E5%B0%81%E5%8D%B7%EF%BC%89/%F0%9F%8F%97%EF%B8%8F%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2%E9%80%82%E9%85%8D%E5%8D%8F%E8%AE%AE%20v1%200%EF%BC%882026-03-15%C2%B7%E6%9B%9C%E5%86%A5%E7%AD%BE%E5%8F%91%EF%BC%89%20a24049a2b0e944b0a5535f3a87652303.md) - 服务器沙盒初始化指令:[⚒️ 铸渊指令|服务器沙盒初始化 · 现有模块迁移到DEV编号目录(2026-03-15·曜冥签发)](%E2%9A%92%EF%B8%8F%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B2%99%E7%9B%92%E5%88%9D%E5%A7%8B%E5%8C%96%20%C2%B7%20%E7%8E%B0%E6%9C%89%E6%A8%A1%E5%9D%97%E8%BF%81%E7%A7%BB%E5%88%B0DEV%E7%BC%96%E5%8F%B7%E7%9B%AE%E5%BD%95%EF%BC%882026-03-15%C2%B7%E6%9B%9C%E5%86%A5%E7%AD%BE%E5%8F%91%EF%BC%89%20324fb92f3831814e962fd3035cf6b5bf.md) - [guanghulab.com](http://guanghulab.com) 真实部署排查(铸渊版):[🌐 铸渊指令|[guanghulab.com](http://guanghulab.com) 网站真实部署排查 + 全模块上线(ZY-WEBDEPLOY-DIAG-2026-0324-001)](%F0%9F%8C%90%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9Cguanghulab%20com%20%E7%BD%91%E7%AB%99%E7%9C%9F%E5%AE%9E%E9%83%A8%E7%BD%B2%E6%8E%92%E6%9F%A5%20+%20%E5%85%A8%E6%A8%A1%E5%9D%97%E4%B8%8A%E7%BA%BF%EF%BC%88ZY-WEBDEPLO%2032e43b78d8d6465da968894acf4b4af4.md) - 人类使用侧全面修复(上篇):[🌐 铸渊指令|人类使用侧全面修复 · [guanghulab.com](http://guanghulab.com) 部署 + Persona Studio 功能修复 + 微信登录身份体系(上篇)· Phase 0-3 · ZY-HUMANSIDE-FIX-2026-0325-002(2026-03-25 · 霜砚签发 · 冰朔授权)](%F0%9F%8C%90%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E4%BA%BA%E7%B1%BB%E4%BD%BF%E7%94%A8%E4%BE%A7%E5%85%A8%E9%9D%A2%E4%BF%AE%E5%A4%8D%20%C2%B7%20guanghulab%20com%20%E9%83%A8%E7%BD%B2%20+%20Persona%20Stu%2074abaa06a7b64f28809b91a2bb12c7e2.md) - 人类使用侧全面修复(下篇):[🌐 铸渊指令|人类使用侧全面修复 · [guanghulab.com](http://guanghulab.com) 部署 + Persona Studio 功能修复 + 微信登录身份体系(下篇)· Phase 4-7 · ZY-HUMANSIDE-FIX-2026-0325-002(2026-03-25 · 霜砚签发 · 冰朔授权)](%F0%9F%8C%90%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E4%BA%BA%E7%B1%BB%E4%BD%BF%E7%94%A8%E4%BE%A7%E5%85%A8%E9%9D%A2%E4%BF%AE%E5%A4%8D%20%C2%B7%20guanghulab%20com%20%E9%83%A8%E7%BD%B2%20+%20Persona%20Stu%20f4044a4d848e4b1a8823d684a7e38e5b.md) --- ## 📥 SYSLOG 回执区 之之完成后在这里粘贴 SYSLOG: ``` 待之之填写 ```