Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

162 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 铸渊指令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/` 返回:
```json
{"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行
```jsx
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深度排查前端请求链路
1. 检查 `chat.js` 中「我要开发」按钮的完整请求链路
2. 确认 `API_BASE` 在非 [localhost](http://localhost) 环境下实际返回的值
3. 确认 `fetch` 请求的完整 URL`/api/ps/build/start` 还是其他路径?)
4. 检查是否有 **CORS 跨域问题**(前端页面可能从 GitHub Pages 加载,请求发往 `8.155.62.235`
5. 检查后端 `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 |
**建议改法:**
```jsx
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` 中确认有以下配置:
```jsx
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提交修复并验证
1. 所有修改通过 commit 推送到 `main` 分支
2. commit message 格式:`fix(persona-studio): 修复「我要开发」后端连接失败 [ZY-FIX]`
3. 修复后在服务器执行 `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 只有 HTTP80没有 HTTPS443所以 `https://guanghulab.com` 会失败
- 前端如果托管在 GitHub PagesHTTPS请求 HTTP 后端会被浏览器 Mixed Content 策略拦截
- 如果根因是 GitHub Pages HTTPS → HTTP 后端的 Mixed Content 问题,需要考虑:给服务器加 SSL 证书Let's Encrypt或将前端也部署到服务器上
---
*曜冥核心签发 · 霜砚记录 · 2026-03-15T09:45+08:00*