--- belongs_to: - "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]" --- # ⚡ 铸渊补充指令(下卷)|子域名沙箱部署 + 全链路冒烟测试 + 天眼部署后扫描 + 状态同步 + 回执(ZY-AGEOS-TOWER-2026-0326-001-S1)· 霜砚签发 · 冰朔授权 指令编号:ZY-AGEOS-TOWER-2026-0326-001-S1(下卷) 接续上卷 Phase S0 / S1 / S1.5,本卷从 Phase S2 开始。 --- # Phase S2 · 子域名沙箱服务器部署 ## S2-1 · 前置验证(全部通过才能继续) ```bash #!/bin/bash # 前置验证 · 任一失败则中止 DNS=$(dig +short dev-004.guanghulab.com A) [ "$DNS" = "8.155.62.235" ] && echo "✅ DNS OK" || { echo "❌ DNS 失败"; exit 1; } [ -f /etc/letsencrypt/live/guanghulab.com/fullchain.pem ] && echo "✅ SSL OK" || { echo "❌ SSL 证书不存在"; exit 1; } MAIN=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/) [ "$MAIN" = "200" ] && echo "✅ 主站 OK" || { echo "❌ 主站异常 HTTP $MAIN"; exit 1; } echo "===== ✅ 前置全部通过 =====" ``` ## S2-2 · 创建沙箱目录 ```bash #!/bin/bash mkdir -p /var/www/sandbox for ID in dev-002 dev-004 dev-005 dev-009 dev-010 dev-011 dev-012 dev-013 dev-014; do mkdir -p /var/www/sandbox/$ID cat > /var/www/sandbox/$ID/index.html << 'EOF' 开发者沙箱

🏗️ 开发者沙箱

子域名已激活 · 等待项目部署

✅ DNS + SSL + Nginx 就绪

EOF echo "✅ /var/www/sandbox/$ID 已创建" done chown -R root:root /var/www/sandbox && chmod -R 755 /var/www/sandbox ``` ## S2-3 · 部署 Nginx 子域名配置 ```bash #!/bin/bash # Step 1: 备份 BK="/etc/nginx/conf.d/backup-$(date +%Y%m%d%H%M%S)" mkdir -p "$BK" && cp -a /etc/nginx/conf.d/*.conf "$BK/" 2>/dev/null echo "✅ 已备份到 $BK" # Step 2: 写入 dev-sandbox.conf cat > /etc/nginx/conf.d/dev-sandbox.conf << 'CONF' # 开发者子域名沙箱 · ZY-AGEOS-TOWER-2026-0326-001-S1 # 铸渊统一管理 · 人类不得手动修改 server { listen 80; server_name ~^(?dev-\d{3})\.guanghulab\.com$; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name ~^(?dev-\d{3})\.guanghulab\.com$; ssl_certificate /etc/letsencrypt/live/guanghulab.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/guanghulab.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; root /var/www/sandbox/$devid; index index.html; location / { try_files $uri $uri/ /index.html; } add_header X-Sandbox-DevId $devid; access_log /var/log/nginx/sandbox-$devid-access.log; error_log /var/log/nginx/sandbox-error.log; } CONF echo "✅ dev-sandbox.conf 已写入" # Step 3: 语法检测(安全门) nginx -t 2>&1 if [ $? -ne 0 ]; then echo "❌ nginx -t 失败!回滚!" rm -f /etc/nginx/conf.d/dev-sandbox.conf cp -a "$BK/"*.conf /etc/nginx/conf.d/ 2>/dev/null exit 1 fi echo "✅ nginx -t 通过" # Step 4: 优雅重载 nginx -s reload && echo "✅ nginx reload 成功" # Step 5: 立即验证主站 MAIN=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/) if [ "$MAIN" != "200" ]; then echo "🚨 主站异常 HTTP $MAIN!紧急回滚!" rm -f /etc/nginx/conf.d/dev-sandbox.conf cp -a "$BK/"*.conf /etc/nginx/conf.d/ 2>/dev/null nginx -t && nginx -s reload exit 1 fi echo "✅ 主站安全 HTTP $MAIN" ``` **S2 完成标准**:沙箱目录已创建,nginx 已重载,主站安全验证通过。 --- # Phase S3 · 全链路冒烟测试 ```bash #!/bin/bash echo "===== 全链路冒烟测试 =====" # 主站安全(首检) curl -so/dev/null -w"主站: HTTP %{http_code}\n" --max-time 10 https://guanghulab.com/ # 子域名逐个测试 for ID in dev-002 dev-004 dev-005 dev-010; do echo "--- $ID.guanghulab.com ---" curl -so/dev/null -w" HTTPS: %{http_code}\n" --max-time 10 https://$ID.guanghulab.com/ curl -so/dev/null -w" HTTP->HTTPS: %{http_code}\n" -L --max-time 10 http://$ID.guanghulab.com/ echo | openssl s_client -servername $ID.guanghulab.com -connect $ID.guanghulab.com:443 2>/dev/null | grep 'subject=' done # 沙箱隔离验证 curl -so/dev/null -w"路径穿越: HTTP %{http_code}\n" --max-time 10 "https://dev-004.guanghulab.com/../../dev-002/index.html" # 主站安全(尾检) curl -so/dev/null -w"主站尾检: HTTP %{http_code}\n" --max-time 10 https://guanghulab.com/ echo "===== 完成 =====" ``` **判定标准**: - 主站 200 + 子域名 HTTPS 200 + HTTP→3xx + SSL正确 + 隔离有效 → **PASS** - 主站异常 → **立即回滚** - 部分子域名失败 → 检查沙箱目录,三次修复闭环 **S3 完成标准**:主站首尾双检通过,子域名 HTTPS + 跳转 + SSL + 隔离全部验证。 --- # Phase S4 · 天眼部署后扫描 + 全局状态同步 ### 天眼部署后扫描 - [ ] 重新运行 Guard 全局扫描,确认部署未引入新问题 - [ ] 检查 Nginx 错误日志有无新增异常 - [ ] 扫描结果写入 `signal-log/skyeye-post-deploy-S1.json` ### GitHub 侧同步 - [ ] `memory.json` 更新:`subdomain_sandbox: "active"` - [ ] `dev-status.json` 添加子域名状态字段 - [ ] `signal-log/` 写入完整部署报告 ### Notion 侧同步 - [ ] 更新运行日志:子域名沙箱系统已上线 - [ ] 通知 DEV-002 肥猫:[dev-002.guanghulab.com](http://dev-002.guanghulab.com) 已激活 - [ ] 通知 DEV-004 之之:[dev-004.guanghulab.com](http://dev-004.guanghulab.com) 已激活 - [ ] 其他已注册开发者同理通知 ### 清理提醒 - [ ] signal-log 记录:之之在阿里云添加的 `_acme-challenge` TXT 记录可在方便时删除(P3,不阻塞) **S4 完成标准**:天眼扫描无新增 RED,GitHub + Notion 双端状态已同步,开发者已通知。 --- # Phase S5 · SYSLOG 回执 ```json { "syslog_id": "ZY-AGEOS-TOWER-2026-0326-001-S1-RECEIPT", "parent": "ZY-AGEOS-TOWER-2026-0326-001", "executor": "AG-ZY-01", "results": { "S0_skyeye_boot": { "status": "pending", "red_alerts": 0 }, "S1_membrane_audit": { "status": "pending", "branch_protection": "pending" }, "S1.5_pipeline_fix": { "status": "pending", "syslog_pipeline_fixed": false }, "S2_server_deploy": { "dns": "pending", "ssl": "pending", "nginx_deployed": false, "main_site_safe": "pending" }, "S3_smoke_test": { "subdomains_pass": "pending", "isolation_verified": "pending" }, "S4_sync": { "notion_synced": false, "github_synced": false, "devs_notified": false } }, "merge_membrane": { "all_via_pr": true, "skyeye_passed": true, "no_direct_push": true }, "main_site_impact": "NONE" } ``` 写回路径: 1. `signal-log/syslog-ageos-tower-S1-20260326.json` 2. Notion 运行日志 3. 任何 Phase 失败 → 三次修复闭环 → 三次失败则创建 P0 工单 + 邮件告警 ---