# 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 架构**
[](https://openjdk.java.net/)
[](https://spring.io/projects/spring-boot)
[](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