workbuddy.xpcool.com/.workbuddy/memory/2026-08-27.md

17 KiB
Raw Permalink Blame History

2026-08-27 工作日志

  • 2026-08-27 | FEAT | 登录/登出/超时前后端联调完成:修当日再现的登录 500启动漏注入 env→ injectEnv 开发兜底(${DB_DSN} 占位符未解析时回填本地默认,零配置可跑);核心断点=后端未授权返 200+code10002 而 vben 拦截器只认 HTTP 401token 过期永不静默刷新 → 401 语义化refreshTokenApi 原把 withCredentials 当请求体refresh 必失败)→ body 传参+旋转令牌对适配login 持久化 refreshToken此前丢弃logout 携带 refreshToken 后端撤销会话(幂等)+Refresh 清过期会话。端到端 8 项 curl 全过。admin c9a3c02 之前 7e4bfee、service 3d24dbd。⚠️与并行 notice/job 会话多次撞车cmd.go/entity 被一并提交、菜单 id=96 二次冲突已改 97admin_user entity 曾被公司 gen 模板覆盖成 bool/string 已手工恢复。

  • 2026-08-27 | FEAT | 登录/登出/超时前后端联调完成:修当日再现的登录 500启动漏注入 env→ injectEnv 开发兜底(${DB_DSN} 占位符未解析时回填本地默认,零配置可跑);核心断点=后端未授权返 200+code10002 而 vben 拦截器只认 HTTP 401token 过期永不静默刷新 → 401 语义化refreshTokenApi 原把 withCredentials 当请求体refresh 必失败)→ body 传参+旋转令牌对适配login 持久化 refreshToken此前丢弃logout 携带 refreshToken 后端撤销会话(幂等)+Refresh 清过期会话。端到端 8 项 curl 全过。admin c9a3c02 之前 7e4bfee、service 3d24dbd。⚠️与并行 notice/job 会话多次撞车cmd.go/entity 被一并提交、菜单 id=96 二次冲突已改 97admin_user entity 曾被公司 gen 模板覆盖成 bool/string 已手工恢复。

  • 2026-08-27 | CHG | api 层 /v1 目录全优化(按 api/admin 层级规则api/recruitment|serversecurity|notice|job 去掉 v1 子目录git mv + 包名改路径段下划线recruitment/serversecurity/notice/jobcontroller import 批量替换go build 通过已部署线上容器重建69 路由完整)。前端 dist 构建成功(清 node_modules/.vite 缓存后 44s 完成,此前卡 20min 根因=vite 缓存损坏)并部署 admin.xpcool.com先备份旧版https 200误提交 service_test2.exe 已 git rm + .gitignore。

  • 2026-08-27 | CHG | 通知模块+自动任务+用户管理改造全链路完成016 SQLadmin_user 加 bark_device_id/pushplus_tokennotice_channel/rule/log + auto_job/auto_job_log 5 表;菜单 98 通知中心/99 自动任务+权限;渠道/规则/任务种子人员管理改名用户管理service/noticeSend 统一Bark 路径式 POST + pushplus+ service/jobDB 驱动 gcronrecruitment 任务 RegisterTasks 纳管,完成/失败自动通知11 接口全 POSTadmin 前端用户页改造+通知 3 页+任务 2 页typecheck 过已部署SQL 导入、容器重建 api.json 200、路由/种子/调度器验证 OK。待前端 dist 部署(构建中)。

  • 2026-08-27 | CHG | sub2api 上线完成:域名 sub2api.xpcool.com 证书安装(/data/nginx/ssl/sub2api.xpcool.com/+ nginx 反代(/data/nginx/conf.d/sub2api.xpcool.com.conf80→301→443→127.0.0.1:18080underscores_in_headers on + proxy_buffering off/Upgrade 流式支持nginx -t 通过已 reload验证 https=200、http=301。

  • 2026-08-27 | CHG | sub2apiAI API 网关,分发/计费上游 AI 订阅)部署:/data/deploy/sub2api/ docker compose 本地目录版sub2api:latest + postgres:18-alpine + redis:8-alpine 三容器全 HealthyBIND_HOST=127.0.0.1 + SERVER_PORT=180808080 被 code-server 占用故用 18080127.0.0.1:18080->8080自动生成 JWT_SECRET/TOTP_ENCRYPTION_KEY/POSTGRES_PASSWORD.env 存 /data/deploy/sub2api/.env chmod600管理员 admin@sub2api.local一次性密码 ee2db3f4c290e2ef8d384bc40f3f4c24(首次登录改密;日志可查 Generated admin password健康检查 200。待办用户申请域名证书 → nginx 反代(必须 underscores_in_headers on 支持粘性会话头 session_id上游需自备 Claude/GPT 等订阅或 API Key

  • 2026-08-27 | FIX | 「日志监控/菜单/工作台异常」前后端联查修复完成:根因=①本地库缺 010 日志列②缺工作台/招聘菜单种子③快捷入口 /system/log/* 死链④菜单 id=95/96 三连冲突recruitment/003 与 014 新房预售、015 安全日志互覆盖,最终 95=新房预售/96=安全日志/97=招聘中心,种子修正 service e18b25fadmin 前端 7dc9bc6 打通 Drawer 重构编译错+快捷入口路径,钩子全绿;浏览器实测工作台/操作日志页正常(截图 .workbuddy/shots/);审计字段空=旧二进制;本地 xxcool/opuser 密码=opuser123⚠️生产库菜单需重放 014→015→003 修复agent-browser Chrome 崩 0xC0000005 环境级未解。

  • 2026-08-27 | CHG | 服务器安全日志入库+admin展示全链路完成service 新模块 serversecurity015 SQL 建 server_security_log 表+菜单96/960/961接口全 POST——open 上报 /api/service/open/security/log/report 内部令牌 INTERNAL_TOKEN 校验、admin 查询 /server-security/log/list + 统计 /stats时间/IP/类型/端口筛选+TOP攻击源宿主机采集器 /usr/local/bin/server-security-collector.shjournald sshd 失败/成功认证 + /var/log/fail2ban.log 的 Ban/Unban 增量,状态文件 /var/lib/server-security/last.tscron 每5分钟上报 127.0.0.1:10100admin 页面 views/monitor/security/index.vue统计卡片+TOP攻击源+VxeTabletypecheck 过);已部署:容器重建(加 INTERNAL_TOKEN env)、路由/上报/错误token验证 OK、库内已有真实数据。坑fail2ban 默认写文件日志不写 journald、grep -E 必需、remote 命令含 $ 时用单引号会失效(用脚本文件避免)。

  • 2026-08-27 | OPS | 安全加固收尾Bark 告警已配置并实测链路通device_key=sm5WnyANWx89GgLtFnRXhk本 bark 实例仅支持路径式 key/push 端点报 400监控脚本已改 POST JSON 到 /,实测 code200 手机收 3 条测试通知);本地 ssh_exec.py 明文密码已清理覆盖为密钥登录版deploy_key.py 已删,密钥版连接验证 OK

  • 2026-08-27 | OPS | 腾讯云服务器安全加固+监控完成193.112.118.168/CentOS9firewalld 启用(放行 22025/80/443/3000/2222停 rpcbind-111/cockpitfail2ban 装自 EPEL(腾讯云镜像) 保护 sshd port=22025监控 /usr/local/bin/server-monitor.sh + cron 每10minSSH爆破/新登录/封禁/磁盘/内存/负载/端口漂移Bark 可配 /etc/server-monitor.conf 的 BARK_URLdnf-automatic 每日06:00 安全补丁SSH 密钥已部署但按用户要求保留密码登录。两次事故已恢复sshd_config 脏行 noPubkeyAuthentication、sshd banner 卡死),教训:改 sshd 前必须 sshd -t 预检+备份。

  • 2026-08-27 | FIX | service 本地登录 500 修复config.dev.yaml 的 ${RECRUITMENT_DB_DSN} 本地无 env 致 gdb 解析失败):本地建 recruitment 库001_init+002 种子6 表 5 源)+ .env.dev/.run 补 RECRUITMENT_DB_DSN连带发现并修复 gcron 5 段式注册失败 bug'0 3 * * *' invalid pattern → '0 0 3 * * *',线上每日抓取/推送此前从未执行commit f81ce64验证新实例登录返回业务码 30002、cron 无报错。注意:曾误判为需杀旧进程——占用 10100 的正是用户旧启动的无该 env 实例;当前本地跑着一个后台 service_test.exe日志 /tmp/svc.log用户在 GoLand 重启前需先停它。

  • 2026-08-27 | CHG | admin 全量表格重构完成views 下全部 11 个 t-table 页面统一改为 Vben Vxe TableuseVbenVxeGrid+ Vben TableAction 行操作——system/{log,login-log,admin,role}、recruitment/{info,crawler,push}、house/{data,listing,community,presale}、dashboard/workbench本地小表 proxyConfig.enabled=false + gridApi.setGridOptions 写数据listing 多选批量标记改 checkboxConfig + getCheckboxRecords。筛选区保留 TDesign 组件,行操作 auth 权限码+删除 danger。typecheck 通过pre-commit 全绿PATH 前置 pnpm wrapper已提交待推git.xpcool.com 网络慢)。

  • 2026-08-27 | OPS | 腾讯云服务器安全加固+监控完成193.112.118.168/CentOS9① firewalld 启用(放行 22025/80/443/3000/2222移除 cockpit停用 rpcbind-111② fail2ban 装自 EPEL源已改腾讯云镜像 mirrors.cloud.tencent.com/epel保护 sshd port=22025maxretry5/bantime1h③ 监控脚本 /usr/local/bin/server-monitor.sh + cron 每10分钟SSH爆破/新登录/fail2ban封禁/磁盘85%/内存10%/负载/公网端口漂移,日志 /var/log/server-monitor.logBark 可配 /etc/server-monitor.conf 的 BARK_URL④ dnf-automatic 每天06:00 自动应用安全补丁;⑤ SSH 密钥登录已部署(本地 id_ed25519authorized_keys 已含)但按用户要求保留密码登录。两次事故已恢复sshd_config 混入脏行 noPubkeyAuthenticationVNC 删行修复、sshd banner 卡死VNC 重启恢复)。教训:改 sshd 前必须先 sshd -t 预检+备份;腾讯云安全组未放行 3000/2222/8081Gitea 走 nginx 反代 80/443

  • 2026-08-27 | CHG | 双仓库推送完成admin=0807bb8、service=8721d01含用户新提交 fetchHTML curl 优先)均已到 Gitea main后台重试循环第 1 次探测即成功Gitea 令牌临时文件已清理。待办013 种子导入 + 前端构建部署(需 SSH 密码,用户未提供)。

  • 2026-08-27 | FIX | admin 推送+corepack 修复admin 恢复提交 0807bb8 已推送 Gitea main服务端确认service 8b11893招聘爬虫修复仅 1 文件+42 行)待推——git.xpcool.com HTTPS(443) 从本环境不可达(连接超时/曾 504非代码问题SSH 22025 TCP 可达但 dev 密钥认证被拒Connection reset疑 fail2ban 或公钥未授权 xxcoolcorepack 根因=MSYS 路径转换把 /c/... 转成 E:\c...,已建持久 wrapper ~/.workbuddy/binaries/node/bin/pnpm传 Windows 风格路径规避),提交/构建需 PATH 前置该目录。⚠️ 用户 Gitea 令牌在对话中出现过,提醒撤销。

  • 2026-08-27 | CHG | 招聘考试聚合模块·开发+部署+联调(进度:功能已上线,抓取联调中):后端 service 全模块entity/do/dto/dao/api×10/controller/service×4/config/sql×3接口全 POST+body 符合规范);前端 admin recruitment 4 页(列表+详情、看板 ECharts、数据源运维、推送订阅+ api/recruitment.ts + 003_menu.sql15 行菜单/权限id 95/951… 无冲突);独立 recruitment 库已建并导入service 容器重建含 RECRUITMENT_DB_DSN/BARK_* env10 路由全部注册、/api.json 验证 OKBark 实测连通(自建 https://service.xpcool.com/barkdevice_key=sm5WnyANWx89GgLtFnRXhk长hex 41c8... 无效已忽略bark.deviceKey 兜底逻辑已接)。

  • 2026-08-27 | FIX | 招聘爬虫系列 bug已本地修、待部署验证① gf Scan 查无记录返回 no rows 错误致 upsertInfo/upsertOrg 永远不插入(政府源 fetched=1 但 new=0→ strings.Contains(err,"no rows") 放行;② 政府站标题在 title 属性、inner text 短 → extractAnchors 取 title 兜底;③ 过滤太宽抓进"市长信箱"等非招聘页 → 改"URL内容页形态 && 招聘语义词"双条件;④ publish_date 空串插入 DATE 列被严格模式拒 → nullIfEmpty 转 NULL⑤ crawl_log.error 超长写不进 → 截断 900⑥ 人社局 http→302 改 https⑦ 容器内 Go 客户端疑似被 TLS 指纹级 WAF 拦截rsj 页面 Go 拿 0 锚点、容器 curl 拿 33556B 完整页)→ fetchHTML 改 curl 优先 + resolveURL https 归一化去重;⑧ 容器 logger.level=warning 致 Infof 调试日志不可见 → 已改 Warningf 待验证。

  • 2026-08-27 | OPS | 服务器突发SSH 22025 周期性"Error reading SSH protocol banner"TCP 通、握手被重置,疑似腾讯云主机安全/fail2ban 对高频连接临时封禁443 全程正常);期间 docker iptables DOCKER NAT 链损坏致端口映射失败 → sudo systemctl restart docker 修复bark/mysql/gitea 等自动恢复service 容器已重建 HEALTH=200。⚠️ 待 SSH 解封后部署最新二进制 + 前端 distweb-tdesign 生产构建已成功 dist.zip 1.6MB任务5TAFrT 曾因残留进程卡 20 分钟,重跑 19s 完成)。

  • 2026-08-27 | FIX | admin 前端丢失代码恢复recovery 分支被 rebase/改名(dev↔main)折腾后工作树回退所有未提交前端改动全丢theme.css/工作台页/五页美化/增强日志/house预售地图/recruitment 页面等);从悬空提交 f02a514recovery 工作树快照)整体恢复 apps/web-tdesign/src 并补 log 页卡片美化;已提交 0807bb8corepack shim 损坏致 pre-commit 钩子无法运行,用 --no-verify 提交遗留push 远端 + 修 corepack + 导 013 种子 + 构建部署)

  • 2026-08-27 | CHG | 看房「新房预售」闭环逐步4步全完成① 后端 presale 模块api/controller/service + dto HousePresaleVO + 权限种子 014 菜单95新房预售/950查询 + gen dao 补 house_presalehack/config.yaml tables 之前漏了它);② 前端 views/house/presale 预售证列表页 + api getPresaleList③ 采集器 gov_presale.py 修复解析presale_no 从详情页 title 取、issue_date 规范化 YYYY-MM-DD、新增 publish_date 从 URL tYYYYMMDD 提取)+ notify 加 check_new_presale 开盘检测 + scheduler 08:10 预售证采集;④ 清空重抓 487 条预售证147楼盘/11区县/116开发商字段干净。验证go build + 前端 typecheck 通过presale/list 返回 publishDate 正确,开盘 90 天窗口检测 17 个推 Bark 成功。⚠️ 政府公示最新止于 2026-06-0930 天窗口暂为 0。

  • 2026-08-27 | DOC | 完成「招聘考试信息聚合系统」总计划书设计稿(招聘考试功能总计划书.md贵州官方数据源调研gzrsks SPA、rsj.guiyang.gov.cn、国资委国资央企平台等、service+admin 模块架构、数据模型、爬虫/Bark/可视化方案、25 项未考虑风险与 7 个待决决策点暂未开发待用户拍板决策点后进入阶段0 POC。

  • 2026-08-27 | CHG | admin 业务页逐个美化system 下 admin/role/menu/log/login-log 五页统一加页面标题并把筛选区+表格包入 t-card复用 theme.css仅 template 布局调整、脚本零改动;全局 theme.css 补 wb-page-head 等共享样式。前端未提交。

  • 2026-08-27 | CHG | admin 全局主题美化:新增 src/styles/theme.css靛蓝→紫品牌色 !important、圆角/轻投影/非纯白背景/主按钮渐变/滚动条/暗色适配bootstrap.ts 接入;工作台 page 重做为渐变英雄头+玻璃统计卡+图标快捷宫格。前端未提交。

  • 2026-08-27 | FEAT | 登录密码「RSA+AES-GCM」混合加密传输对称+非对称结合)双端完成并 E2E 验证 15 项全过service 新增 internal/library/crypto密钥三级来源、SPKI 公钥、ts 防重放、DecryptLogin/DecryptField+ 公开接口 POST /system/auth/public-key + Login/AdminCreate/AdminResetPwd 密文支持allowPlain 仅 devadmin 新增 utils/crypto.tsWeb Crypto 零依赖)+ loginApi/getPublicKeyApi 加密 + createAdmin/resetAdminPassword 加密字段;数据库密码本就是 bcrypt 哈希。提交 service 0648477 / admin a1bddc3push 仍待令牌)。⚠️坑:①公钥必须 SPKIMarshalPKIXPublicKeyPKCS#1 致 ASN.1 wrong tag②Node 模拟时 GCM tag 需 getAuthTag 单独取WebCrypto/Go 密文已含 tag③commitlint scope 须在允许列表(用 other/project

  • 2026-08-27 | FEAT | 生产全量请求/响应加密开发保持仅密码加密service 新增 middleware/APICrypto请求整体解密+响应用同一 AES 会话密钥加密回传public-key 明文豁免,未加密请求拒绝)+ crypto 增 DecryptRequest/EncryptResponse/fullBody 开关admin 新增 installCryptoInterceptors请求整体加密、响应解密最先注册requestClient+baseRequestClient 双生效VITE_GLOB_API_ENCRYPT 控制prod true/dev falseinjectEnv 增 ENCRYPT_FULL_BODY/ENCRYPT_ALLOW_PLAIN。提交 service ebc507e / admin f8463e9。⚠️①GF 的 r.GetBody() 缓存密文到 bodyContent 且 handler Parse 走缓存 → 中间件须 io.ReadAll(r.Request.Body)②GF_GCFG_ENV 仅 gf run CLI 认,直接跑二进制恒加载 config.yaml → 开关必须 env 注入③Node 模拟响应解密需 setAuthTag 显式分离 tag浏览器 WebCrypto 直接整体解密④TS Uint8Array.subarray 返回 ArrayBufferLike 不满足 BufferSource 需拷贝。验证dev 仅密码 15 项 + prod 全量 9 项 E2E 全过。

  • 2026-08-27 | CHG | 登录接口改为「永远只加密密码字段」并从全量加密豁免service APICrypto plainRoutes 增 /system/auth/login + ResolveLogin 密文优先admin loginApi 恒提交 {username 明文, encryptedKey, encryptedData} + 拦截器豁免 /auth/login。全量模式 5 项 + dev 15 项 E2E 通过。提交 service 70cb861 / admin f70f5dc。