auto backup 2026-08-13 22:00
This commit is contained in:
@@ -271,8 +271,7 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 32768,
|
"maxTokens": 32768
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "deepseek-v4-pro",
|
"id": "deepseek-v4-pro",
|
||||||
@@ -288,8 +287,7 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 32768,
|
"maxTokens": 32768
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "deepseek-v4-flash",
|
"id": "deepseek-v4-flash",
|
||||||
@@ -305,8 +303,7 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 8192,
|
"maxTokens": 8192
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "glm-5.1",
|
"id": "glm-5.1",
|
||||||
@@ -323,8 +320,7 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 32768,
|
"maxTokens": 32768
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "kim-k2.6",
|
"id": "kim-k2.6",
|
||||||
@@ -340,8 +336,7 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 32768,
|
"maxTokens": 32768
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "qwen3.5-plus",
|
"id": "qwen3.5-plus",
|
||||||
@@ -358,16 +353,53 @@
|
|||||||
"cacheWrite": 0
|
"cacheWrite": 0
|
||||||
},
|
},
|
||||||
"contextWindow": 131072,
|
"contextWindow": 131072,
|
||||||
"maxTokens": 32768,
|
"maxTokens": 32768
|
||||||
"api": "openai-completions"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"openai": {
|
"openai": {
|
||||||
"baseUrl": "http://192.168.2.74:3000/v1",
|
"baseUrl": "http://192.168.2.74:3000/v1",
|
||||||
"apiKey": "sk-vaYyq9RwzyLlvAvHHUXzOTWkbioP76YW58vKuplq2npSkfZr",
|
"apiKey": "sk-vaYyq9RwzyLlvAvHHUXzOTWkbioP76YW58vKuplq2npSkfZr",
|
||||||
|
"api": "openai-completions"
|
||||||
|
},
|
||||||
|
"deepseek": {
|
||||||
|
"baseUrl": "https://api.deepseek.com/v1",
|
||||||
|
"apiKey": "sk-893b90b270ad4697a0b0b24969964d79",
|
||||||
"api": "openai-completions",
|
"api": "openai-completions",
|
||||||
"models": []
|
"models": [
|
||||||
|
{
|
||||||
|
"id": "deepseek-v4-pro",
|
||||||
|
"name": "DeepSeek V4 Pro",
|
||||||
|
"reasoning": false,
|
||||||
|
"input": [
|
||||||
|
"text"
|
||||||
|
],
|
||||||
|
"cost": {
|
||||||
|
"input": 1,
|
||||||
|
"output": 2,
|
||||||
|
"cacheRead": 0,
|
||||||
|
"cacheWrite": 0
|
||||||
|
},
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxTokens": 384000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "deepseek-v4-flash",
|
||||||
|
"name": "DeepSeek V4 Flash",
|
||||||
|
"reasoning": false,
|
||||||
|
"input": [
|
||||||
|
"text"
|
||||||
|
],
|
||||||
|
"cost": {
|
||||||
|
"input": 1,
|
||||||
|
"output": 2,
|
||||||
|
"cacheRead": 0,
|
||||||
|
"cacheWrite": 0
|
||||||
|
},
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxTokens": 384000
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"generatedBy": "openclaw-plugin-model-catalog-v1",
|
|
||||||
"providers": {
|
|
||||||
"deepseek": {
|
|
||||||
"baseUrl": "https://api.deepseek.com/v1",
|
|
||||||
"models": [
|
|
||||||
{
|
|
||||||
"id": "deepseek-v4-pro",
|
|
||||||
"name": "DeepSeek V4 Pro",
|
|
||||||
"reasoning": false,
|
|
||||||
"input": [
|
|
||||||
"text"
|
|
||||||
],
|
|
||||||
"cost": {
|
|
||||||
"input": 1,
|
|
||||||
"output": 2,
|
|
||||||
"cacheRead": 0,
|
|
||||||
"cacheWrite": 0
|
|
||||||
},
|
|
||||||
"contextWindow": 1000000,
|
|
||||||
"maxTokens": 384000,
|
|
||||||
"api": "openai-completions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "deepseek-v4-flash",
|
|
||||||
"name": "DeepSeek V4 Flash",
|
|
||||||
"reasoning": false,
|
|
||||||
"input": [
|
|
||||||
"text"
|
|
||||||
],
|
|
||||||
"cost": {
|
|
||||||
"input": 1,
|
|
||||||
"output": 2,
|
|
||||||
"cacheRead": 0,
|
|
||||||
"cacheWrite": 0
|
|
||||||
},
|
|
||||||
"contextWindow": 1000000,
|
|
||||||
"maxTokens": 384000,
|
|
||||||
"api": "openai-completions"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api": "openai-completions",
|
|
||||||
"apiKey": "sk-893b90b270ad4697a0b0b24969964d79"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
openclaw-workspace-attestation:v1
|
openclaw-workspace-attestation:v1
|
||||||
2026-08-12T14:58:28.426Z
|
2026-08-12T15:13:35.208Z
|
||||||
|
|||||||
+10
-8
@@ -9,15 +9,17 @@
|
|||||||
- 公网 MySQL:101.34.227.188:3306,readonly,host `%`(可任意来源直连)
|
- 公网 MySQL:101.34.227.188:3306,readonly,host `%`(可任意来源直连)
|
||||||
- 公网 Redis:101.34.227.188:6379(AOF 持久化已支持)
|
- 公网 Redis:101.34.227.188:6379(AOF 持久化已支持)
|
||||||
|
|
||||||
## cc-square Node 轻服务(2026-08 替代 Spring Boot)
|
## cc-square Node 轻服务(2026-08 替代 Spring Boot,已上线)
|
||||||
- 位置:/home/yangxuan/cc-square/server/
|
- 位置:/home/yangxuan/cc-square/server/(VPS 部署:/opt/cc-square,git 项目)
|
||||||
- 架构:前端 → Node(Express) → MySQL(只读) + Redis(点击计数/排行)
|
- 架构:前端 → nginx(/api rewrite) → Node(Express,48080) → MySQL(只读) + Redis(点击/排序)
|
||||||
- 关键:MySQL 仅只读,点击次数只存 Redis(ZINCRBY/ZREVRANGE 纯点击倒序)
|
- 关键:MySQL 仅只读,点击次数只存 Redis(ZINCRBY/ZREVRANGE 纯点击倒序),不落库
|
||||||
- 初始化脚本:npm run init-redis(需先注入 MYSQL_PASSWORD/REDIS_PASSWORD 环境变量)
|
- 初始化脚本:npm run init-redis(需先注入 MYSQL_PASSWORD/REDIS_PASSWORD 环境变量)
|
||||||
- 文档:DEPLOY.md(部署)/ FRONTEND-CHANGES.md(前端改造)
|
- 文档:DEPLOY.md(部署/更新流程)/ FRONTEND-CHANGES.md(前端改造)
|
||||||
- 部署状态(2026-08-12):pm2 运行中,端口 48080,内存 ~45MB,内存占用远低于原 Spring Boot
|
- 部署(2026-08-12 生产生效):pm2 运行于 VPS,端口 48080,内存 ~45MB
|
||||||
- 前端已改造:env.js(baseUrl=/api,走 nginx 反代) + http.js(去认证) + nav.js(/app-api/tab/ → /tab/)
|
- 前端已改造:baseUrl=/api + http.js(去认证) + nav.js(/tab/) + vite dev 代理=本机48080;鉴权已彻底清理(删 auth/token/login/qs)
|
||||||
- 密码:MySQL readonly 密码 135246;Redis 密码 5gynj20J(存放于 server/.env,供 Node 服务启动用)
|
- bookmark 已修复:排除 nav-left,返回 website 字段
|
||||||
|
- 密码:MySQL readonly 135246;Redis 5gynj20J(放 .env 不入 git)
|
||||||
|
- git 工作流:改代码→commit→push→VPS git pull→pm2 restart;禁止 scp 直接改 VPS 生产文件
|
||||||
|
|
||||||
## 工作日志
|
## 工作日志
|
||||||
- 2026-08-12(去 Spring Boot 化 + Node 服务 VPS 部署):memory/2026-08-12.md
|
- 2026-08-12(去 Spring Boot 化 + Node 服务 VPS 部署):memory/2026-08-12.md
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 工作日志 2026-08-12
|
# 工作日志 2026-08-12
|
||||||
|
|
||||||
## 主题:cc-square 去 Spring Boot 化 —— Node 轻服务 + Redis 点击计数
|
## 主题:cc-square 去 Spring Boot 化 —— Node 轻服务 + Redis 点击计数(已上线)
|
||||||
|
|
||||||
### 背景 / 起因
|
### 背景 / 起因
|
||||||
- VPS 内存紧张,需放弃部署重型的 Spring Boot 后端(yudao/ruoyi-vue-pro)
|
- VPS 内存紧张,需放弃部署重型的 Spring Boot 后端(yudao/ruoyi-vue-pro)
|
||||||
@@ -13,73 +13,96 @@
|
|||||||
3. 排序规则:**纯点击倒序**(ZREVRANGE)
|
3. 排序规则:**纯点击倒序**(ZREVRANGE)
|
||||||
4. Node 服务部署在 VPS
|
4. Node 服务部署在 VPS
|
||||||
5. 前端 baseUrl 走 nginx `/api` 反代(rewrite 剥 /api → 48080)
|
5. 前端 baseUrl 走 nginx `/api` 反代(rewrite 剥 /api → 48080)
|
||||||
|
6. 彻底清理前端鉴权(方案 B:删 token/login/userInfo/auth.js/qs)
|
||||||
|
|
||||||
### 最终架构
|
### 最终架构(已上线)
|
||||||
```
|
```
|
||||||
前端(cc-square) → nginx(/api rewrite) → Node(Express, 48080) → MySQL(只读) + Redis(点击/排序)
|
浏览器 → https://www.climbcube.cn(nginx 托管前端 dist)
|
||||||
|
└→ /api/tab/* → nginx(rewrite剥/api) → Node(Express, 48080) → MySQL(只读) + Redis(点击/排序)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 连接凭据确认(已验证)
|
### 连接凭据(已验证)
|
||||||
- 公网 MySQL:`101.34.227.188:3306`,readonly,密码 135246,host `%`(任意来源)
|
- 公网 MySQL:`101.34.227.188:3306`,readonly,密码 135246,host `%`(任意来源)
|
||||||
- 公网 Redis:`101.34.227.188:6379`,密码 5gynj20J,AOF 持久化
|
- 公网 Redis:`101.34.227.188:6379`,密码 5gynj20J,AOF 持久化
|
||||||
- 验证结果:MySQL 连接+查询通(cc_website 212行/cc_engine 23行/cc_website_type 11行)
|
- MySQL 数据:cc_website 212行(启用124)/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 排序
|
||||||
- cc_website_type 分类名为 **title** 列(非 name),且有 order
|
|
||||||
- cc_engine 无 order 列,排序仅按 click
|
|
||||||
|
|
||||||
### 交付物(/home/yangxuan/cc-square/server/)
|
### 交付物(/home/yangxuan/cc-square/server/)
|
||||||
| 文件 | 说明 |
|
| 文件 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| server.js | 主程序:静态托管 + /tab/* 接口 + Redis 计数/排序 |
|
| server.js | 主程序:静态托管 + /tab/* 接口 + Redis 计数/排序 |
|
||||||
| config.js | 配置(支持环境变量)|
|
| config.js | 配置(支持环境变量,不入 git)|
|
||||||
| scripts/init-redis.js | Redis 历史点击导入(幂等)|
|
| scripts/init-redis.js | Redis 历史点击导入(幂等)|
|
||||||
| ecosystem.config.js | pm2 配置 |
|
| ecosystem.config.js | pm2 配置 |
|
||||||
| package.json | 依赖 express/mysql2/redis/axios |
|
| package.json | 依赖 express/mysql2/redis/axios |
|
||||||
| .env.example | 环境变量模板 |
|
| .env.example / .env | 环境变量模板 / 实际密码(.env 不入 git)|
|
||||||
| DEPLOY.md | 部署文档(含完整 pm2 命令)|
|
| DEPLOY.md | 部署文档(含完整 pm2 命令:日志/状态/启停/开机自启)|
|
||||||
| FRONTEND-CHANGES.md | 前端改造说明 |
|
| FRONTEND-CHANGES.md | 前端改造说明 |
|
||||||
| README.md | 服务导航 |
|
| README.md | 服务导航 |
|
||||||
|
|
||||||
### Node 服务接口(全部实测通过)
|
### 接口(全部实测 200)
|
||||||
| 方法 | 路径 | 数据源 |
|
| 方法 | 路径 | 数据源 |
|
||||||
|------|------|--------|
|
|------|------|--------|
|
||||||
| GET | /tab/engine | MySQL cc_engine |
|
| GET | /tab/engine | MySQL cc_engine |
|
||||||
| GET | /tab/bookmark | MySQL cc_website_type 聚合 |
|
| GET | /tab/bookmark | MySQL 聚合(排除 nav-left,字段 website)|
|
||||||
| GET | /tab/menu | MySQL |
|
| GET | /tab/menu | MySQL |
|
||||||
| GET | /tab/quick?limit=N | Redis ZREVRANGE 点击排行 |
|
| GET | /tab/quick?limit=N | Redis ZREVRANGE 点击排行 |
|
||||||
| GET | /tab/list-by-type?typeId=N | MySQL |
|
| GET | /tab/list-by-type?typeId=N | MySQL |
|
||||||
| GET | /tab/searchBookmark?keyword=x | MySQL |
|
| GET | /tab/searchBookmark?keyword=x | MySQL |
|
||||||
| GET | /tab/weather/all | 高德API(未配置key时返回空,优雅降级)|
|
| GET | /tab/weather/all | 高德API(未配 key 返回空降级)|
|
||||||
| POST | /tab/quickCount | Redis ZINCRBY(书签)|
|
| POST | /tab/quickCount | Redis ZINCRBY(书签)|
|
||||||
| POST | /tab/engineCount | Redis ZINCRBY(引擎)|
|
| POST | /tab/engineCount | Redis ZINCRBY(引擎)|
|
||||||
| GET | /health | 健康检查 |
|
| GET | /health | 健康检查 |
|
||||||
|
|
||||||
### 前端改造(已完成)
|
### 前端改造(已完成并 build)
|
||||||
1. `src/config/env.js`:baseUrl 改为 `/api`(nginx 反代)
|
1. `src/config/env.js`:baseUrl 固定 `/api`
|
||||||
2. `src/request/http.js`:重写精简版,去掉 token/key 认证
|
2. `src/request/http.js`:重写精简版(去 token/key 认证,保留 code===0)
|
||||||
3. `src/request/api/nav.js`:`/app-api/tab/` → `/tab/`
|
3. `src/request/api/nav.js`:`/app-api/tab/` → `/tab/`
|
||||||
- 已 build 成功(1720 模块),响应格式兼容原 yudao `{code:0,data,msg}`
|
4. `vite.config.js`:dev 代理 `/api` → 本机 48080(rewrite 剥 /api)
|
||||||
|
5. **方案 B 清理鉴权**:删 auth.js、store 的 token/userInfo/setToken/clearAuth/logout、website.js 的 token/info key、util 的 info 残留、Search.js 登录判断改"添加引擎"提示、package.json 移除 qs
|
||||||
|
- 构建成功,dist 无鉴权代码,主 JS 变小(index 5.92→5.64kB)
|
||||||
|
|
||||||
### 部署状态
|
### bookmark 字段修复(重要)
|
||||||
- **本机(xuan-main)**:Node 服务 pm2 跑通验证(48080),接口全通
|
- 前端 Bookmark/index.vue 渲染 `item.website`,初版 Node 返回 `list` → 书签不展示
|
||||||
- **VPS(xuan-vps / 101.34.227.188)**:
|
- 修复:server.js bookmark 接口 `list` → `website`
|
||||||
- 已备份旧前端 → `/usr/share/nginx/html.bak.20260812`
|
- 并排除 nav-left(and yudao 原逻辑:title!='nav-left' and status=0),只保留有书签的分类
|
||||||
- apt 装 Node v22.23.1 + pm2 7.0.3(用户手动装)
|
|
||||||
- server 代码在 `/opt/cc-square-server/`,npm install 完成(104 包)
|
### 部署状态(已完成,生产生效)
|
||||||
- `.env` 已建(含密码,600 权限)
|
- **本机(xuan-main)**:Node pm2 跑通,dev 环境 vite(5173) 代理正常
|
||||||
|
- **VPS(xuan-vps / 101.34.227.188,Debian 12)**:
|
||||||
|
- Node v22.23.1 + pm2 7.0.3(已装)
|
||||||
|
- 项目 git clone 在 `/opt/cc-square`(gitee: xuan-java/cc-square)
|
||||||
|
- Node 服务 pm2 运行,脚本 `/opt/cc-square/server/server.js`,端口 48080,内存 ~45MB
|
||||||
|
- `.env` + `config.js` 在 `/opt/cc-square/server/`(config.js 需手动补,不入 git)
|
||||||
|
- 旧目录 `/opt/cc-square-server` 已删/不用,统一 `/opt/cc-square`
|
||||||
|
- 前端 dist 已部署 `/usr/share/nginx/html`(保留 admin/ariang/tools 子目录)
|
||||||
|
- 备份:`/usr/share/nginx/html.bak.20260812` 和 `htmlbak-cc-20260812.tar.gz`
|
||||||
- Redis 已初始化(120 书签 / 3 引擎)
|
- Redis 已初始化(120 书签 / 3 引擎)
|
||||||
- **Node 服务启动 + 前端 dist 替换由用户手动完成**
|
- **nginx**:主站 climbcube.conf `location /api { rewrite ^/api(.*)$ $1 break; proxy_pass http://localhost:48080; }`
|
||||||
- **nginx**:主站 climbcube.conf 已有 `/api` 反代 → `rewrite ^/api(.*)$ $1 break; proxy_pass http://localhost:48080;`
|
- apiadmin→8080, yudaoapi→内网192.168.195.185:48080(旧配置保留)
|
||||||
- 前端静态目录:`/usr/share/nginx/html`(index.html 即 cc-square 导航页)
|
|
||||||
|
|
||||||
### 待办 / 遗留
|
### 验证结果(生产外网)
|
||||||
- [ ] VPS 上启动 Node 服务(用户手动):pm2 start ecosystem.config.js
|
- `https://www.climbcube.cn/` → 200,前端正常
|
||||||
- [ ] VPS 替换前端 dist 至 /usr/share/nginx/html(用户手动)
|
- `https://www.climbcube.cn/api/tab/{engine,bookmark,menu,quick}` → 全 200
|
||||||
- [ ] 前端 baseUrl 需为 /api(本机已改,dist 需重新 build 后上传)
|
- bookmark 返回 8 个真实分类(资源15/AI5/文档20/国家站点5/学习11/工具22/工作台25/办公15),无 nav-left
|
||||||
- [ ] 天气接口需高德 key
|
|
||||||
- [ ] 安全建议:readonly host `%` 建议收窄(需用户确认)
|
### git 工作流约定(避免再冲突)
|
||||||
|
- 统一走 git:本机 commit→push → VPS `git pull` → pm2 restart
|
||||||
|
- **禁止直接 scp 覆盖 VPS 生产文件**(会绕过 git 产生冲突)
|
||||||
|
- 本次冲突解决:git checkout -- server.js(内容与远端一致)+ pull fast-forward
|
||||||
|
|
||||||
|
### 更新生效规则
|
||||||
|
- 改 server.js/config.js → `pm2 restart cc-square`
|
||||||
|
- 改 package.json 依赖 → `npm install` + restart
|
||||||
|
- 改前端 src/* → `npm run build` + 部署 dist 到 nginx
|
||||||
|
- 改 .env → `set -a && source .env` + restart
|
||||||
|
|
||||||
|
### 遗留 / 待办
|
||||||
|
- [ ] 天气接口需高德 key(amapKey 占位,未启用)
|
||||||
|
- [ ] 安全建议:readonly host `%` 建议收窄(需用户确认后执行)
|
||||||
|
- [ ] 前端 dist 已部署,但 git 仓库 /usr/share/nginx/html 与 /opt/cc-square 前端源码的关系需注意(dist 不入 git?待确认)
|
||||||
|
|
||||||
### 环境备注
|
### 环境备注
|
||||||
- 本机 shell 是 zsh(注意 pkill/zsh 通配符坑)
|
- 本机 shell 是 zsh(注意 pkill/zsh 通配符坑;ssh 到 VPS 时 pm2/curl 需绝对路径或 export PATH)
|
||||||
- VPS 是 Debian 12,内存 3.7G,磁盘 69G/32G 已用
|
- VPS 内存 3.7G,磁盘 69G/32G 已用
|
||||||
- VPS 上多处是 debian 用户属主(/usr/share/nginx/html, /opt/cc-square-server)
|
- VPS 多文件 debian 属主;Node 服务 root 运行(pm2)
|
||||||
|
|||||||
Reference in New Issue
Block a user