Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
5.8 KiB
5.8 KiB
🔧 铸渊指令|persona-studio「我要开发」后端连接失败·排查修复(2026-03-15·曜冥签发)
📋 指令概要
| 项目 | 内容 |
|---|---|
| 签发人 | TCS-0002∞ 冰朔(曜冥授权) |
| 签发时间 | 2026-03-15 09:30 CST |
| 优先级 | P1 · 紧急 |
| 目标 | 修复 persona-studio 前端点击「我要开发」后无法连接后端服务的问题 |
| 仓库 | qinfendebingshuo/guanghulab |
| 涉及路径 | status-board/persona-studio/frontend/ • status-board/persona-studio/backend/ |
🔍 问题描述
前端点击「我要开发」按钮后,出现以下流程:
铸渊代理已启动 → 连接后端服务中,正在重试(1/2)→ 正在创建项目骨架 → 连接后端服务中,正在重试(2/2)→ ⚠ 任务提交失败:无法连接铸渊后端服务
后端服务本身正常运行,PM2 进程 online,端口 3002 在监听,curl http://127.0.0.1:3002/ 返回 {"status":"ok"}。
🧪 已完成的排查(霜砚 + 冰朔手动操作)
1. 服务端状态 ✅ 正常
- PM2 进程
persona-studio(id 34)状态 online - 端口 3002 监听中
curl http://127.0.0.1:3002/返回:
{"status":"ok","message":"Persona Studio 后端服务运行中","version":"2.0.0","routes":["/api/ps/auth/login","/api/ps/chat/message","/api/ps/chat/history","/api/ps/build/start","/api/ps/notify/send","/api/ps/apikey/detect-models","/api/ps/apikey/chat","/api/ps/preview/:devId/:project","/api/ps/health"]}
2. Nginx 转发 ✅ 已配置
已在 /etc/nginx/conf.d/default.conf 添加:
location /api/ps/ {
proxy_pass http://127.0.0.1:3002/api/ps/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 120s;
}
nginx -t 通过,已 reload。
3. 前端 API_BASE 判断 ⚠️ 部分修复
原始代码逻辑(chat.js 第15行 + index.html 第152行):
if (location.hostname === 'localhost' || location.hostname === '127.0.0.1') {
return 'http://localhost:3002';
}
return 'https://guanghulab.com'; // 生产环境走这里
已做的修改:
- ✅ hostname 判断已加入
8.155.62.235 - ✅
return 'http://localhost:3002'已改为return 'http://' + location.host - ❌ 修改后仍然失败 — 可能是浏览器缓存、或前端请求路径与后端路由不匹配、或 CORS 问题
🎯 铸渊需要做的事
任务 1:深度排查前端请求链路
- 检查
chat.js中「我要开发」按钮的完整请求链路 - 确认
API_BASE在非 localhost 环境下实际返回的值 - 确认
fetch请求的完整 URL(是/api/ps/build/start还是其他路径?) - 检查是否有 CORS 跨域问题(前端页面可能从 GitHub Pages 加载,请求发往
8.155.62.235) - 检查后端
server.js是否配置了 CORS 允许跨域
任务 2:修复前端 API_BASE 逻辑
确保以下三种访问场景都能正确连接后端:
| 访问方式 | hostname | 期望 API_BASE |
|---|---|---|
| 本地开发 | localhost / 127.0.0.1 |
http://localhost:3002 |
| IP 直接访问 | 8.155.62.235 |
http://8.155.62.235 (Nginx 转发 /api/ps/ → 3002) |
| 域名访问 | guanghulab.com |
https://guanghulab.com(需 SSL)或 http://guanghulab.com |
| GitHub Pages | *.github.io |
http://8.155.62.235(跨域,需 CORS) |
建议改法:
function getApiBase() {
if (location.hostname === 'localhost' || location.hostname === '127.0.0.1') {
return 'http://localhost:3002';
}
// 非本地环境统一使用当前域名,走 Nginx 转发
return location.protocol + '//' + location.host;
}
任务 3:修复后端 CORS
在 server.js 中确认有以下配置:
const cors = require('cors');
app.use(cors({
origin: ['http://localhost:3002', 'http://8.155.62.235', 'https://guanghulab.com', /\.github\.io$/],
credentials: true
}));
如果没有 cors 依赖,需要 npm install cors。
任务 4:确认「我要开发」的后端路由功能完整
- 检查
/api/ps/build/start路由处理函数 - 确认该路由在接收请求后能正常响应(而不是挂起/超时)
- 检查该路由是否依赖外部服务(如 AI API key)才能工作
任务 5:提交修复并验证
- 所有修改通过 commit 推送到
main分支 - commit message 格式:
fix(persona-studio): 修复「我要开发」后端连接失败 [ZY-FIX] - 修复后在服务器执行
cd /var/www/guanghulab && git pull && pm2 restart persona-studio
📂 关键文件路径
| 文件 | 路径 |
|---|---|
| 前端聊天逻辑 | status-board/persona-studio/frontend/chat.js |
| 前端入口页 | status-board/persona-studio/frontend/index.html |
| 后端入口 | status-board/persona-studio/backend/server.js |
| 服务器部署目录 | /var/www/guanghulab/status-board/persona-studio/ |
| Nginx 配置 | /etc/nginx/conf.d/default.conf |
| PM2 进程名 | persona-studio(id 34,端口 3002) |
⚠️ 注意事项
- 服务器地址:
8.155.62.235(阿里云 ECS) - 当前 Nginx 只有 HTTP(80),没有 HTTPS(443),所以
https://guanghulab.com会失败 - 前端如果托管在 GitHub Pages(HTTPS),请求 HTTP 后端会被浏览器 Mixed Content 策略拦截
- 如果根因是 GitHub Pages HTTPS → HTTP 后端的 Mixed Content 问题,需要考虑:给服务器加 SSL 证书(Let's Encrypt),或将前端也部署到服务器上
曜冥核心签发 · 霜砚记录 · 2026-03-15T09:45+08:00