2026-04-23 11:59:58 +08:00
2026-04-23 12:39:39 +08:00

hy-app-monitor

部署在 deploy 机器上的统一入口监控面板。

  • 对外入口端口:2026
  • 登录入口:http://43.164.75.199:2026/login
  • 入口选择页:http://43.164.75.199:2026/select
  • Yumi 入口:http://43.164.75.199:2026/yumi/
  • MySQL 入口:http://43.164.75.199:2026/mysql/
  • HaiYi 入口:http://43.164.75.199:2026/haiyi/
  • 内部实例:gateway:2026yumi:2027haiyi:2028
  • 服务健康:直接探测各业务服务健康接口
  • 主机资源:通过 SSH 采集 CPU / 内存 / 磁盘 / 进程数
  • Nacos直连 Nacos OpenAPI列出命名空间、服务和注册实例
  • MongoDB直连 Mongo采集 serverStatus / listDatabases / replSetGetStatus并提供库表浏览、分页查询、CRUD、聚合、Distinct、索引管理
  • MySQL直连云 MySQL提供运行状态、库表浏览、100 条分页查询、CRUD、列/索引变更和 SQL 工作台
  • 宿主机运维日志、滚动重启、compose 同步、服务更新统一走 SSH
  • 带外引导:只在打通 deploy -> target:22 时使用 TAT

目录

  • server.pygateway 入口
  • yumi_server.pyYumi 内部实例入口
  • haiyi_server.pyHaiYi 内部实例入口
  • entry/:统一登录、入口选择页和反代
  • core/:共享配置、鉴权、缓存和路径工具
  • monitors/yumi/Yumi 监控与运维实现
  • monitors/haiyi/HaiYi 占位实例
  • config/targets.json:监控目标和实例 ID
  • static/:前端页面
  • scripts/:启停、自启安装、前台运行脚本
  • systemd/systemd unit
  • ops/SSH 引导、放行和部署脚本
  • .env.example:运行配置模板

运行配置

项目根目录 .env 是唯一运行配置源,不入库。

最少需要:

APP_BIND=0.0.0.0
APP_PORT=2026
YUMI_INTERNAL_HOST=127.0.0.1
YUMI_INTERNAL_PORT=2027
HAIYI_INTERNAL_HOST=127.0.0.1
HAIYI_INTERNAL_PORT=2028
INTERNAL_PROXY_SHARED_SECRET=***
AUTH_DB_PATH=/opt/hy-app-monitor/run/auth.sqlite3
AUTH_SESSION_TTL_HOURS=24
DEFAULT_REFRESH_INTERVAL_SECONDS=10
REFRESH_INTERVAL_OPTIONS=5,10,15,30,60
NACOS_BASE_URL=http://10.2.1.17:8848
NACOS_NAMESPACE_ID=...
MONGO_URI=mongodb://...
MYSQL_HOST=10.x.x.x
MYSQL_PORT=3306
MYSQL_USER=readonly_or_admin
MYSQL_PASSWORD=***
MYSQL_DEFAULT_DATABASE=
DEPLOY_REGION=me-saudi-arabia
DEPLOY_INSTANCE_ID=
TENCENT_SECRET_ID=***
TENCENT_SECRET_KEY=***
SSH_USER=root
SSH_PORT=22
SSH_PRIVATE_KEY_PATH=/opt/hy-app-monitor/run/ssh/id_ed25519

如果你要直接在页面里做“构建镜像 -> 推 Harbor -> 更新服务”,还需要补这几项:

HARBOR_REGISTRY=10.2.1.3:18082
HARBOR_PROJECT=likei
HARBOR_USERNAME=***
HARBOR_PASSWORD=***
JAVA_REPO_ROOT=/opt/deploy/sources/chatapp3-java
GOLANG_REPO_ROOT=/opt/deploy/sources/chatapp3-golang
SERVICE_BUILD_CACHE_ROOT=/opt/deploy/build-cache
JAVA_MAVEN_THREADS=1C
JAVA_IMAGE_BUILD_MAX_WORKERS=3
UPDATE_DEFAULT_JAVA_GIT_REF=main
UPDATE_DEFAULT_GO_GIT_REF=main
UPDATE_DEFAULT_ADMIN_GIT_REF=main
DEPLOY_SSH_HOST=10.2.x.x
DEPLOY_SSH_USER=root
DEPLOY_SSH_PORT=22
DEPLOY_SSH_IDENTITY_FILE=~/.ssh/xxx

如果你还要直接发布 admin 前端静态站点,再补这几项:

ADMIN_FRONTEND_ENABLED=1
ADMIN_FRONTEND_REPO_URL=git@gitea.haiyihy.com:hy/chatapp3-admin.git
ADMIN_FRONTEND_REPO_ROOT=/opt/deploy/sources/chatapp3-admin
ADMIN_FRONTEND_HOST=admin-platform
ADMIN_FRONTEND_IP=10.2.1.2
ADMIN_FRONTEND_INSTANCE_ID=ins-p11begwe
ADMIN_FRONTEND_SSH_HOST=10.2.1.2
ADMIN_FRONTEND_SSH_USER=root
ADMIN_FRONTEND_SSH_PORT=22
ADMIN_FRONTEND_REMOTE_DIR=/opt/yumi-admin/frontend-admin
ADMIN_FRONTEND_SITE_DIR=/opt/yumi-admin/frontend-admin/site
ADMIN_FRONTEND_COMPOSE_FILE=/opt/yumi-admin/frontend-admin/docker-compose.yml
ADMIN_FRONTEND_COMPOSE_SERVICE=caddy
ADMIN_FRONTEND_RELEASE_META_PATH=/opt/yumi-admin/frontend-admin/.hy-app-monitor-admin-release.json
ADMIN_FRONTEND_BUILD_SCRIPT=build:antdv-next
ADMIN_FRONTEND_DIST_DIR=apps/dist
ADMIN_FRONTEND_PUBLIC_URL=https://yumi-admin.haiyihy.com

可以直接复制模板:

cp .env.example .env

如需放到 HTTPS 反代后再启用 Secure Cookie,可在 .env 追加:

AUTH_COOKIE_SECURE=1

MySQL 工作台可选参数:

MYSQL_CACHE_TTL_SECONDS=10
MYSQL_CONNECT_TIMEOUT_SECONDS=5
MYSQL_READ_TIMEOUT_SECONDS=15
MYSQL_WRITE_TIMEOUT_SECONDS=15
MYSQL_DEFAULT_PAGE_SIZE=100
MYSQL_MAX_PAGE_SIZE=200
MYSQL_QUERY_MAX_ROWS=500

本地运行

bash scripts/start.sh
bash scripts/status.sh

访问:

http://127.0.0.1:2026/

未登录会自动跳到:

http://127.0.0.1:2026/login

登录后会进入:

http://127.0.0.1:2026/select

systemd 开机自启

在远端项目目录执行:

bash scripts/install_systemd.sh

常用命令:

bash scripts/restart.sh
bash scripts/status.sh
bash scripts/uninstall_systemd.sh

通过 TAT 引导 SSH

python3 ops/bootstrap_ssh_via_tat.py

默认会:

  1. deploy 机生成专用 SSH 密钥对
  2. 通过 TAT 给目标机写入公钥并准备 sshd
  3. 只允许 deploy -> target:22
  4. 把目标机本机防火墙和安全组都限制到 deploy 私网 IP

如果 .env 里开启了 ADMIN_FRONTEND_ENABLED=1,脚本也会把 admin 前端机器一起纳入这轮 SSH 引导,即使它不在 config/targets.json 里。

如果你只需要放开监控面板端口,仍然可以使用:

python3 ops/open_port_via_tat.py

通过 SSH 远端部署

python3 ops/deploy_via_ssh.py

默认会:

  1. 让远端主机从 Git 拉取指定分支到 /opt/hy-app-monitor
  2. 把本地项目 .env 同步到远端项目 .env
  3. 创建远端 .venv
  4. 安装 requirements-ops.txt
  5. 安装并启用三套 systemd unit
  6. 重启 gateway / yumi / haiyi
  7. 检查 2026 监听

ops/deploy_via_tat.py 仍可保留成带外兜底,不建议继续作为日常主链路。

日常链路应先把本地改动提交并推送到远端仓库,再执行部署脚本,让 deploy 机按同一分支 git pull

git push origin main
python3 ops/deploy_via_ssh.py --repo-ref main

维护完整 Compose

默认只刷新本地完整模板:

python3 ops/sync_runtime_compose.py

如果要把完整模板同步到远端业务主机:

python3 ops/sync_runtime_compose.py --sync-remote

模板文件会写到本地 run/compose_templates/
滚动重启在真正执行 docker compose up -d --force-recreate --no-deps <service> 之前,也会先把对应宿主机的完整 docker-compose.yml 同步到远端,避免线上 compose 被裁剪成子集。

服务日志

页面里的服务详情支持按实例查看容器日志:

  1. 预览固定最近 1000
  2. 导出支持自定义条数
  3. 导出条数会按 SERVICE_LOG_EXPORT_MAX_LINES 限制
  4. 日志命令走目标机 docker logs --tail N

服务更新

页面里的“服务更新”会直接在当前机器上执行这条链路:

  1. Java 服务会在 SERVICE_BUILD_CACHE_ROOT/<repo>/<git-ref> 下复用固定构建工作区Golang 仍按临时 git worktree 构建
  2. 本地构建镜像并推送到 Harbor
  3. 取回 Harbor digest
  4. 用新 digest 更新本地完整 compose 模板
  5. 通过 SSH 把完整 compose 下发到目标宿主机
  6. 通过 SSH 先在目标机 docker pull 新镜像
  7. 最后只对你选中的服务执行 docker compose up -d --force-recreate --no-deps <service>

如果选中 admin 前端目标,则会改走:

  1. 在 deploy 机拉取 / 更新 chatapp3-admin
  2. 执行 corepack pnpm install --frozen-lockfile
  3. 执行 pnpm run build:antdv-next
  4. 通过 SSH + SCPapps/dist 同步到 admin 机 site 目录
  5. 备份旧站点文件并原地替换内容
  6. 执行 docker compose up -d caddy
  7. 把本次发布的 gitRef / commit / 时间 写到远端元数据文件,页面后续可直接看到当前已部署版本

说明:

  • other 现在也按 Harbor 业务镜像更新,不再继续依赖本地 ./other/service.jar 挂载
  • Java Maven 默认走增量 package,并支持通过 JAVA_MAVEN_THREADS 开启 reactor 并行
  • 多个 Java 服务会按 JAVA_IMAGE_BUILD_MAX_WORKERS 受限并行执行 docker build + push
  • admin 前端不会走 Harbor 镜像链路,而是直接发布静态文件到 site
  • 页面里的“滚动重启”仍然保留,适合只想让配置生效、不涉及代码构建的场景
  • 这条链路默认假设 hy-app-monitor 就运行在打包机 / deploy 机上并且本机已经能访问业务仓、Docker 和 Harbor

页面内容

  • 主机:CPU / 内存 / 磁盘 / 进程数,带阈值颜色分级
  • 服务Java / Golang 健康检查和耗时
  • Nacos命名空间、服务、注册实例、健康状态
  • Nacos 配置:读取当前 namespace 下的配置列表,支持格式校验、在线编辑保存
  • Golang 配置:读取 app 节点当前运行中的 service.env,展示 chatapp3-golang 实际消费的环境变量并支持保存
  • 服务日志:按实例查看最近日志并导出
  • 服务更新:本地构建选中服务、推送 Harbor、更新完整 compose并只重建选中的服务
  • 滚动重启:可按服务选择 Java / Golang 节点,逐台重启并等待健康恢复
  • MongoDB连接、内存、网络、操作计数、复制集、数据库统计
  • Mongo 工作页:列出所有数据库和集合,文档默认每页 100 条,支持 find / insertOne / insertMany / replaceOne / updateOne / updateMany / deleteOne / deleteMany / aggregate / distinct / createIndex / dropIndex / dropIndexes / createCollection / renameCollection / dropCollection / dropDatabase
  • MySQL连接状态、版本、当前/最大连接数、QPS/TPS、数据库大小、主从/只读状态
  • MySQL 工作页:列出所有数据库和表,默认每页 100 条,支持筛选排序、行级增删改、增加/删除列、增加/删除索引、常用 SQL 快捷操作和单语句 SQL 执行
  • 自动刷新:前端可切换刷新间隔,并保存在浏览器本地
Description
No description provided
Readme 2.8 MiB
Languages
Python 48.1%
HTML 18.2%
JavaScript 17.8%
CSS 8.5%
Shell 7.3%