From 5ce3e77932652f8967bf9cf2e33f14def671903c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E7=8A=80=E9=BA=9F?= Date: Wed, 26 Aug 2026 22:23:56 +0800 Subject: [PATCH] =?UTF-8?q?LOG:=20=E8=AE=B0=E5=BD=95=20RBAC=20=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E8=B0=83=E6=95=B4=EF=BC=88=E7=A7=BB=E9=99=A4=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E7=AE=A1=E7=90=86=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=AE=A1=E7=90=86=E3=80=81TDesign=20?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .workbuddy/memory/2026-08-26.md | 1 + .workbuddy/memory/MEMORY.md | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/.workbuddy/memory/2026-08-26.md b/.workbuddy/memory/2026-08-26.md index 3eb751b..60356c0 100644 --- a/.workbuddy/memory/2026-08-26.md +++ b/.workbuddy/memory/2026-08-26.md @@ -1,5 +1,6 @@ # 2026-08-26 +- DEP | service.xpcool.com + admin.xpcool.com 生产部署上线(腾讯云 193.112.118.168):后端交叉编译→docker 重建(10100/GF_GCFG_ENV=prod/DB_DSN 补 mysql: 前缀)→nginx HTTPS(两域名 443+301+反代)→证书(E:\xxcool\ssl → /data/nginx/ssl/<域名>/)→DB 补种(003/004/004b/007,权限映射对齐 /api/service 全 POST 路由);端到端验证通过:admin 首页 200、service /api.json 200、同源登录返回 token。部署要点:①容器内须有 config.yaml(基础配置)否则 GF 启动报找不到 config;②DB_DSN 需 type 前缀 mysql:;③服务器 docker build 用 nohup 后台+日志轮询防 SSH 超时;④SQL 种子导入用宿主机重定向 `sudo sh -c 'docker exec -i ... < file'`。pnpm 修复:装到 `~/.workbuddy/binaries/node/workspace` 后 `node ` 调用(比 npm exec 稳)。 - FIX | RBAC 安全漏洞修复(service.xpcool.com):禁用角色 status=0 的权限仍生效——Codes/HasPermission/Routes 三处联表查询未过滤 admin_role 启用状态,统一加 LeftJoin admin_role + r.status=1;opuser 回归验证 codes 空/routes 空/接口 403,admin 全链路通过。 - REQ | 完成 admin.xpcool.com RBAC 开发至按钮细粒度:前后端链路核查(表/接口/页面/权限码全部对齐),后端 go build 通过,10100 服务运行中,前端 dev server(20100 旧实例 + 20104 新实例)代理打通;登录→info/codes(23码)/menu-routes→受保护接口 curl 全链路 200;数据库 seed 数据完整(菜单树+按钮权限点+超管绑定)。 - CFG | 修复 GoLand 直接 Run 报「找不到 config.yaml」(GF 默认找无 env 后缀的 config.yaml,项目只有 config.dev.yaml):新增 `.run/service-dev.run.xml`(GoLand 项目级运行配置,内置 GF_GCFG_FILE=config.dev.yaml + DB_DSN + JWT_SECRET);`.run/` 加 .gitignore(含口令);README 补 Local startup 两方式(终端 source .env.dev / GoLand 选 service-dev 配置);已停掉联调用的临时后端释放 10100。 diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index 53eba30..fd8b318 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -39,6 +39,14 @@ 3. 处理后于 CHANGELOG 顶部追加本次记录。 4. 新增项目时同步更新上方索引表。 +## 生产部署(腾讯云 193.112.118.168,SSH 22025/xxcool,Docker+宿主机 Nginx) +- 站点落点:前端静态 → `/data/www/<域名>/`;nginx 配置 → `/data/nginx/conf.d/<域名>.conf`(80→301→443 + 反代/静态);证书 → `/data/nginx/ssl/<域名>/<域名>_bundle.crt|.key`(本地源:`E:\xxcool\ssl\<域名>_nginx/`)。 +- service 后端容器:`service.xpcool.com:new`,`127.0.0.1:10100:10100`,网络 `xpcool-net`,env:`GF_GCFG_ENV=prod` + `DB_DSN=mysql:service:xxx@tcp(xpcool-mysql:3306)/service?...`(**必须带 mysql: 类型前缀**)+ `JWT_SECRET`;容器内必须有 `manifest/config/config.yaml`(基础配置),否则 GF 启动报「找不到 config」;构建目录 `/data/deploy/projects/service.xpcool.com/`(main + manifest/config + resource,Dockerfile 用 COPY manifest/config 整体拷贝)。 +- DB:`xpcool-mysql` 容器(root 密码见该容器 env),库名 `service`,种子执行顺序 003→004→004b→007(服务器表结构旧,必须先 003 加列;导入用 `sudo sh -c 'docker exec -i xpcool-mysql mysql ... < file'` 宿主机重定向)。 +- 权限映射:admin_menu type=2 行的 path 必须匹配实际路由(现为 `POST /api/service/admin/...`,见 manifest/sql/007_menu_permissions_v3.sql)。 +- SSH 凭据/密码不入库,需要时询问用户或查对话记忆;远程批量命令用 paramiko 脚本(`%TEMP%\wb_deploy\ssh_exec.py`,支持第 2 参数超时秒数),docker build 用服务器端 nohup+日志轮询防超时。 +- 本地 pnpm 修复:corepack shim 损坏,用 `node <~/.workbuddy/binaries/node/workspace/node_modules/pnpm/bin/pnpm.cjs>` 调用(需 NODE_OPTIONS=--experimental-sqlite)。 + ## 日常同步习惯(建议) - 每次工作结束:在各改动项目 `git add + commit + push`,本工作空间同样提交(规则/日志变化时)。 - 换设备开工前:先 `git pull` 各仓库,保证规则与记录最新。