# deployment-management **Repository Path**: wsitm/deployment-management ## Basic Information - **Project Name**: deployment-management - **Description**: 基于 Spring Boot 3 + Vue 3 的分布式部署管理平台,采用 Server-Worker 架构: Server:统一管控(认证、调度、文件、监控) Worker:分布式执行(脚本、终端、下载) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-28 - **Last Updated**: 2026-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Deployment Management System
**轻量级分布式部署神器 - Server-Worker 架构** [![Java](https://img.shields.io/badge/Java-17-blue.svg)](https://openjdk.java.net/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.13-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.x-green.svg)](https://vuejs.org/)
--- ## 🎯 项目简介 基于 **Spring Boot 3 + Vue 3** 的分布式部署管理平台,采用 **Server-Worker** 架构: - **Server**:统一管控(认证、调度、文件、监控) - **Worker**:分布式执行(脚本、终端、下载) ### 核心功能 ✅ **JWT 鉴权** - ADMIN/USER 角色管理 ✅ **加密通讯** - RSA 握手 + WebSocket 加密传输 ✅ **Web 终端** - xterm.js + Pty4J 浏览器直连 ✅ **脚本管理** - 多脚本配置 + 一键批量执行 ✅ **节点监控** - 在线/离线状态实时追踪 ✅ **文件管理** - 上传/下载/分发一体化 ✅ **命令黑名单** - 正则拦截危险操作 ✅ **执行日志** - 完整记录可追溯 --- ## 🏗️ 系统架构 ``` ┌─────────────┐ │ Vue 3 UI │ │ (Element+) │ └──────┬──────┘ │ HTTP/WS ┌──────▼──────────────────────┐ │ Server (10088) │ │ Auth | Script | File │ │ Security | JPA | H2 DB │ └──────┬──────────────────────┘ │ WebSocket (RSA 加密) ┌───┴────┐ ▼ ▼ Worker1 Worker2 (10099) (10099) 任务执行 任务执行 ``` ### 技术栈 **后端**: Java 17 + Spring Boot 3.2.5 + Spring Security + JWT + JPA + H2 + WebSocket + Pty4J **前端**: Vue 3 + TypeScript + Element Plus + xterm.js + Pinia + Vite --- ## 📦 项目结构 ``` deployment-management/ ├── server/ # Server 端(管理控制) │ ├── controller/ # REST API │ ├── entity/ # JPA 实体 │ ├── security/ # Spring Security + JWT │ └── websocket/ # WebSocket 处理 ├── worker/ # Worker 端(任务执行) │ ├── engine/ # 任务引擎 │ ├── terminal/ # PTY 终端 │ └── websocket/ # WebSocket 客户端 └── ui/ # Vue 3 前端 ├── views/ # 页面视图 └── components/ # 组件 ``` --- ## 🚀 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - Node.js 18+ ### 启动步骤 **1. 启动 Server** ```bash cd server mvn spring-boot:run # 访问:http://localhost:10088 # 默认账号:admin / 123456 ``` **2. 启动 Worker** ```bash cd worker mvn spring-boot:run ``` **3. 启动前端** ```bash cd ui npm install npm run dev # 访问:http://localhost:5173 ``` --- ## ⚙️ 核心配置 ### Server (`application.yml`) ```yaml server: port: 10088 deploy: server: upload-dir: ./data/uploads script-log-dir: ./data/script-logs jwt-secret: "your-secret-key" # 生产环境请修改 ``` ### Worker (`application.yml`) ```yaml server: port: 10099 deploy: worker: name: "Worker-Node-1" server-url: "ws://localhost:10088/ws/worker" auth-token: "node1-secret-token" # 需与 Server 端一致 ``` ### 添加 Worker 节点 登录 Server → 节点管理 → 新增节点 → 填写信息(auth-token 必须匹配) --- ## 🔐 安全机制 ### 三重防护 1. **JWT 鉴权** - 用户登录验证,角色权限控制 2. **RSA 加密握手** - Worker 连接双向认证 3. **命令黑名单** - Server + Worker 双重校验危险指令 ### 内置黑名单示例 ```regex ^rm\s+-rf\s+/ # 禁止删除根目录 ^format\s+[cCdD]: # 禁止格式化磁盘 ^dd\s+if=.*of=/dev/ # 禁止破坏磁盘 ``` --- ## 🛠️ 生产部署 ### 打包 ```bash # Server cd server && mvn clean package -DskipTests # Worker cd worker && mvn clean package -DskipTests # 前端 cd ui && npm run build ``` ### 部署 ```bash # 启动 Server nohup java -Xms512m -Xmx1g -jar server.jar & # 启动 Worker nohup java -Xms256m -Xmx512m -jar worker.jar & # 前端使用 Nginx cp -r dist/* /usr/share/nginx/html/ nginx -s reload ``` --- ## 📊 数据库表 **sys_user** - 用户 (id, username, password, role) **sys_node** - 节点 (id, name, host, auth_token, status) **sys_script** - 脚本 (id, node_id, name, content, is_enabled, sort_order) **sys_log** - 执行日志 (id, node_id, script_id, execution_id, exit_code, status) **sys_blacklist** - 命令黑名单 (id, regex_pattern, description) --- ## 🔧 核心 API **认证**: `POST /api/auth/login` → `{token, role}` **节点**: `GET /api/nodes` | `POST /api/nodes` **脚本**: `GET /api/scripts/node/{nodeId}` | `POST /api/scripts` **执行**: `POST /api/dispatch/execute/{nodeId}` → `{executionId, status}` **文件**: `GET /api/files` | `POST /api/files/upload` | `GET /api/files/download` **日志**: `GET /api/script-logs/node/{nodeId}` | `GET /api/script-logs/{executionId}` **黑名单**: `GET /api/blacklist` | `POST /api/blacklist` (仅管理员) --- ## 💡 最佳实践 ### 脚本规范 ✅ 推荐: ```bash #!/bin/bash set -e log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"; } log "开始" # 检查环境 && 执行逻辑 log "完成" ``` ❌ 避免: ```bash cd /path && rm -rf * && git pull # 无错误处理 /home/user/deploy.sh # 硬编码路径 ``` ### 黑名单配置 优先级: P0 - 系统破坏 (`rm -rf /`) → P1 - 数据丢失 (`dd`) → P2 - 资源消耗 (fork 炸弹) --- ## 🔍 故障排查 | 问题 | 检查项 | |------|--------| | Worker 离线 | auth-token 匹配?网络通畅?防火墙? | | 脚本失败 | 语法正确?黑名单拦截?查看日志详情 | | 上传失败 | 磁盘空间?目录权限?大小限制? | | 终端断开 | Worker 在线?刷新页面重试 | --- ## ❓ FAQ **Q: Worker 连接不上?** A: 检查 auth-token 匹配、网络、防火墙 **Q: 脚本超时?** A: 脚本内部控制超时逻辑 **Q: 支持图形界面?** A: 不支持,仅命令行 **Q: 切换数据库?** A: 修改配置,替换 H2 为 MySQL/PostgreSQL --- ## 🔄 扩展 **自定义任务**: 继承 `TaskEngine` 实现 `handleCustomCommand` **监控系统**: 集成 Prometheus (Spring Boot Actuator) **告警通知**: 邮件/钉钉/企业微信 webhook --- ## 📄 License MIT License ---
**⭐️ 如果对你有帮助,请给个 Star!** Made with ❤️ by Deployment Management Team