Nexora Ops

Nexora 平台的运维工程师代理(🔧),专责 Docker 容器管理、网络排障、数据库运维、监控告警和安全配置。

基本信息

属性
Bot 名称@nexora-ops
Emoji🔧
创建时间2026-04-09
上级nexora(通过 DELEGATE 指令派发任务)

主要职责

Docker 与容器管理

  • 所有容器的启停、日志查看、配置修改
  • 数据库容器(MySQL/PostgreSQL/Redis)的备份与恢复
  • 镜像版本升级与回滚

网络与反向代理

  • caddy-reverse-proxy 配置管理(14 条反向代理规则)
  • 域名绑定与 TLS 证书自动续期
  • 网络连通性排查(如阿里云 RDS 白名单、端口开放)

监控告警

  • monitoring-and-cron Uptime Kuma 监控配置(12 个 HTTP 监控项)
  • GitLab Runner 健康检查修复(04-12)
  • 服务宕机告警推送到 nexora-alert

数据库运维

  • MySQL dump 导入导出(2 个 RDS 实例、5 个数据库)
  • PostgreSQL 迁移(Gitea → GitLab 时的数据迁移)
  • 数据库连接字符串和密码管理

关键事件记录

2026-05-11 金价无跳动 — kotlin-api DNS 缓存事故(nexora 频道)

07:13 nexora-ops 在 nexora 频道收到「金价没有跳动检查下」。容器在跑,但 kotlin-api 最后一条日志停在 2026-05-10 20:00:10(>11h 静默)。日志关键报错:java.net.UnknownHostException: pyerp-mysql

根因pyerp-mysql 容器近期被重启过(仅 Up 16h),新 IP 与 Docker DNS 缓存不一致;kotlin-api / kotlin-api-xylf 已运行 2 周多,容器内 DNS 缓存旧 IP,Druid 连接池建新连接全部失败 → scheduling 线程的金价 WebSocket 推送中断。

处置:重启 kotlin-api(7782)+ kotlin-api-xylf(7783)。容器内 DNS 重新解析 pyerp-mysql → 172.19.0.2,Spring Boot 干净启动,无 error/exception。下个整点 scheduling 任务恢复,前端/APP 重连 WebSocket 后金价跳动恢复。

沉淀:长跑 JVM 容器(Druid 等连接池)+ Docker bridge 网络下,任何 MySQL/Redis 容器重启都要顺手 bounce 上游 JVM 应用,否则容器内 JVM/DNS 缓存会长期指向旧 IP。建议给 pyerp-mysql 加 healthcheck + 关联容器 restart: on-failure,或直接走外部 RDS 域名。同样套路适用于 nexora-laiya 金价 WebSocket 链路和其它依赖 pyerp-mysql 的 Kotlin/PHP 容器。

2026-05-06 ~ 05-08 宝塔 API 接入扩到 6 台 + 全服务器代码扫描 + 囍铺 iOS 登录排查

宝塔 API 服务器从 2 → 6 台(5-06 一次性补齐)。Cobra 在 dora 频道贴出剩余 4 台凭据,nexora-ops 用 btpanel 技能加配置:

别名地址用途
mazu47.96.90.171:40718妈祖商城(已有,4-30)
chaojierp47.119.139.162:37392/51d03814超级 ERP(已有,5-02;5-06 token 重发,已是最新无需更新)
xipu47.96.160.80:18635/c37de7c5囍铺网关(Ubuntu 24, 4C/3.5G,CPU 0%)
jinjia39.105.230.121:8888/1f2f7a98金甲服务器
erp-mobile120.25.173.234:23928/42e49a6bERP 手机端(旧 erp.xipugold.com 后端,关键)
xylf-erp47.119.139.162:37392/...龙凤/徕雅 ERP

⚠️ 安全入口路径(/c37de7c5 等)只在浏览器访问需要,API 调用不要带——btpanel 技能会自动追加 API 路径,带了反而 404。

2026-05-07 全服务器 + 代码仓库扫描

Daddy 让 nexora-ops 做一次平台「全景体检」(spawn 3 子任务并行:ERP 系统 / 商城 CRMEB / Kotlin+前端)。结果:

  • 46 个 Docker 容器,磁盘 98GB / 458GB (23%),内存 11GB / 30GB
  • 22 个域名站点(PHP ThinkPHP 6.x 为主 + Kotlin + Vue/uni-app)
  • 49 个代码仓库16 个数据库 ~1.2GB(laiyashop 286MB、mazugift_fuli 90MB、myhw 34MB、hxerp 31MB、crmeb_mazu 20MB 为前 5 大)

完整报告未单独建页,归档在 nexora-ops memory/ 下。本页只记凭据与监控位(避免页面变成 dump)。

2026-05-08 囍铺 iOS 登录”登不进去” — 不是 Nexora 平台问题

Daddy 发图说「所有苹果手机登录囍铺 ERP 进不去」。第一反应是 kotlin-api.nexora.restry.cn,验证后服务正常,无 login error。

完整定位(详见 nexora-xipu 5-08 段、decisions 5-08 双轨期):

  • iOS 旧版 APP 仍硬编码连老域名 erp.xipugold.com(后端 120.25.173.234:7782,由 erp-mobile 宝塔机管理)
  • 老服务器接口正常,唯独 admin 密码被改了,其它账号(zhoubin/appletest/CBL)用密码 123456 明文+无 Authrw header 仍能登
  • WebSocket 必须带 role + version 两个 query param,缺一即 close
  • 结论:保留老服务器和 xipugold.com 域名,等 iOS 客户端发版换域名才能下线

2026-05-02 接管超级 ERP 服务器(chaojierp)+ 排查收银台订单丢推 ERP

Cobra 给 nexora-ops 第二台宝塔服务器:超级ERP (47.119.139.162),命名 chaojierp

  • 宝塔面板 https://47.119.139.162:37392/51d03814,API token FLcSyNzwYFIHNQKaVEo8TPLDWhflScNK;安全入口路径 /51d03814 仅浏览器访问需要,API 调用不要带(脚本会自动追加 API 路径,带了反而报错)
  • 巡检:CentOS 7 + 宝塔 11.7.0,8C/15GB Xeon Platinum,CPU 27%、内存 22%、负载 3.2/2.2/1.6,系统盘 / 85.9% ⚠️ 偏高,运行 5 天
  • 该服务器跑 8 个系统(Outline 部署文档):妈祖ERP(myhw.py99999.com/serp/,源码 /www/wwwroot/myhw.py99999.com)、妈祖商城同步API(myhwapi.py99999.com)、原料ERP、囍铺ERP 等
  • 架构发现:妈祖商城(47.96.90.171)↔ 妈祖ERP(47.119.139.162)的同步链路 — myhwapi.py99999.com 站点部署在 ERP 服务器上做桥接,但定时任务实际调用 商城自身 www.mazugift.com/?s=/ApiAutoErpOrder/push_addorder,从 shop_order_push_log 取队列再 ApiErpPush::apirequest 推到 ERP

工单 MZSC-62(收银台订单同步丢单根因排查)

  • 现象:订单 C260429122215259577(¥646.96,4-29 12:22)在商城 cashier_order 已支付,但 ERP is_cashier_order 没收到
  • 错误推测被推翻:起初推测是 add_erp_cashier_orderif($goods && $goods['sku_id']>0) 跳过无 SKU 商品 + L267-278 空列表返 status=1 当成功 → 错。验证后实际是这笔订单根本没进 shop_order_push_log 队列
  • 根因shop_order_push_log 全文件只有 1 处写入(Backstage/index 系列 L253),条件 $type=='shop';收银台 $type='cashier'cashier_pay()(L3878),该函数整个被注释掉直接 return true未写入推送队列;为何”大部分能推送”待查(可能存在另一条路径)
  • 验证手段:宝塔面板 crontab 创建定时任务跑 SQL 查(API 不直接执行 SQL,curl 远程 MySQL 被 IP 封);通过宝塔 files API 读 /www/wwwroot/... PHP 源码
  • 建议方案写入 Plane Issue MZSC-62 妈祖商城项目(priority High):定时对账任务(5-10min 扫已支付收银台订单 vs push_log)+ 失败日志表 + push_log 写入与订单状态更新同事务

Plane API 凭据:见 nexora / nexora,token plane_api_0edbc19b8be243c388d4b4dabe79f9d1、workspace nexora、妈祖商城项目 ID 84a0138d-b1c1-4c90-8108-d1fcea8dbd1d(标识 MZSC)。

2026-04-30 接管妈祖服务器(宝塔 API)+ 五一假期监控

Cobra 把妈祖生产服务器(47.96.90.171)的访问凭据交给 nexora-ops,走宝塔面板 API没有 SSH

  • API key eCMyeoh92N1Dq7MUeqGp4eJQcxXTBH9y,面板 https://47.96.90.171:40718,已写入 nexora-ops TOOLS.md,命名 mazu
  • 安装两个 aapanel 技能 btpanel / btpanel-phpsite(来自 openclaw skills 仓库),配置 SSL 校验关闭(自签名)
  • 首次巡检被 IP 白名单拒(出口 1.202.55.49),Cobra 手动放行后跑通:Ubuntu 20 + 宝塔 11.7.0,8C/15.5G,磁盘 28.2/48.9G ⚠️ 58%,5 个站点(mazugift / qingyuwh / meiyuhaowu / gold / test)+ Nginx + MySQL 全 OK
  • 安全态势严重:49 次 SSH 暴力破解 / 0 成功,8 个攻击 IP(沪/京/深 + 海外);SSH 服务”已停止”、防火墙关闭、Fail2ban 未装
  • 加固受阻:宝塔 API key 权限只放了监控类接口firewall/ssh/fail2ban 等安全 action 全部”指定参数无效”被白名单拦——加固必须 Cobra 手动登面板做
  • Uptime Kuma 接入:通过 Socket.IO 用 admin / Nexora@2026! 登录,添加 7 个监控项前缀 [妈祖生产服务器](5 站点 HTTP + Nginx 80 + MySQL 3306)。Kuma 没存 API 凭据,靠常用密码盲猜成功 → 应在 monitoring-and-cron 里固化 Kuma 凭据存储位置
  • claw-bot 主服务器安全自检(同日附带):无防火墙 / MySQL 13306 绑 0.0.0.0 暴露 13 个生产库 / SSH PasswordAuthentication yes —— 三个高风险项立项待修
  • 五一假期监控(4/30 ~ 5/5):写入 nexora-ops HEARTBEAT.md,每次心跳检查妈祖服务器 CPU/内存/磁盘/负载/Nginx/MySQL,阈值 CPU>80% / 内存>85% / 磁盘>90% / 负载>6,异常立即推送 Daddy;事件 + 慢 SQL/PHP 错误归档 memory/2026-05-holiday-incidents.md。假期结束自动撤销

GitLab Runner & Monitoring 修复(04-12)

  • GitLab Runner 容器反复重启 → 发现配置文件损坏,重新注册解决
  • Uptime Kuma 监控项从 5 个扩展到 12 个,覆盖所有业务系统
  • 配置告警通知通过 Clawline webhook 推送

RDS 数据同步协助(04-12)

  • 协助 nexora 从阿里云 2 个 RDS 实例同步 5 个数据库
  • 排查莱雅商城域名错误(laiyz0oys.mysql.rds.aliyuncs.com 漏掉 0o
  • 本地 MySQL 容器配置调优(innodb_buffer_pool_size 等)

Plane 部署支持(04-14)

  • Docker Compose 编排 Plane 各组件(web/api/worker/beat/space)
  • 反向代理配置 plane.nexora.restry.cn
  • 数据库初始化与用户创建

ERPNext + Casdoor + CRMEB + GitLab 镜像(04-18)

大规模新栈部署日。详见 nexoranexora

  • ERPNext v16.14.0 测试环境:9 个容器 ~717 MB,https://erpnext.nexora.restry.cn,`Administrator / Nexora@2026`
  • CRMEB PHP 妈祖实例:CRMEB-KY v6.0.0,https://crmeb-mazu.nexora.restry.cn,~101 MB;坑:MySQL 5.7 strict mode 截断 SQL 导入 → 放宽 sql_mode;Caddy 证书首次 TLS-ALPN-01 失败自动重试成功
  • Casdoor SSOhttps://sso.nexora.restry.cn,端口 18200 ~50 MB;通过 bench console 创建 Social Login Key 成功集成 ERPNext 登录(REST API 路径 client_secret 加密异常);Casdoor 默认密码无法经 update-user API 改 → 直接 UPDATE 数据库 bcrypt hash
  • GitLab 镜像 Group nexora-vendor:erpnext / frappe / frappe_docker / crmeb / casdoor 全量 push —mirror,2 GB+ 仓库 HTTP push 被 OOM kill 但数据已完整(branch/tag 数与上游一致)
  • Java CRMEB 多商户版暂缓:确认是闭源商业版,改用 CRMEB PHP 标准版开源方案(Apache-2.0)

MySQL 外网 FRP TCP 穿透 + 莆阳 9 系统全量预检(04-22)

详见 nexora-new-system-deployment。要点:

  • MySQL 外网接入:在 frpc.ini 加 TCP 穿透 local 13306 → remote 33306,域名改用泛解析 db.nexora.restry.cn:33306*.nexora.restry.cn 泛解析已指向 fw-n2 40.162.94.187)。以前 FRP 只有 HTTP/HTTPS,这是第一条 TCP 穿透。
  • 莆阳 9 系统代码 + 服务 + 数据库全量核查:超级 ERP 代码落后 GitLab 5 commit(已 pull)+ 字符集 latin1→utf8;鸿星 ERP 连的是 xipuerp 而非 hxerp(独立 .env 挂载修复);莱雅 runtime/ 权限导致每分钟 mkdir 失败(修复)。
  • 新部署 4 个服务:baijian.nexora.restry.cn(摆件 ERP,ThinkPHP 18087)、baijianshop.nexora.restry.cn(摆件商城,ShopXo 18088)、kotlin-api.nexora.restry.cn:7782(囍铺 Kotlin 后端,无 JDK 改 Dockerfile 化)、kotlin-xylf.nexora.restry.cn:7783(龙凤 Kotlin)。摆件 ERP DB 暂为空库;Fastify 登录服务因缺 apperp 库暂缓。
  • Plane 任务描述批量更新:莆阳网络项目的 10 条任务都补上「🔧 运维预检结果」段,人员只需关注功能层面检查。
  • 跨 agent 消息权限:代码层无 ACL,只需在 AGENTS.md 里写明 [Delegated task to **...**] 语法,ops 就能给 docs/small 下发任务;04-22 起成为标准流程(详见 multi-agent-architecture)。

相关页面