16 KiB
2026-08-27 工作日志
-
2026-08-27 | FEAT | 登录/登出/超时前后端联调完成:修当日再现的登录 500(启动漏注入 env)→ injectEnv 开发兜底(${DB_DSN} 占位符未解析时回填本地默认,零配置可跑);核心断点=后端未授权返 200+code10002 而 vben 拦截器只认 HTTP 401,token 过期永不静默刷新 → 401 语义化;refreshTokenApi 原把 withCredentials 当请求体(refresh 必失败)→ body 传参+旋转令牌对适配;login 持久化 refreshToken(此前丢弃);logout 携带 refreshToken 后端撤销会话(幂等)+Refresh 清过期会话。端到端 8 项 curl 全过。admin c9a3c02 之前 7e4bfee、service 3d24dbd。⚠️与并行 notice/job 会话多次撞车(cmd.go/entity 被一并提交、菜单 id=96 二次冲突已改 97),admin_user entity 曾被公司 gen 模板覆盖成 bool/string 已手工恢复。
-
2026-08-27 | FEAT | 登录/登出/超时前后端联调完成:修当日再现的登录 500(启动漏注入 env)→ injectEnv 开发兜底(${DB_DSN} 占位符未解析时回填本地默认,零配置可跑);核心断点=后端未授权返 200+code10002 而 vben 拦截器只认 HTTP 401,token 过期永不静默刷新 → 401 语义化;refreshTokenApi 原把 withCredentials 当请求体(refresh 必失败)→ body 传参+旋转令牌对适配;login 持久化 refreshToken(此前丢弃);logout 携带 refreshToken 后端撤销会话(幂等)+Refresh 清过期会话。端到端 8 项 curl 全过。admin c9a3c02 之前 7e4bfee、service 3d24dbd。⚠️与并行 notice/job 会话多次撞车(cmd.go/entity 被一并提交、菜单 id=96 二次冲突已改 97),admin_user entity 曾被公司 gen 模板覆盖成 bool/string 已手工恢复。
-
2026-08-27 | CHG | api 层 /v1 目录全优化(按 api/admin 层级规则):api/recruitment|serversecurity|notice|job 去掉 v1 子目录(git mv + 包名改路径段下划线:recruitment/serversecurity/notice/job),controller 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 SQL(admin_user 加 bark_device_id/pushplus_token;notice_channel/rule/log + auto_job/auto_job_log 5 表;菜单 98 通知中心/99 自动任务+权限;渠道/规则/任务种子;人员管理改名用户管理);service/notice(Send 统一:Bark 路径式 POST + pushplus)+ service/job(DB 驱动 gcron,recruitment 任务 RegisterTasks 纳管,完成/失败自动通知);11 接口全 POST;admin 前端用户页改造+通知 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.conf,80→301→443→127.0.0.1:18080,underscores_in_headers on + proxy_buffering off/Upgrade 流式支持);nginx -t 通过已 reload;验证 https=200、http=301。
-
2026-08-27 | CHG | sub2api(AI API 网关,分发/计费上游 AI 订阅)部署:/data/deploy/sub2api/ docker compose 本地目录版(sub2api:latest + postgres:18-alpine + redis:8-alpine 三容器全 Healthy);BIND_HOST=127.0.0.1 + SERVER_PORT=18080(8080 被 code-server 占用故用 18080),127.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 e18b25f);admin 前端 7dc9bc6 打通 Drawer 重构编译错+快捷入口路径,钩子全绿;浏览器实测工作台/操作日志页正常(截图 .workbuddy/shots/);审计字段空=旧二进制;本地 xxcool/opuser 密码=opuser123;⚠️生产库菜单需重放 014→015→003 修复;agent-browser Chrome 崩 0xC0000005 环境级未解。
-
2026-08-27 | CHG | 服务器安全日志入库+admin展示(全链路完成):service 新模块 serversecurity(015 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.sh(journald sshd 失败/成功认证 + /var/log/fail2ban.log 的 Ban/Unban 增量,状态文件 /var/lib/server-security/last.ts,cron 每5分钟上报 127.0.0.1:10100);admin 页面 views/monitor/security/index.vue(统计卡片+TOP攻击源+VxeTable,typecheck 过);已部署:容器重建(加 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/CentOS9):firewalld 启用(放行 22025/80/443/3000/2222,停 rpcbind-111/cockpit);fail2ban 装自 EPEL(腾讯云镜像) 保护 sshd port=22025;监控 /usr/local/bin/server-monitor.sh + cron 每10min(SSH爆破/新登录/封禁/磁盘/内存/负载/端口漂移,Bark 可配 /etc/server-monitor.conf 的 BARK_URL);dnf-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 Table(useVbenVxeGrid)+ 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=22025(maxretry5/bantime1h);③ 监控脚本 /usr/local/bin/server-monitor.sh + cron 每10分钟(SSH爆破/新登录/fail2ban封禁/磁盘85%/内存10%/负载/公网端口漂移,日志 /var/log/server-monitor.log,Bark 可配 /etc/server-monitor.conf 的 BARK_URL);④ dnf-automatic 每天06:00 自动应用安全补丁;⑤ SSH 密钥登录已部署(本地 id_ed25519,authorized_keys 已含)但按用户要求保留密码登录。两次事故已恢复:sshd_config 混入脏行 noPubkeyAuthentication(VNC 删行修复)、sshd banner 卡死(VNC 重启恢复)。教训:改 sshd 前必须先 sshd -t 预检+备份;腾讯云安全组未放行 3000/2222/8081(Gitea 走 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 或公钥未授权 xxcool);corepack 根因=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.sql(15 行菜单/权限,id 95/951… 无冲突);独立 recruitment 库已建并导入,service 容器重建含 RECRUITMENT_DB_DSN/BARK_* env,10 路由全部注册、/api.json 验证 OK;Bark 实测连通(自建 https://service.xpcool.com/bark,device_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 解封后部署最新二进制 + 前端 dist(web-tdesign 生产构建已成功 dist.zip 1.6MB,任务5TAFrT 曾因残留进程卡 20 分钟,重跑 19s 完成)。 -
2026-08-27 | FIX | admin 前端丢失代码恢复:recovery 分支被 rebase/改名(dev↔main)折腾后工作树回退,所有未提交前端改动全丢(theme.css/工作台页/五页美化/增强日志/house预售地图/recruitment 页面等);从悬空提交 f02a514(recovery 工作树快照)整体恢复 apps/web-tdesign/src 并补 log 页卡片美化;已提交 0807bb8(corepack 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_presale,hack/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-09,30 天窗口暂为 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 仅 dev);admin 新增 utils/crypto.ts(Web Crypto 零依赖)+ loginApi/getPublicKeyApi 加密 + createAdmin/resetAdminPassword 加密字段;数据库密码本就是 bcrypt 哈希。提交 service 0648477 / admin a1bddc3(push 仍待令牌)。⚠️坑:①公钥必须 SPKI(MarshalPKIXPublicKey),PKCS#1 致 ASN.1 wrong tag;②Node 模拟时 GCM tag 需 getAuthTag 单独取(WebCrypto/Go 密文已含 tag);③commitlint scope 须在允许列表(用 other/project)。