# Service Management 一个轻量级的服务进程管理平台,用于统一管理本地或远程服务的启动、停止、日志查看和端口冲突处理。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Java 17 + Spring Boot 3.2 | | 前端 | Vue 3 + TypeScript + Vite | | UI | PrimeVue (Aura Theme) + PrimeIcons | | 部署 | 统一打包为单一 JAR,前后端同端口 | ## 功能特性 - **服务管理** — 创建、编辑、删除服务配置 - **多终端支持** — CMD、PowerShell、Git Bash、SSH 远程执行 - **启动命令引擎** — 支持多行命令、`[可选片段]` 语法、`{{变量}}` 替换 - **进程管理** — 后台启动、PID 追踪、优雅停止(10s 超时后强制终止) - **PID 持久化** — 进程 PID 写入磁盘,应用重启后自动恢复运行状态 - **实时日志** — 在线查看服务输出,支持多种字符编码(UTF-8、GB18030 等) - **Web 界面跳转** — 配置 Web URL 后,点击运行中的服务卡片可直接在浏览器中打开 - **端口冲突管理** — 自动检测端口占用,查看占用进程详情,确认后一键终止 - **一键启停** — 支持一键启动/停止所有服务 - **统一部署** — 前端编译后嵌入 Spring Boot 静态资源,单一 JAR 部署 ## 快速开始 ### 环境要求 - **Java** 17+ - **Maven** 3.6+ - **Node.js** 18+(仅构建前端时需要) ### 构建 & 运行 **Windows:** ```bash run.bat build run.bat run ``` **Linux / macOS / Git Bash:** ```bash chmod +x run.sh ./run.sh build ./run.sh run ``` 构建完成后,浏览器访问 **http://localhost:3945** ### 单独运行(已构建) ```bash cd backend java -jar target/service-management-1.0.0.jar ``` ## 项目结构 ``` service-management/ ├── backend/ # Spring Boot 后端 │ ├── pom.xml │ └── src/main/ │ ├── java/com/svcman/ │ │ ├── controller/ # REST API 控制器 │ │ ├── model/ # 数据模型 │ │ ├── repository/ # JSON 文件持久化存储 │ │ ├── service/ # 核心业务逻辑 │ │ └── config/ # Web 配置(CORS、SPA 路由) │ └── resources/ │ ├── application.yml │ ├── logback-spring.xml │ └── static/ # 前端构建产物(自动生成) ├── frontend/ # Vue 3 前端 │ ├── package.json │ ├── vite.config.ts │ └── src/ │ ├── api/ # Axios API 层 │ ├── components/ # Vue 组件 │ └── main.ts ├── data/ # 运行时数据(自动生成,不入版本库) │ ├── services.json # 服务配置持久化 │ └── pids/ # PID 文件持久化 ├── logs/ # 运行日志(自动生成,不入版本库) ├── run.bat # Windows 构建运行脚本 └── run.sh # Linux/macOS 构建运行脚本 ``` ## API 接口 | 方法 | 路径 | 说明 | |------|------|------| | `GET` | `/api/services` | 获取所有服务 | | `GET` | `/api/services/{id}` | 获取单个服务 | | `POST` | `/api/services` | 创建服务 | | `PUT` | `/api/services/{id}` | 更新服务 | | `DELETE` | `/api/services/{id}` | 删除服务 | | `POST` | `/api/services/{id}/start` | 启动服务 | | `POST` | `/api/services/{id}/stop` | 停止服务 | | `POST` | `/api/services/start-all` | 一键启动 | | `POST` | `/api/services/stop-all` | 一键停止 | | `GET` | `/api/services/{id}/log` | 获取服务日志 | | `GET` | `/api/services/{id}/web-url` | 获取解析后的 Web URL | | `GET` | `/api/services/{id}/port-check` | 检查端口占用 | | `POST` | `/api/services/{id}/kill-port/{pid}` | 终止占用端口的进程 | ## 启动命令语法 启动命令支持多行,每行一条命令,按顺序执行: ``` mvn package java -jar [--server.port={{SERVER_PORT}}] target/app-1.0.0.jar ``` | 语法 | 说明 | 示例 | |------|------|------| | `{{VAR}}` | 自定义变量占位符 | `{{SERVER_PORT}}` | | `[content]` | 可选片段,仅当内部所有变量都有值时才保留 | `[--port={{PORT}}]` | | `{{VAR:default}}` | 带默认值的变量(仅用于 Web URL) | `{{PORT:8080}}` | ## 配置说明 服务配置存储在 `data/services.json`,主要字段: ```json { "name": "用户服务", "description": "用户管理微服务", "startupCommand": "java -jar [--server.port={{SERVER_PORT}}] app.jar", "workDir": "D:/projects/user-service", "terminalType": "CMD", "variables": [ { "name": "SERVER_PORT", "value": "8080" } ], "webUrl": "http://localhost:{{SERVER_PORT:8080}}/index.html", "logEncoding": "UTF-8" } ``` ## License MIT