6.5 KiB
6.5 KiB
项目交接说明
更新时间:2026-03-18
项目根目录:/Users/mac/Documents/my_site
1. 项目概况
这是一个前后端分离的个人门户项目:
- 前端:
front/ - 后端:
backend/ - 线上主站:
https://yoyuzh.xyz - 线上 API:
https://api.yoyuzh.xyz
主要功能:
- 登录 / 注册
- 网盘文件列表与最近文件
- 教务相关接口(课表 / 成绩)
2. 当前线上架构
当前建议保持的生产架构是:
yoyuzh.xyz:继续走 OSS / ESA,负责静态站点api.yoyuzh.xyz:直接指向后端服务器,不要继续走 ESA 代理
原因:
- 主站静态资源走 ESA 没问题
- API 一旦走 ESA,之前出现过:
525 Origin SSL Handshake ErrorERR_CONNECTION_CLOSEDERR_EMPTY_RESPONSE
- 当前最稳方案是“静态站加速,API 直连”
3. 当前前端生产配置
文件:
front/.env.production
当前应保持为:
VITE_API_BASE_URL="https://api.yoyuzh.xyz/api"
VITE_ROUTER_MODE="hash"
VITE_ENABLE_DEV_LOGIN="false"
说明:
- 不要再切回同域
/api,除非以后重新正确配置边缘转发 - 目前生产前端已经恢复为直连
api.yoyuzh.xyz
4. 当前已完成的前端改动
4.1 登录页
front/src/pages/Login.tsx
- 已替换为模板版登录 / 注册页
- 登录调用:
POST /auth/login - 注册调用:
POST /auth/register - 登录成功后写入 session 并跳转
/overview
4.2 网络错误处理
front/src/lib/api.ts
- 对网络错误统一包装为更清晰的前端错误
- 登录和只读接口有轻量重试机制
- 当前策略是“尽量兜底,但不要把登录拖到 7-8 秒”
4.3 登录成功与总览初始化失败拆分提示
相关文件:
front/src/lib/session.tsfront/src/pages/Overview.tsxfront/src/pages/overview-state.ts
已做:
- 登录成功后会标记一次“post-login pending”
/overview初始化失败时,会提示“登录已成功,但总览加载失败”- 避免把 overview 并发初始化失败误判成登录失败
5. 当前后端与服务器状态
通过 SSH 已确认:
my-site-api.service正常运行- 后端本机
127.0.0.1:8080正常 - 服务器本机直打登录接口返回
200 - Nginx 正常反代
api.yoyuzh.xyz -> 127.0.0.1:8080
服务器上关键配置:
- Nginx:
/etc/nginx/sites-enabled/my-site-api - 后端配置:
/opt/yoyuzh/application-prod.yml - 服务名:
my-site-api.service
6. 线上排查结论
6.1 已确认不是后端业务慢
在服务器本机测试结果:
POST http://127.0.0.1:8080/api/auth/login约95msPOST https://api.yoyuzh.xyz/api/auth/login从服务器发起约681ms
所以:
- 后端本身不是“登录 5 秒”的根因
6.2 之前登录很慢的主要原因
更像是以下问题叠加:
- 旧 DNS / 旧代理链路未收敛
- API 域名曾被 ESA 代理,导致 TLS / 回源问题
- 浏览器前链路偶发
ERR_CONNECTION_CLOSED
6.3 当前更可信的状态
服务器日志已经看到真实浏览器请求成功:
OPTIONS /api/auth/login=>200POST /api/auth/login=>200/api/user/profile=>200/api/files/recent=>200/api/files/list=>200/api/cqu/*=>200
因此:
- 现在如果仍有个别客户端不稳定,优先怀疑本地 DNS / 浏览器缓存 / 本地网络链路
7. DNS / ESA 方面的重要结论
7.1 过去踩过的坑
不要再轻易做下面这件事:
- 让
yoyuzh.xyz/api/*通过 ESA 回源到 API
之前已经明确踩到:
/api/*误回 OSS,报403 NonCnameForbidden- 回源 HTTPS 握手失败,报
525 Origin SSL Handshake Error
7.2 当前建议
yoyuzh.xyz:可以继续 ESAapi.yoyuzh.xyz:不要走 ESA 代理
7.3 用户侧现象
曾出现:
- 无痕模式能登录
- 本机
dig还查到旧的198.18.0.148
这说明某一阶段存在 DNS 传播不一致。
如果下一个 Codex 遇到“浏览器能用,命令行不行”的情况,先查 DNS 链路,不要直接改代码。
8. OSS 前端部署方式
已经写好自动部署脚本:
scripts/deploy-front-oss.mjs- 配套库:
scripts/oss-deploy-lib.mjs - 配置模板:
.env.oss.example
8.1 本地使用方式
先准备:
cp .env.oss.example .env.oss.local
然后填入 OSS 参数。
8.2 发布命令
./scripts/deploy-front-oss.mjs
8.3 只看将要上传什么
./scripts/deploy-front-oss.mjs --skip-build --dry-run
8.4 部署逻辑
脚本会:
- 读取
.env.oss.local - 构建
front/dist - 上传到 OSS
- 自动设置缓存头
缓存策略:
index.html=>no-cacheassets/*=>public,max-age=31536000,immutable
9. 测试账号
开发测试账号文档:
开发测试账号.md
常用账号:
portal-demo / portal123456
注意:
- 这些开发账号只在特定环境下才会自动初始化
- 如果线上账号密码不对,不要默认认为后端坏了
10. SSH 与敏感信息
有 SSH 凭据文件:
账号密码.txt
下一个 Codex 可以读取该文件用于 SSH,但不要在普通交互回复里直接回显其中的明文密码。
11. 推荐的排查顺序
如果后续又出现“登录失败 / 网络连接异常”,按这个顺序排:
-
先查前端当前生产包是否正确
- 看
https://yoyuzh.xyz/的index.html - 确认引用的是最新构建产物
- 看
-
再查 API 域名是否直连服务器
dig +short api.yoyuzh.xyzcurl -vkI https://api.yoyuzh.xyz/
-
再查服务器本机和 systemd
systemctl status my-site-apicurl http://127.0.0.1:8080/...
-
最后查 Nginx access/error log
/var/log/nginx/access.log/var/log/nginx/error.log
不要上来就改前端逻辑。
12. 当前最重要的改进建议
短期建议
- 保持 API 直连,不再给
api.yoyuzh.xyz套 ESA - 用现有自动部署脚本发布前端
中期建议
- 给后端加一个明确的健康检查接口,比如
/api/healthz - 给 Nginx access log 加 upstream timing 和 request id
长期建议
- 如果未来还想做同域
/api,要单独做一轮边缘转发设计 - 先确保:
- 源站类型正确
- 不会回 OSS
- 不会再发生
525
13. 给下一个 Codex 的一句话总结
当前项目已经从“链路混乱”恢复到“后端基本正常、主站正常、前端直连 API”的状态。
接手时优先维持现状,不要贸然重新启用 ESA 的 /api 回源方案。