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 技能加配置:
| 别名 | 地址 | 用途 |
|---|---|---|
mazu | 47.96.90.171:40718 | 妈祖商城(已有,4-30) |
chaojierp | 47.119.139.162:37392/51d03814 | 超级 ERP(已有,5-02;5-06 token 重发,已是最新无需更新) |
xipu | 47.96.160.80:18635/c37de7c5 | 囍铺网关(Ubuntu 24, 4C/3.5G,CPU 0%) |
jinjia | 39.105.230.121:8888/1f2f7a98 | 金甲服务器 |
erp-mobile | 120.25.173.234:23928/42e49a6b | ERP 手机端(旧 erp.xipugold.com 后端,关键) |
xylf-erp | 47.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明文+无Authrwheader 仍能登 - 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 tokenFLcSyNzwYFIHNQKaVEo8TPLDWhflScNK;安全入口路径/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已支付,但 ERPis_cashier_order没收到 - 错误推测被推翻:起初推测是
add_erp_cashier_order中if($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 封);通过宝塔filesAPI 读/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-opsTOOLS.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 个生产库 / SSHPasswordAuthentication 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)
- 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 SSO:https://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)。