# 运维管理证书监控自动续签系统 **Repository Path**: taokaji/system-tools ## Basic Information - **Project Name**: 运维管理证书监控自动续签系统 - **Description**: 运维管理系统。服务器监控告警系统,证书监控系统,证书自动续签系统,dns 整合解析管理系统。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-29 - **Last Updated**: 2026-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 运维服务管理系统 一套装在自己服务器上的运维控制台。SSH 终端、批量命令、日志查看、日志关键字告警、网络排障工具箱、证书续期、监控告警、站点探测、DNS 解析、到期台账、审计留痕——原来要在跳板机、各个云后台、Excel 之间来回切的事,收在一个页面上。 - **前端**:Vue 3 + Vite + Element Plus + Pinia + xterm.js - **后端**:Spring Boot 3 + MyBatis-Plus + Sa-Token + JSch(SSH) - **部署**:Docker Compose,一条命令起全套 --- ## 最近更新 ### 2026-09-29 - **日志关键字告警**(新):盯日志里的关键字,命中即告警。按字节偏移增量读,不重复报旧内容;首次扫描只建基线;支持排除关键字与静默期 - **网络排障工具箱**(新):Ping / MTR / Traceroute / Dig / Nslookup / 端口 / HTTP / 监听端口 / 连接数,从**目标机器**发起探测 - **日志查看增强**:支持在服务器上按目录翻找日志文件,或直接列「最近 3 天还在写」的日志 - **授权改为 RSA-2048 非对称签发**:程序里只有公钥(能验不能签),私钥由授权方离线保管。改库、回拨系统时间、另造密钥签发的码全部无效 --- ## 一、功能亮点 ### 1. 服务器:浏览器里直接开终端 - **Web 终端**:xterm.js + WebSocket,支持 `vim` 这类全屏交互程序(Esc / Ctrl 组合键不会被浏览器或弹窗吃掉) - **SFTP 文件管理**:在线上传下载、目录跳转,顶部路径框可直接输入 `/var/www` 回车直达,支持 `~`、相对路径、`..` - **服务器台账**:分组、标签、连接参数全部 AES 加密存储,密码不落明文 ### 2. 批量命令:一次下发,逐台回收 - 勾选多台机器并发执行(默认 10 并发),每台单独记录输出、耗时、成功失败 - 内置 9 条只读模板(磁盘、负载、进程、端口、内核等) - **高危命令硬拦截**:`rm -rf`、`reboot`/`shutdown`、`mkfs`、`dd`、fork 炸弹、清空 `/etc` 等,代码层面直接拒绝,与用户配置的规则无关——防止某天有人误加一条"放行"规则就把根目录删了 - 执行前先跑一次预检,命中危险规则会先提示 ### 3. 日志查看:不用再 ssh 上去 tail - 9 个预置日志源(nginx 错误/访问、系统日志、登录审计、MySQL、certbot、systemd journal…),自动探测哪些存在 - **在服务器上现找文件**:按目录浏览,或直接看「最近 3 天还在写」的日志——排查时最想知道的就是「现在到底往哪个文件里写」 - 支持关键字过滤,最多读 2000 行 - **全程只读**:只有 `tail` / `grep` / `wc` / `stat` / `find`,没有任何写操作 ### 4. 证书管理:Let's Encrypt 全自动 - 证书台账 + 到期监控,临期自动续期 - 申请前**自动预检**:发行版、nginx / certbot 装没装、80 端口被谁占、DNS 解析通不通,不通过就告诉你卡在哪 - DNS-01 验证走云厂商 API,通配符证书也能签 - 每次申请/续期都有日志,失败原因可追溯 ### 5. 监控告警 + 站点探测 - 采集 CPU、内存、磁盘、负载,规则可配阈值与持续时长 - **站点探测**:从外部定时请求你的网站,校验状态码与页面关键字,连续失败 N 次才告警——避免网络抖动误报 - **日志关键字告警**:盯一个日志文件里的几个关键字(error / OOM / Failed password…),出现就告警。 按字节偏移增量读,不会重复报旧内容;首次扫描只建基线,不会把历史报错一次性刷满群; 支持排除关键字滤噪音、静默期防轰炸 - 通知渠道:**钉钉、企业微信、自定义 Webhook、自定义脚本** ### 5.1 网络工具箱:从这台机器看通不通 排障时真正要问的不是「这个地址通不通」,而是「**这台机器**到那个地址通不通」。 Ping / MTR 链路 / Traceroute / DNS 解析 / 端口探测 / HTTP 检测(状态码 + 各阶段耗时)/ 本机监听端口 / 连接与路由,选机器点一下就在目标机上跑。 命令前半段由后端固定,用户只能填目标地址与端口,参数走白名单校验——拼不出第二条命令。 ### 6. DNS 解析:四家厂商一个页面 - 阿里云、腾讯云、**Cloudflare**、**Gname**,解析记录的增删改查统一操作 - 凭据按厂商动态切换表单(Cloudflare 支持全局 Key 与 API Token 两种认证,靠字段是否含 `@` 自动分流) - Cloudflare 专属:TTL=1 显示「自动」、小橙云「已代理」状态 ### 7. 到期台账:东西什么时候该续费 - 域名、服务器租期、其它资产统一登记 - 分四级预警:已过期 / 7 天内 / 30 天内 / 90 天内 - SSL 证书**实时**从证书模块合并进来,不重复录一份(日期会变,存两份迟早对不上) - 每天定时提醒一次,不刷屏 ### 8. 审计日志 + 高危脚本管控 - 每一次操作留痕:谁、什么时候、从哪个 IP、调了哪个接口、耗时多久、成功失败 - 风险分级,支持保留策略(保留 N 天) - 高危脚本库 + 危险命令规则库,命令执行前对照检查 ### 9. 权限与安全 - **RBAC 到按钮级**:角色可自由增删,权限树 40+ 节点,菜单和按钮分别勾选;勾子项自动补父级,改完立刻清缓存、重新登录生效 - **MFA 两步验证**:TOTP,带恢复码 - 登录验证码、凭据 AES-256-GCM 加密、接口全量鉴权 ### 10. 授权管理(License) - 一机一码(机器码首次算出即固定,容器重建、换网卡都不漂) - **未激活 = 7 天试用**,从首次启动算起 - 到期后:**仍可登录**,除授权页外全部接口停用,页面自动跳授权页 - 可限服务器台数上限,超了拒绝新增 - **授权码由 RSA-2048 非对称签名,只有授权方签得出来**(详见第四节) ### 11. 体验细节 - 深色 / 浅色主题、界面字号可调 - 顶栏「使用教程」跟着当前页面走,进入某页自动定位到对应章节 - 表格列宽、空状态、加载态都按真实数据调过 --- ## 二、界面预览 > 以下均为真实运行界面(深色主题)。 ### 仪表盘 服务器、证书、到期、未恢复告警四个关键数一眼看完,下面是实时资源占用和临期证书。 ![仪表盘](docs/screenshots/dashboard.png) ### 服务器 台账 + 连接状态 + 一键进终端 / 文件管理。 ![服务器](docs/screenshots/server.png) ### 批量命令 选多台机器、填一条命令或用模板,并发执行后逐台回收输出。 ![批量命令](docs/screenshots/cmd.png) ### 日志查看 9 个预置日志源自动探测,选机器选日志直接看,支持关键字过滤。 ![日志查看](docs/screenshots/logs.png) 日志文件也能直接在服务器上找——按目录翻,或者看「最近 3 天还在写」的: ![在服务器上找日志](docs/screenshots/log-picker.png) ### 日志监控 盯住日志里的关键字,出现就告警。按字节偏移增量读,不重复报旧内容;首次扫描只建基线。 ![日志监控](docs/screenshots/logwatch.png) ### 网络工具箱 从目标机器发起 Ping / MTR / DNS / 端口 / HTTP 探测,命令固定,只填目标地址。 ![网络工具箱](docs/screenshots/toolbox.png) ### 证书管理 证书台账、剩余天数、线上生效状态探测、自动续期开关。 ![证书管理](docs/screenshots/cert.png) ### 监控告警 CPU / 内存 / 磁盘 / 负载采集与告警记录。 ![监控告警](docs/screenshots/monitor.png) ### DNS 解析 阿里云、腾讯云、Cloudflare、Gname 四家厂商,一个页面管解析记录。 ![DNS 解析](docs/screenshots/dns.png) ### 到期台账 域名、服务器租期、其它资产,按已过期 / 7 天 / 30 天 / 90 天分级。 ![到期台账](docs/screenshots/expire.png) ### 审计日志 谁、什么时候、从哪个 IP、调了哪个接口、耗时多久、成功还是失败。 ![审计日志](docs/screenshots/audit.png) ### 角色权限 角色可自由增删,权限树到按钮级,勾子项自动补父级。 ![角色权限](docs/screenshots/role.png) ### 授权管理 机器码、授权状态、剩余天数、服务器配额、授权码激活。 ![授权管理](docs/screenshots/license.png) ### 系统设置 账号安全(改密码 / 两步验证)、系统参数(审计保留天数)、界面偏好。 ![系统设置](docs/screenshots/setting.png) --- ## 三、一键安装 ### 环境要求 | 项目 | 要求 | | --- | --- | | 系统 | Linux(CentOS 7+ / Rocky / Ubuntu 20.04+,x86_64) | | Docker | 20.10+,含 Docker Compose v2 | | 内存 | ≥ 2 GB(构建期建议 4 GB) | | 磁盘 | ≥ 10 GB | | 网络 | 构建时需联网拉 Maven / npm 依赖 | 没装 Docker 就先装: ```bash curl -fsSL https://get.docker.com | bash systemctl enable --now docker ``` ### 三步起来 ```bash git clone https://gitee.com/taokaji/system-tools.git cd system-tools chmod +x install.sh && ./install.sh ``` 脚本会自动做这些事: 1. 检查 Docker 与 Compose 2. 生成 `.env`——**两个密钥全部随机生成**(数据库口令、凭据加密密钥),端口被占用自动顺延 3. `docker compose up -d --build`:拉起 MySQL、后端、前端三个容器,MySQL 首次启动自动执行 `sql/init.sql` 4. 轮询等待服务就绪,然后打印访问地址 首次构建要下载 Maven 和 npm 依赖,**5~15 分钟**。完成后: ``` 访问地址 http://<服务器IP>:8080 初始账号 admin / admin123 授权状态 7 天试用 ``` > 端口不是 8080 的话,以脚本最后打印的为准(`.env` 里的 `WEB_PORT`)。 ### 日常运维 ```bash ./install.sh logs # 看实时日志 ./install.sh restart # 重启 ./install.sh status # 看容器状态 ./install.sh update # 拉了新代码后重新构建 ./install.sh stop # 停止 ./install.sh uninstall # 删除容器(数据库卷保留) ``` ### 用已有的 MySQL 不想用内置数据库:编辑 `.env`,把 `COMPOSE_PROFILES=db` 这行删掉,改成你自己的库: ```dotenv MYSQL_HOST=10.0.0.5 MYSQL_PORT=3306 MYSQL_DB=ops_platform MYSQL_USER=root MYSQL_PASSWORD=你的密码 ``` 然后手工导入一次表结构:`mysql -uroot -p ops_platform < sql/init.sql`,再 `./install.sh`。 ### 环境变量 | 变量 | 说明 | | --- | --- | | `WEB_PORT` | 网页访问端口,默认 8080 | | `API_PORT` | 后端端口,默认 8080 | | `MYSQL_*` | 数据库连接 | | `OPS_CRYPTO_SECRET` | 服务器密码等凭据的加密密钥,**换了之后已存的凭据会解不开** | | `OPS_TRIAL_DAYS` | 未激活时的试用天数,默认 7 | > 授权码不再依赖任何环境变量密钥:校验用的是内置在程序里的 RSA 公钥, > 签发用的私钥由授权方离线保管,部署环境里不存在、也不需要任何签发凭据。 --- ## 四、授权流程 ```text 安装完成 → 7 天试用(功能全开) ↓ 到期未激活 可以登录,系统停用 → 顶栏红标「授权已过期」,自动跳授权页 ↓ 复制机器码发给服务商 服务商签发授权码 → 粘贴激活 → 立即恢复,不用重启 ``` 页面位置:**系统管理 → 授权管理** - 机器码形如 `OPSM-A15D-DC3D-EC7A-5B9E` - 授权码形如 `OPSLIC.xxxxx.yyyyy`,与机器码绑定,换机器不通用 - 激活后可看到:授权方、到期时间、服务器配额使用情况 ### 授权码为什么签不出来 - 授权码用 **RSA-2048 非对称签名**,程序里只内置公钥(能验不能签), 签发私钥由授权方离线保管,不进代码库、不进镜像、不进环境变量 - 判定只认签名:每次读状态都重新验一遍库里存的授权码原文, 直接改 `ops_license` 表的状态、到期时间、配额都不会生效 - 试用期起点和系统时钟锚点都有防篡改校验值,改库或回拨系统时间会被识别并停用 - 授权页面没有任何生成入口,客户只能粘贴授权方给的码 签发与续期的操作流程见 `docs/授权签发说明.md`。 --- ## 五、目录结构 ```text backend/ Spring Boot 服务(module/ 下按业务模块划分) frontend/ Vue 3 前端 sql/init.sql 全量建表 + 初始数据(MySQL 首次启动自动执行) sql/migrate-*.sql 版本升级用的增量脚本 docker-compose.yml 编排(MySQL / 后端 / 前端) install.sh 一键安装与日常运维入口 .env.example 环境变量模板 docs/授权签发说明.md 授权码的签发与续期流程(授权方看) ``` --- ## 六、常见问题 **构建卡住不动?** 多半是 Maven / npm 拉包慢。后端 Dockerfile 已配阿里云 Maven 镜像,前端配了 npmmirror。仍卡的话看实时日志:`./install.sh logs`。 **忘记 admin 密码?** 进数据库重置(`sys_user` 表),或删掉该用户让 `DataInitializer` 重建初始账号。 **日志监控挂上去了却没告警?** 正常。首次扫描只记录当前位置作为基线,不会把历史报错一次性刷出来。想立刻验证规则有没有配对,点列表里的「立即检查」。 **想换端口?** 改 `.env` 里的 `WEB_PORT`,然后 `./install.sh restart`。 **数据没了?** `./install.sh uninstall` 不会删数据卷。只有显式 `docker volume rm ops-platform_mysql-data` 才会真删。 --- ## 七、许可 本仓库代码仅供授权用户部署使用。系统内置授权机制:未激活时提供 7 天试用,到期后需取得授权码方可继续使用。