工作日志 2026-08-12
主题:cc-square 去 Spring Boot 化 —— Node 轻服务 + Redis 点击计数
背景 / 起因
- VPS 内存紧张,需放弃部署重型的 Spring Boot 后端(yudao/ruoyi-vue-pro)
- 前端需改造为"独立查询数据"形式
- 书签排序需要"访问次数"记录
关键决策(用户确认)
- 点击次数只存 Redis,不落 MySQL
- Redis 启用持久化(VPS Redis 已支持 AOF)
- 排序规则:纯点击倒序(ZREVRANGE)
- Node 服务部署在 VPS
- 前端 baseUrl 走 nginx
/api 反代(rewrite 剥 /api → 48080)
最终架构
连接凭据确认(已验证)
- 公网 MySQL:
101.34.227.188:3306,readonly,密码 135246,host %(任意来源)
- 公网 Redis:
101.34.227.188:6379,密码 5gynj20J,AOF 持久化
- 验证结果:MySQL 连接+查询通(cc_website 212行/cc_engine 23行/cc_website_type 11行)
- cc_website 启用 124 条;字段:id/status/type_id/title/click/order/icon/url/description...
- cc_website_type 分类名为 title 列(非 name),且有 order
- cc_engine 无 order 列,排序仅按 click
交付物(/home/yangxuan/cc-square/server/)
| 文件 |
说明 |
| server.js |
主程序:静态托管 + /tab/* 接口 + Redis 计数/排序 |
| config.js |
配置(支持环境变量) |
| scripts/init-redis.js |
Redis 历史点击导入(幂等) |
| ecosystem.config.js |
pm2 配置 |
| package.json |
依赖 express/mysql2/redis/axios |
| .env.example |
环境变量模板 |
| DEPLOY.md |
部署文档(含完整 pm2 命令) |
| FRONTEND-CHANGES.md |
前端改造说明 |
| README.md |
服务导航 |
Node 服务接口(全部实测通过)
| 方法 |
路径 |
数据源 |
| GET |
/tab/engine |
MySQL cc_engine |
| GET |
/tab/bookmark |
MySQL cc_website_type 聚合 |
| GET |
/tab/menu |
MySQL |
| GET |
/tab/quick?limit=N |
Redis ZREVRANGE 点击排行 |
| GET |
/tab/list-by-type?typeId=N |
MySQL |
| GET |
/tab/searchBookmark?keyword=x |
MySQL |
| GET |
/tab/weather/all |
高德API(未配置key时返回空,优雅降级) |
| POST |
/tab/quickCount |
Redis ZINCRBY(书签) |
| POST |
/tab/engineCount |
Redis ZINCRBY(引擎) |
| GET |
/health |
健康检查 |
前端改造(已完成)
src/config/env.js:baseUrl 改为 /api(nginx 反代)
src/request/http.js:重写精简版,去掉 token/key 认证
src/request/api/nav.js:/app-api/tab/ → /tab/
- 已 build 成功(1720 模块),响应格式兼容原 yudao
{code:0,data,msg}
部署状态
- 本机(xuan-main):Node 服务 pm2 跑通验证(48080),接口全通
- VPS(xuan-vps / 101.34.227.188):
- 已备份旧前端 →
/usr/share/nginx/html.bak.20260812
- apt 装 Node v22.23.1 + pm2 7.0.3(用户手动装)
- server 代码在
/opt/cc-square-server/,npm install 完成(104 包)
.env 已建(含密码,600 权限)
- Redis 已初始化(120 书签 / 3 引擎)
- Node 服务启动 + 前端 dist 替换由用户手动完成
- nginx:主站 climbcube.conf 已有
/api 反代 → rewrite ^/api(.*)$ $1 break; proxy_pass http://localhost:48080;
- 前端静态目录:
/usr/share/nginx/html(index.html 即 cc-square 导航页)
待办 / 遗留
环境备注
- 本机 shell 是 zsh(注意 pkill/zsh 通配符坑)
- VPS 是 Debian 12,内存 3.7G,磁盘 69G/32G 已用
- VPS 上多处是 debian 用户属主(/usr/share/nginx/html, /opt/cc-square-server)