# tomcat-manager **Repository Path**: lazy_y/tomcat-manager ## Basic Information - **Project Name**: tomcat-manager - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-09 - **Last Updated**: 2026-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tomcat Manager 基于 Electron 构建的 **Tomcat & Nginx 桌面管理工具**,面向 Windows 环境,提供可视化的服务启停、状态监控、日志管理、批量操作等功能。 --- ## 🚀 环境要求 | 依赖项 | 版本/说明 | | --- | --- | | Node.js | **18.16.0** | | npm | 随 Node.js 附带 | | 操作系统 | Windows(x64 / ia32) | | Tomcat | 本地已安装,支持 shutdown.bat / startup.bat 管理 | | Nginx | 本地已安装,需开启 `ngx_http_stub_status_module`(用于状态监控) | --- ## 📦 快速开始 ```bash # 安装依赖 npm install # 启动开发模式(应用以 --dev 参数运行) npm start # 构建安装包(64 位) npm run build # 构建 32 位安装包 npm run build:ia32 # 仅打包(不生成安装包) npm run pack ``` 构建产物输出到 `dist/` 目录,安装包使用 NSIS 格式,支持自定义安装路径、桌面快捷方式和开始菜单快捷方式。 > **管理员权限说明**:安装时需要管理员权限运行安装程序。安装后通过双击快捷方式启动时,使用 **Windows 计划任务**(Task Scheduler)机制静默获取管理员权限,**不会弹出 UAC 对话框**,实现无感提权运行。 --- ## 🎯 核心功能 ### 1. Tomcat 管理 - 支持配置**多台 Tomcat** 实例,卡片式展示 - 支持**分类分组**(Category),可按分组筛选和批量操作 - 点击单个服务器:弹出操作菜单(启动 / 停止 / 重启) - 通过 `startup.bat` / `shutdown.bat` 脚本启动与停止 - **端口检测**:TCP Socket 连接检测,确认服务是否启动成功 - **HTTP 验证**:可选配置 `testUrl`,通过 HTTP 请求进一步验证服务可用性 - **智能重启流程**(8 步自动执行,自动判断 Nginx 配置关联): 1. 检测端口是否在 Nginx 配置中 2. 注释 Nginx 端口转发配置(如有关联) 3. 重载 Nginx(如有关联) 4. 执行 Tomcat 关闭脚本 5. 等待端口释放(超时自动 `taskkill /F` 强制终止) 6. 执行 Tomcat 启动脚本 7. 等待启动验证(端口检测 + HTTP 接口验证) 8. 恢复 Nginx 配置并重载(如有关联) - 支持 **强制终止进程**(`taskkill /F`) - **批量重启**:支持按分组筛选,只重启指定分组的 Tomcat - **批量停止**:仅选择"所有分组"时停止 Nginx;选择特定分组时**保留 Nginx 运行**,确保其他分组不受影响 ### 2. Nginx 管理 - 启动 / 停止 / 重载 / 配置测试 - 配置文件修改时自动备份(`nginx.conf.bak`),操作完成后自动清理 - 重启时自动检测并注释/恢复关联的 Tomcat 端口转发配置行 - 配置测试通过 `nginx -t` 执行,返回语法检查结果 - 支持管理员权限下的服务操作 ### 3. Nginx 实时状态监控 - 基于 `ngx_http_stub_status_module` 模块 - 自动向 Nginx 配置添加 `nginx_status` 端点 - 每 **30 秒** 自动刷新,展示以下指标: - 活跃连接数 (Active Connections) - 总连接数 (Accepted Connections) - 总请求数 (Total Requests) - 读取 / 写入 / 等待中的连接数 ### 4. Nginx 日志分割 - 基于 `node-schedule` 定时调度 - 支持**自定义每日分割时间**(多时段可选:0:00 / 2:00 / 4:00 / 00:00 等) - 支持**手动立即分割**当前日志(access.log / error.log) - 分割时将日志文件重命名为带时间戳的 `.bak` 文件,Nginx 自动重建新日志 - **开机自动启动 Nginx 前**,先执行一次日志切割,避免日志无限膨胀 ### 5. Windows 服务管理 - Nginx 通过 Windows 计划任务实现开机自启(`schtasks /sc onstart`) - 将 Tomcat 安装/卸载为 Windows 服务(通过 `service.bat`) - 服务状态查询(已安装 / 未安装 / 运行中) - **一键安装/卸载所有服务**(含 Tomcat 服务 + Nginx 计划任务) ### 6. 系统托盘 - 最小化到系统托盘,后台运行 - 托盘菜单:打开窗口 / 重启所有 / 停止所有 / 系统配置 / 退出 - 托盘双击打开主窗口 - 操作完成后**气泡通知** - 支持更新状态气泡通知(发现新版本 / 下载完成) ### 7. 配置管理 - 配置文件持久化至 `%APPDATA%/Tomcat Manager/config.json` - 支持**导入/导出**配置文件(导出到指定目录,带时间戳文件名) - 旧配置自动迁移至新格式 - 配置对话框采用 **三 Tab** 布局: - **Nginx 配置**:安装路径、配置文件路径、状态监控端口、日志分割开关及时间 - **Tomcat 配置**:多实例信息、分类分组、启动/停止脚本、测试接口 URL - **系统配置**:开机自启、服务自动启动、窗口行为、**自动更新**、Windows 服务管理 ### 8. 开机自启动 - 通过 Windows 注册表(`HKCU\Software\Microsoft\Windows\CurrentVersion\Run`)控制 - 支持图形化开关,实时读取注册表状态 ### 9. 服务自动启动 - 程序启动时可**自动启动 Nginx**(如果未运行),启动前先切割日志 - 程序启动时可**自动启动所有已启用的 Tomcat** 实例 - 可**手动一键启动所有服务**(Nginx + 所有 Tomcat) - 启动前检查服务是否已在运行,避免重复启动 - 启动延迟 3 秒,确保系统初始化完成 ### 10. 自动更新 - 基于 `electron-updater` 实现增量更新 - 支持配置自定义**更新检测地址**(generic provider,任意 HTTP 静态文件服务器) - 程序启动后 **8 秒自动检测更新**(仅打包版本生效) - 发现新版本后**后台静默下载**,不影响正常使用 - 下载完成后按钮变为「安装更新并重启」,点击即可**自动替换并重启** - 在「系统配置 → 自动更新」中可**手动检查更新**或关闭自动检测 - 支持通过系统托盘**气泡通知**提示更新状态 - 支持查看下载进度(百分比 + 文件大小) ### 11. 单实例运行 - Electron `app.requestSingleInstanceLock()` + 锁文件双重保障 - 重复启动时自动聚焦已有窗口并提示 ### 12. 管理员权限静默启动 - 安装时提示需要管理员权限运行安装程序 - 安装后通过 **Windows 计划任务**(Task Scheduler)+ **VBS 启动器**实现静默提权 - 双击快捷方式启动时**不弹出 UAC 对话框**,自动以管理员权限运行 - 程序启动时自动检测并记录当前权限状态 ### 13. 启动日志系统 - 自动记录程序启动全流程,方便排障 - **三重输出**:文件写入(`startup.log`)+ 内存缓存(最近 500 行)+ 控制台输出 - 记录信息包括:PID、Electron/Node/Chrome 版本、平台架构、管理员权限、命令行参数等 - 日志文件超过 **1MB** 自动备份为 `.bak.log` - 捕获 `uncaughtException` 和 `unhandledRejection` 并写入日志 - 界面中可**查看启动日志**(支持刷新和打开日志目录) - 应用退出时记录退出事件并安全关闭日志流 --- ## 🏗️ 技术栈 | 层级 | 技术 | | --- | --- | | 应用框架 | Electron 18.x | | 运行时 | Node.js 18.16.0 | | 构建打包 | electron-builder (NSIS) | | HTTP 请求 | axios | | 定时调度 | node-schedule | | 自动更新 | electron-updater | | 权限提升 | sudo-prompt + Windows Task Scheduler(静默提权) | | 进程安全 | contextIsolation + preload.js contextBridge | | 安装脚本 | NSIS 自定义脚本(`build/installer.nsh`) | | 静默启动 | VBScript 启动器 + 计划任务(`schtasks`) | --- ## 📁 项目结构 ``` tomcat-manager/ ├── main.js # 主进程:核心业务逻辑、40+ IPC 处理器、启动日志、系统托盘等 ├── preload.js # 预加载脚本:安全的 contextBridge IPC 桥接 ├── renderer.js # 渲染进程:UI 交互、事件处理、批量操作对话框 ├── index.html # 主界面:左右双栏布局 + 三 Tab 配置模态框 + 启动日志对话框 + 分类选择对话框 ├── index_simple.html # 简化版界面(无 Tab 导航) ├── styles.css # 样式表(含深色终端风格启动日志样式) ├── package.json # 项目配置与依赖 ├── icon.ico # 应用图标 ├── build/ │ └── installer.nsh # NSIS 自定义安装脚本(管理员权限 + 计划任务 + VBS 启动器) └── README.md ``` --- ## 📝 配置说明 首次运行后,在 `%APPDATA%/Tomcat Manager/config.json` 自动生成配置文件: ```json { "nginx": { "installPath": "D:\\nginx", "configPath": "D:\\nginx\\conf\\nginx.conf", "statusPort": 80, "statusEnabled": false, "logRotateEnabled": false, "logRotateTime": "0:00" }, "tomcats": [ { "name": "Tomcat-8080", "category": "默认分组", "host": "127.0.0.1", "port": 8080, "startBatPath": "D:\\tomcat\\bin\\startup.bat", "stopBatPath": "D:\\tomcat\\bin\\shutdown.bat", "testUrl": "http://localhost:8080", "enabled": true, "serviceRegistered": false } ], "sys": { "autoStartEnabled": false, "minimizeToTray": true, "showNotifications": true, "autoStartNginx": false, "autoStartTomcat": false, "updateUrl": "", "autoUpdateEnabled": true } } ``` ### 配置字段说明 | 字段 | 说明 | | --- | --- | | `nginx.installPath` | Nginx 安装目录(含 nginx.exe) | | `nginx.configPath` | Nginx 配置文件完整路径 | | `nginx.statusPort` | nginx_status 端点监听端口 | | `nginx.statusEnabled` | 是否启用 Nginx 状态监控 | | `nginx.logRotateEnabled` | 是否启用定时日志分割 | | `nginx.logRotateTime` | 每日日志分割时间(如 "2:00") | | `tomcats[].category` | Tomcat 分组名称,默认 "默认分组" | | `tomcats[].host` | Tomcat 监听地址 | | `tomcats[].port` | Tomcat 监听端口 | | `tomcats[].startBatPath` | 启动脚本路径 | | `tomcats[].stopBatPath` | 停止脚本路径 | | `tomcats[].testUrl` | HTTP 验证 URL(可选) | | `tomcats[].enabled` | 是否启用该实例 | | `sys.autoStartEnabled` | 程序自身开机自启 | | `sys.autoStartNginx` | 程序启动时自动启动 Nginx | | `sys.autoStartTomcat` | 程序启动时自动启动所有 Tomcat | | `sys.updateUrl` | 自动更新检测地址 | | `sys.autoUpdateEnabled` | 是否启用自动检查更新 | 也可通过应用内的「系统配置」对话框进行可视化配置,或使用导入/导出功能迁移配置。 --- ## ⚙️ 开发说明 - `npm start` 以 `--dev` 参数启动,此时日志会详细输出到控制台 - 主进程使用 `ipcMain.handle` 暴露 40+ 个 API,渲染进程通过 `preload.js` 的 `contextBridge` 安全调用 - 进程隔离已开启(`contextIsolation: true`),请勿在渲染进程中直接使用 Node.js API - 所有 Windows 系统命令(`tasklist`、`reg`、`sc`、`net`、`taskkill`、`schtasks`)通过 `child_process.exec` 执行 ## 🔄 自动更新部署指南 ### 1. 构建更新包 ```bash # 构建安装包(构建时生成 latest.yml 版本元数据) npm run build # 产物目录 dist/ 中会包含: # Tomcat Manager Setup x.x.x.exe (安装包) # Tomcat Manager Setup x.x.x.exe.blockmap (差异更新数据) # latest.yml (版本元数据文件) ``` ### 2. 部署到更新服务器 将 `dist/` 目录中的所有文件上传到 HTTP 静态文件服务器,例如: ``` https://example.com/updates/ ├── latest.yml ├── Tomcat Manager Setup 1.0.0.exe ├── Tomcat Manager Setup 1.0.0.exe.blockmap ├── Tomcat Manager Setup 1.0.1.exe ├── Tomcat Manager Setup 1.0.1.exe.blockmap └── latest.yml ← 此文件指向最新版本 ``` > 每次发布新版本后,只需覆盖 `latest.yml` 并上传新的 `.exe` 和 `.blockmap` 文件即可。 ### 3. 配置客户端 在程序的「系统配置 → 自动更新」中填入更新服务器地址,例如: ``` https://example.com/updates/ ``` ⚠️ **注意**:地址必须以 `/` 结尾。 --- ## 📄 License MIT © huangyh