12 KiB
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/ - 通用入口:
http://43.164.75.199:2026/common/ - HaiYi 入口:
http://43.164.75.199:2026/haiyi/ - MySQL 兼容入口:
http://43.164.75.199:2026/mysql/ - 内部实例:
gateway:2026、yumi:2027、haiyi:2028 - 服务健康:直接探测各业务服务健康接口
- 主机资源:通过
SSH采集CPU / 内存 / 磁盘 / 进程数 - Nacos:直连 Nacos OpenAPI,列出命名空间、服务和注册实例
- MongoDB:直连 Mongo,采集
serverStatus / listDatabases / replSetGetStatus,并提供库表浏览、分页查询、CRUD、聚合、Distinct、索引管理 - MySQL:直连云 MySQL,提供运行状态、库表浏览、100 条分页查询、CRUD、列/索引变更和 SQL 工作台
- CDN:直连腾讯云 CDN,支持
URL / 目录刷新和最近任务查询;当前限制域名https://h5.haiyihy.com/ - 宿主机运维:日志、滚动重启、compose 同步、服务更新统一走
SSH - 带外引导:只在打通
deploy -> target:22时使用TAT
目录
server.py:gateway 入口yumi_server.py:Yumi 内部实例入口haiyi_server.py:HaiYi 内部实例入口entry/:统一登录、入口选择页和反代core/:共享配置、鉴权、缓存和路径工具monitors/yumi/:Yumi 监控与运维实现monitors/haiyi/:HaiYi 占位实例config/targets.json:监控目标和实例 IDstatic/:前端页面scripts/:启停、自启安装、前台运行脚本systemd/:systemd unitops/: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=***
GATEWAY_CLB_LOAD_BALANCER_ID=lb-xxxxxxxx
GATEWAY_CLB_LISTENER_IDS=lbl-http,lbl-https
CDN_ALLOWED_DOMAINS=h5.haiyihy.com
CDN_PURGE_TASK_LIMIT=20
GATEWAY_CLB_POLL_SECONDS=2
GATEWAY_CLB_TASK_TIMEOUT_SECONDS=120
GATEWAY_CLB_DRAIN_SECONDS=0
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/yumiadmin-acc
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://yumiadmin-acc.global-interaction.com
通用模块里的 Cron 部署 用于发布 chatapp-cron,需要目标机已有 docker-compose.yml 和 service.env。部署流程会构建 week-star-job 二进制,上传到目标机,再执行 compose 重建:
CHATAPP_CRON_ENABLED=1
CHATAPP_CRON_REPO_URL=git@gitea.haiyihy.com:hy/chatapp-cron.git
CHATAPP_CRON_REPO_ROOT=/opt/deploy/sources/chatapp-cron
CHATAPP_CRON_DEFAULT_GIT_REF=main
CHATAPP_CRON_SERVICE_NAME=chatapp-cron
CHATAPP_CRON_HOST=cron-sg-1
CHATAPP_CRON_IP=10.3.1.14
CHATAPP_CRON_INSTANCE_ID=ins-nt6bsay0
CHATAPP_CRON_SSH_HOST=10.3.1.14
CHATAPP_CRON_SSH_USER=root
CHATAPP_CRON_SSH_PORT=22
CHATAPP_CRON_SSH_USE_SUDO=0
CHATAPP_CRON_REMOTE_DIR=/opt/likei/cron-sg-1
CHATAPP_CRON_COMPOSE_FILE=/opt/likei/cron-sg-1/docker-compose.yml
CHATAPP_CRON_COMPOSE_SERVICE=week-star-job
CHATAPP_CRON_BINARY_PATH=/opt/likei/cron-sg-1/week-star-job/service
CHATAPP_CRON_RELEASE_META_PATH=/opt/likei/cron-sg-1/.hy-app-monitor-chatapp-cron-release.json
可以直接复制模板:
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
CDN 刷新工具可选参数:
CDN_ALLOWED_DOMAINS=h5.haiyihy.com
CDN_PURGE_TASK_LIMIT=20
本地运行
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
默认会:
- 在
deploy机生成专用 SSH 密钥对 - 通过
TAT给目标机写入公钥并准备sshd - 只允许
deploy -> target:22 - 把目标机本机防火墙和安全组都限制到
deploy私网 IP
如果 .env 里开启了 ADMIN_FRONTEND_ENABLED=1 或 CHATAPP_CRON_ENABLED=1,脚本也会把 admin 前端机器和定时任务服务器纳入这轮 SSH 引导,即使它们不在 config/targets.json 里。
如果你只需要放开监控面板端口,仍然可以使用:
python3 ops/open_port_via_tat.py
通过 SSH 远端部署
python3 ops/deploy_via_ssh.py
默认会:
- 让远端主机从 Git 拉取指定分支到
/opt/hy-app-monitor - 把本地项目
.env同步到远端项目.env - 创建远端
.venv - 安装
requirements-ops.txt - 安装并启用三套
systemdunit - 重启
gateway / yumi / haiyi - 检查
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 被裁剪成子集。
服务日志
页面里的服务详情支持按实例查看容器日志:
- 预览固定最近
1000条 - 导出支持自定义条数
- 导出条数会按
SERVICE_LOG_EXPORT_MAX_LINES限制 - 日志命令走目标机
docker logs --tail N
服务更新
页面里的“服务更新”会直接在当前机器上执行这条链路:
- Java 服务会在
SERVICE_BUILD_CACHE_ROOT/<repo>/<git-ref>下复用固定构建工作区;Golang 仍按临时git worktree构建 - 本地构建镜像并推送到 Harbor
- 取回 Harbor
digest - 用新
digest更新本地完整 compose 模板 - 通过
SSH把完整 compose 下发到目标宿主机 - 通过
SSH先在目标机docker pull新镜像 - 最后只对你选中的服务执行
docker compose up -d --force-recreate --no-deps <service>
如果选中的是 gateway,在真正重建单节点之前还会额外执行:
- 读取
GATEWAY_CLB_LOAD_BALANCER_ID+GATEWAY_CLB_LISTENER_IDS下当前节点的全部后端绑定 - 把这些绑定的权重统一改成
0,避免新请求继续打到待重启节点 - 可选按
GATEWAY_CLB_DRAIN_SECONDS额外等待连接自然排空 - 等实例本身 HTTP / Nacos 恢复后,再轮询 CLB 健康检查恢复
- 最后把每条绑定恢复到摘流前的原权重
如果选中 admin 前端目标,则会改走:
- 在 deploy 机拉取 / 更新
chatapp3-admin - 执行
corepack pnpm install --frozen-lockfile - 执行
pnpm run build:antdv-next - 通过
SSH + SCP把apps/dist同步到 admin 机site目录 - 备份旧站点文件并原地替换内容
- 执行
docker compose up -d caddy - 把本次发布的
gitRef / commit / 时间写到远端元数据文件,页面后续可直接看到当前已部署版本
说明:
other现在也按 Harbor 业务镜像更新,不再继续依赖本地./other/service.jar挂载gateway发布现在强依赖 CLB 摘流配置;缺少GATEWAY_CLB_LOAD_BALANCER_ID或GATEWAY_CLB_LISTENER_IDS时,页面会给 warning,实际执行也会直接失败而不是冒险重启- 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 执行 - 自动刷新:前端可切换刷新间隔,并保存在浏览器本地