# system-env **Repository Path**: JackTim/system-env ## Basic Information - **Project Name**: system-env - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-12 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 系统服务管理器 一个强大的**双环境服务管理工具**,支持 **Java JAR 服务** 和 **Python 脚本服务** 的完整生命周期管理。提供 **GUI 桌面应用** 和 **Web 仪表盘** 两种操作方式,附带文件上传部署、网络端口监控等功能。 ## ✨ 主要功能 ### 🖥️ GUI 桌面应用 - 🚀 **双环境支持**: 统一管理 Java JAR 服务和 Python 脚本服务 - 📊 **实时监控**: 彩色控制台输出,日志文件自动监控 - 💾 **配置持久化**: 窗口布局、服务配置、进程号自动保存 - 🔍 **智能解析**: ANSI 颜色代码解析,日志级别着色 - 🎯 **唯一标识**: 基于 Hash 的服务识别,避免重名问题 - ⚡ **状态控制**: 按钮智能启用/禁用,防止误操作 - 🔄 **托盘图标**: 最小化到系统托盘,后台运行 - 🔐 **关闭确认**: 可选的关闭对话框,防止误关闭 - 🔌 **端口检测**: 创建/编辑服务时自动检测端口冲突 - 🔘 **分组工具栏**: 按钮按功能分组(服务管理 / Web / 日志 / 主题),竖线分隔 - 📋 **下拉菜单**: 「❗ 批量操作」和「☰ 更多」采用弹出菜单,收纳低频操作 - 🚀 **开机自启动**: 支持 Windows(注册表)、Linux(autostart)、macOS(LaunchAgent)三平台 - 🔄 **服务自动恢复**: 为单个服务标记「启动时自动恢复」,软件意外关闭后自动重启 ### 🌐 Web 仪表盘 - 📊 **总览仪表盘**: 服务状态、资源使用、端口占用概览 - 🔌 **端口监控**: 实时显示端口占用状态、冲突检测 - 📤 **文件上传**: 支持 ZIP/RAR 格式,分片上传(最大 500MB) - 📦 **上传并解压**: 上传压缩包后自动解压到目标目录 - 🗜️ **打包并部署**: 从分散文件打包成 ZIP 并部署 - 📁 **目录选择器**: 可视化浏览和选择目录(跨平台支持) - ⏱️ **实时进度**: SSE 技术实现真实进度推送 - 🌓 **主题切换**: 支持亮色/夜间模式,自动跟随系统 - 💾 **配置记忆**: 表单配置和目录选择自动保存 - 📱 **响应式设计**: 适配不同屏幕尺寸 ### 🐍 Python 环境管理 - 📝 **脚本配置**: Python 脚本路径、解释器、参数配置 - 🔧 **虚拟环境**: 自动检测、创建和管理虚拟环境 (venv) - 📦 **Pip 镜像源**: 镜像源列表管理,一键切换 - 🔍 **路径扫描**: 自动扫描系统 Python 安装路径 ### ☕ Java 环境管理 - ⚙️ **JVM 配置**: JVM 参数、应用参数、工作目录自定义 - 🔗 **JDK 管理**: 扫描系统 JDK 路径,默认 JDK 设置 - 🐞 **调试支持**: 远程调试配置 (端口、Suspend 模式) - 💚 **健康检查**: HTTP 请求检测服务 UP/DOWN 状态 ### 🔌 端口管理 - 🔍 **端口扫描**: 扫描系统所有监听端口及占用进程 - ⚡ **冲突检测**: 创建/编辑服务时自动检测端口是否被占用 - 📋 **状态展示**: 仪表盘展示所有已配置服务的端口状态 - 🛡️ **智能提示**: 端口冲突时弹窗确认,防止无感知覆盖 ## 🏗️ 架构设计 项目采用**策略模式 (Strategy Pattern)** 统一管理多运行环境: ``` EnvironmentStrategy (抽象基类) ├── JavaEnvironmentStrategy → Java 服务管理 └── PythonEnvironmentStrategy → Python 脚本管理 EnvironmentFactory → 注册和创建策略实例 ``` 通过 `EnvironmentType` 枚举扩展新环境类型,预留了 Node.js、Go、.NET 等扩展点。 ## 📁 项目结构 ``` system-env/ ├── run.py # 程序入口(GUI + Web) ├── build.py # 跨平台打包脚本(PyInstaller) ├── migrate_to_db.py # JSON 配置迁移至 SQLite ├── optimize_icon.py # 图标优化工具 ├── requirements.txt # 依赖列表 ├── java_config.json # Java 服务配置 ├── python_config.json # Python 服务配置 ├── global_config.json # 全局配置 ├── src/ # GUI 源代码 │ ├── main_app.py # 主应用窗口 │ ├── config/ │ │ ├── config_manager.py # 配置加载/保存 │ │ ├── db_config_manager.py # SQLite 数据库配置管理 │ │ └── environment_types.py # 环境类型枚举 │ ├── core/ │ │ ├── environment_strategy.py # 策略模式基类 + 工厂 │ │ ├── process_manager_base.py # 进程管理基类 │ │ ├── process_manager.py # JAR 进程管理器 │ │ ├── python_process_manager.py # Python 进程管理器 │ │ ├── log_watcher.py # 日志文件监控 │ │ └── port_manager.py # 网络端口管理器 │ ├── strategies/ │ │ ├── java_strategy.py # Java 环境策略 │ │ └── python_strategy.py # Python 环境策略 │ ├── envs/ │ │ ├── java_env/ │ │ │ └── ui/ # Java 配置对话框 │ │ └── python_env/ │ │ └── ui/ # Python 配置对话框 │ │ └── venv_manager.py # 虚拟环境管理器 │ ├── ui/ │ │ ├── ui_components.py # UI 通用组件 │ │ ├── config_dialog_base.py # 配置对话框基类 │ │ ├── environment_selector.py # 环境选择对话框 │ │ └── theme_manager.py # 主题管理器 │ └── utils/ │ └── log_parser.py # 日志解析器 ├── web/ # Web 端源代码 │ ├── main.py # FastAPI 应用(路由+API) │ ├── services/ │ │ ├── dashboard_service.py # 仪表盘数据服务 │ │ ├── upload_service.py # 上传服务 │ │ └── package_service.py # 打包服务 │ ├── templates/ │ │ ├── dashboard.html # 仪表盘主页 │ │ └── envs/ │ │ └── python_env/html/ # Python 环境 Web 管理 │ └── static/ │ ├── js/ │ │ ├── component-loader.js # 组件加载器 │ │ ├── theme.js # 主题管理 │ │ └── toast.js # 提示组件 │ └── components/ │ └── directory-picker.html # 目录选择器 ├── docs/ # 文档 │ ├── PROJECT_STRUCTURE.md │ └── LOG_PARSER_GUIDE.md └── resources/ # 资源文件 ``` ## 🚀 快速开始 ### 环境要求 - Python 3.7+ - Tkinter(通常随 Python 一起安装) ### 安装依赖 ```bash # GUI 依赖 pip install psutil pystray # Web 端依赖 pip install fastapi uvicorn jinja2 aiofiles python-multipart ``` ### 运行程序 #### 方式1:GUI 桌面应用 ```bash python run.py ``` **启动流程**: 1. 显示环境选择对话框(Java / Python) 2. 启动 Tkinter GUI 主界面 3. 自动启动 Web 服务(http://localhost:8000) 4. 系统托盘图标支持 #### 方式2:仅 Web 服务 ```bash cd web uvicorn main:app --host 0.0.0.0 --port 8000 ``` **访问地址**: - 仪表盘: http://localhost:8000 - API文档: http://localhost:8000/docs ### 打包构建 ```bash python build.py ``` 自动检测平台并打包为可执行文件: - **Windows**: `系统管理部署器.exe` - **Linux**: `系统管理部署器` (ELF) - **macOS**: `系统管理部署器.app` ## 📖 使用指南 ### GUI 桌面应用 #### 1. 工具栏概览 工具栏按钮按功能分组,使用竖线分隔: | 分组 | 按钮 | 功能说明 | |------|------|----------| | **① 服务管理** | ▶ 全部启动 / ⏹ 全部停止 | 一键启停所有服务 | | | ❗ 批量操作 | 弹出菜单 → 启动选中 / 停止选中 | | | ⚙ JDK设置 / ⚙ Python设置 | 打开环境配置对话框 | | **② Web** | 🌐 启动Web / 🌐 打开Web | 启动或打开 Web 仪表盘 | | **③ 日志** | 🔄 刷新日志 | 手动刷新控制台日志 | | | ▶ 监控日志 / ⏹ 监控日志 | 开启/关闭日志自动跟随 | | **④ 主题 & 更多** | 🌙 主题 / ☀️ 主题 | 切换亮色/夜间模式 | | | ☰ 更多 ▼ | 弹出菜单(端口设置、停止Web、用户管理等) | | | ✅ 开机启动 / ⬜ 开机启动 | 切换应用开机自启动状态 | | | 版本号 (v5.10) | 当前软件版本标识 | > "☰ 更多 ▼" 菜单包含:📋 应用日志 / 🗑 清空当前日志 / 🗑 清空全部日志 / 👤 用户管理 / ⏹ 停止Web服务 / ⚙️ Web端口设置 / 📥 最小化到托盘 / ☕ 切换环境 #### 2. 选择环境 启动时选择要管理的环境类型: - **Java 环境**: 管理 JAR 服务 - **Python 环境**: 管理 Python 脚本服务 #### 3. 添加服务 1. 点击左上角 "➕ 新增" 按钮 2. 选择服务类型(Java JAR / Python 脚本) 3. 填写配置信息(路径、参数、端口等) 4. 点击 "保存"(端口冲突时将自动检测并提示) #### 4. 启动服务 - 点击服务卡片上的 "▶ 启动" 按钮 - 在右侧控制台查看实时日志 #### 5. 查看日志 - **控制台**: 实时显示服务输出(带颜色) - **日志标签**: 点击 "👁 日志" 查看历史日志文件 #### 6. 停止服务 - 点击服务卡片上的 "⏹ 停止" 按钮 - 或点击 "⏹ 全部停止" 停止所有服务 - 停止 Web 服务:点击 "☰ 更多 ▼" → "⏹ 停止Web服务" #### 7. 端口检测 - 创建/编辑服务时,若配置了端口,系统自动检测端口是否被占用 - 冲突时弹出确认框:允许继续保存或取消修改 --- ### Web 仪表盘 #### 1. 总览仪表盘 访问 http://localhost:8000 即可查看: - **服务概览**: 总服务数、运行中、异常数量 - **端口状态**: 已占用端口列表、冲突检测结果 - **最近活动**: 近期操作日志 #### 2. 端口监控 仪表盘中的端口区域展示: - 系统所有监听端口及占用进程 - 已配置服务的端口状态(正常/冲突/系统占用) - 点击可查看详细信息(进程 PID、名称、连接状态) #### 3. 上传并解压 **适用场景**:已有打包好的 ZIP/RAR 应用 **步骤**: 1. 访问上传页面 2. 切换到 "上传并解压" 选项卡 3. 选择目标目录(支持可视化浏览) 4. 拖拽或点击上传 ZIP/RAR 文件 5. 等待自动解压完成 #### 4. 打包并部署 **适用场景**:需要从多个目录组装应用 **步骤**: 1. 切换到 "打包并部署" 选项卡 2. 填写服务名称 3. 选择 JAR 文件路径(必填) 4. 选择 Lib / Resources 目录(可选) 5. 选择部署目录(必填) 6. 勾选 "自动创建服务配置" 7. 点击 "📦 打包并部署" ## 🔧 高级功能 ### 策略模式扩展 预留的环境类型(`src/config/environment_types.py`): ```python class EnvironmentType(Enum): JAVA = "java" PYTHON = "python" # NODEJS = "nodejs" # 预留 # GO = "go" # 预留 # DOTNET = "dotnet" # 预留 ``` 新增环境只需实现 `EnvironmentStrategy` 接口并注册到工厂。 ### 开机自启动 支持三平台开机自启,无需额外配置: - **Windows**: 写入注册表 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemManager` - **Linux**: 创建 `~/.config/autostart/system-manager.desktop` 桌面文件 - **macOS**: 创建 `~/Library/LaunchAgents/com.systemmanager.plist` LaunchAgent 点击工具栏的「✅ 开机启动 / ⬜ 开机启动」按钮即可一键切换,状态实时显示。 ### 服务自动恢复 为重要服务开启「启动时自动恢复」,软件意外关闭后重新打开时会自动重启这些服务: 1. **配置**: 在新增/编辑服务的对话框中找到「启动选项」分组 2. **勾选**: "应用启动时自动重启此服务(软件意外关闭后自动恢复)" 3. **确认**: 保存后服务卡片会显示「🔄 启动时自动恢复」徽标 4. **生效**: 下次启动软件时,该服务将自动启动 注意:只有在启动时 PID 未匹配到运行中的进程时才会执行自动恢复,避免重复启动。 ### PID 持久化 即使程序意外关闭,下次启动时也能检测到仍在运行的服务。 ### Hash 唯一标识 每个服务都有唯一的 Hash 标识(基于路径生成),确保: - 服务名可以重复 - 修改服务名不影响 PID 关联 - 精确匹配,不会操作错误的服务 ### 日志智能解析 自动识别日志级别并着色: - 🔴 ERROR - 红色 - 🟡 WARN - 黄色 - 🟢 INFO - 绿色 - ⚪ DEBUG - 灰色 ### SQLite 数据库 支持将 JSON 配置文件迁移至 SQLite 数据库: ```bash python migrate_to_db.py ``` - 统一的 `services` 表管理所有环境服务 - CRUD 操作支持 - JSON ↔ 数据库双向兼容 ### 打包部署 使用 PyInstaller 跨平台打包: - 自动检测操作系统 - 图标自动转换(PNG → ICO / ICNS) - 包含完整 Web 资源和配置文件 - 单文件可执行,免安装 ## 📚 文档 ### 详细文档 - [项目结构说明](docs/PROJECT_STRUCTURE.md) - [日志解析器使用指南](docs/LOG_PARSER_GUIDE.md) ### Web 端技术栈 - **后端**: FastAPI + Uvicorn - **前端**: Jinja2 + 原生 JavaScript - **实时通信**: Server-Sent Events (SSE) - **组件化**: 自定义 ComponentLoader - **样式**: CSS3 + 夜间模式支持 ### API 文档 启动 Web 服务后访问: - Swagger UI: http://localhost:8000/docs - ReDoc: http://localhost:8000/redoc **主要接口**: | 接口 | 功能 | |------|------| | `GET /api/stats` | 获取仪表盘统计数据(含端口信息) | | `GET /api/ports/scan` | 扫描系统所有占用端口 | | `GET /api/ports/check?port=xxx` | 检查单个端口是否被占用 | | `GET /api/ports/conflicts` | 检测服务配置端口冲突 | | `POST /api/services` | 创建服务(含端口冲突检测) | | `PUT /api/services/{id}` | 更新服务(含端口冲突检测) | | `POST /api/upload/chunk` | 上传文件分片 | | `POST /api/upload/merge` | 合并分片并解压 | | `POST /api/upload/package` | 打包并部署(SSE) | ## 🛠️ 开发 ### 目录说明 #### GUI 端 - `src/config/` - 配置管理(JSON + SQLite) - `src/core/` - 核心功能(进程管理、日志监控、端口管理) - `src/strategies/` - 环境策略实现 - `src/envs/` - 各环境特有模块 - `src/ui/` - UI 组件 - `src/utils/` - 工具函数 #### Web 端 - `web/services/` - 业务逻辑层(MVC架构) - `web/templates/` - Jinja2 模板 - `web/static/js/` - JavaScript 模块 - `component-loader.js` - HTML组件加载器 - `theme.js` - 主题管理器 - `toast.js` - 提示组件 - `web/static/components/` - HTML组件库 ### 添加新功能 #### GUI 端 参考 [docs/PROJECT_STRUCTURE.md](docs/PROJECT_STRUCTURE.md) 中的开发指南。 #### 添加新环境 1. 在 `EnvironmentType` 枚举中添加新类型 2. 实现 `EnvironmentStrategy` 接口 3. 实现对应 `ProcessManager`(继承自 `ProcessManagerBase`) 4. 创建配置对话框 5. 注册策略到 `EnvironmentFactory` ## 📝 更新日志 ### v5.10 (2026-05-13) - ✅ 工具栏**布局优化** - 按钮分组(服务管理 / Web / 日志 / 主题),竖线分隔 - 「❗ 批量操作」和「☰ 更多」改为点击弹出菜单,修复 Windows 下 Menubutton 长按问题 - 所有按钮名称恢复为清晰完整的中文描述 - ✅ Web 服务停止日志去重,避免停止时重复打印 - ✅ 新增**开机自启动**功能 - 工具栏一键切换开机自启 - 支持 Windows(注册表)、Linux(autostart 桌面文件)、macOS(LaunchAgent)三平台 - 点击按钮即可开启/关闭,状态实时显示 - ✅ 新增**服务自动恢复**功能 - Java/Python 配置对话框新增「启动选项」分组,含"应用启动时自动重启此服务"复选框 - 服务卡片显示「🔄 启动时自动恢复」徽标 - 软件启动时自动重启标记了 auto_restart 的服务 ### v5.9 (2026-05-12) - ✅ 新增**网络端口管理**功能 - 创建/编辑服务时自动检测端口冲突 - 仪表盘展示端口占用和冲突状态 - 跨平台端口扫描(psutil/netstat 回退) ### v5.8 (2026-05-10) - ✅ 添加 Web 仪表盘总览页面 - ✅ 新增 Python 环境管理 - Python 脚本进程管理器 - 虚拟环境创建和检测 - Pip 镜像源管理 ### v5.7 (2026-05-08) - ✅ 策略模式架构重构 - ✅ 双环境支持(Java + Python) - ✅ 环境选择器(启动时选择) - ✅ 统一的数据库配置管理 ### v5.6 (2026-05-06) - ✅ SQLite 数据库迁移支持 - ✅ 跨平台打包脚本(PyInstaller) - ✅ 图标自动转换 ### v5.5 (2026-05-04) - ✅ 添加 Web 界面(FastAPI + Jinja2) - ✅ 文件上传(分片上传,最大 500MB) - ✅ ZIP/RAR 自动解压部署 - ✅ 打包并部署(SSE实时进度) - ✅ 跨平台目录选择器 - ✅ HTML 组件化架构(ComponentLoader) - ✅ 亮色/夜间模式切换 - ✅ 配置持久化(localStorage) ### v5.4 (2026-05-04) - ✅ 项目结构模块化重构 - ✅ 服务 Hash 唯一标识 - ✅ 按钮状态智能控制 - ✅ 孤儿进程检测和停止 - ✅ PID 持久化和自动恢复 - ✅ 日志智能解析和彩色显示 ### v5.3 (2026-05-03) - ✅ 窗口尺寸和面板布局持久化 - ✅ JDK 全局设置对话框优化 - ✅ 日志监控系统增强 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License --- **版本**: v5.10 **作者**: System Manager Team **更新时间**: 2026-05-13 **技术栈**: Python 3.7+ | Tkinter | FastAPI | SSE | SQLite | 原生 JavaScript