# slim-devops
**Repository Path**: wsitm/slim-devops
## Basic Information
- **Project Name**: slim-devops
- **Description**: 基于 Spring Boot 3 + Vue 3 的分布式部署管理平台,采用 Server-Worker 架构:
Server:统一管控(认证、调度、文件、监控)
Worker:分布式执行(脚本、终端、下载)
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-28
- **Last Updated**: 2026-04-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Slim DevOps
**轻量级分布式部署神器 - Server-Worker 架构**
[](https://openjdk.java.net/)
[](https://spring.io/projects/spring-boot)
[](https://vuejs.org/)
---
## 🎯 项目简介
基于 **Java 17 + Spring Boot 3 + Vue 3** 构建的轻量级集群部署工具,采用 **Server(管控)- Worker(执行)** 架构,替代重型 CI/CD 方案。
### 核心特性
| 特性 | 说明 |
|------|------|
| **节点分组** | 支持左右联动的树形分组管理,可拖拽节点归类 |
| **脚本管理** | 节点独立的脚本配置,支持部署/回滚类型区分,添加节点时可直接复制其他节点脚本 |
| **终端** | 利用 xterm.js + WebSocket + Pty4j + commons-exec 实现 Web 终端,自动适配 Win/Linux 默认终端 |
| **执行策略** | 单脚本、一键顺序及批量执行(可选串/并行及异常处理策略),全屏实时展示日志流并支持随时终止 |
| **回滚机制** | 节点配置区分正向更新与回滚脚本,执行时将脚本内容序列化为快照存库,回滚严格基于历史快照执行 |
| **文件分发** | 独立文件模块支持常规操作,提供一键分发至多 Worker 功能,带进度条与 MD5 一致性校验 |
| **编排任务** | 配置跨节点、指定脚本的批次任务,支持命名保存,一键批量执行 |
| **执行日志** | 数据库存路径、本地文件存内容的分离策略 |
| **集群日志** | 支持多节点应用日志集中查看,配置化日志目录与文件匹配规则,提供合并/分栏双视图,支持实时追踪、历史日期回溯、关键字全文搜索及上下文展示,内存智能裁剪保障性能 |
| **安全与审计** | 区分用户角色(ADMIN/USER),前端 WebSocket 基于 Token 鉴权,Server 与 Worker 采用非对称加密及时效校验通讯;通过正则与启停控制的命令黑名单拦截高危指令;通过 AOP 切面记录全链路操作审计日志 |
---
## 🏗️ 系统架构
```
┌─────────────┐
│ Vue 3 UI │
│ (Element+) │
└──────┬──────┘
│ HTTP / WebSocket
┌──────▼──────────────────────┐
│ Server (10088) │
│ Auth | Script | Terminal │
│ File | Batch | Orchestrate │
│ Security | JPA | H2 DB │
└──────┬──────────────────────┘
│ WebSocket (RSA 加密)
┌───┴────┐
▼ ▼
┌──────┐ ┌──────┐
│Worker│ │Worker│
│10099 │ │10099 │
└──────┘ └──────┘
```
### 技术栈
| 层级 | 技术 |
|------|------|
| 后端 | Java 17 + Spring Boot 3 + Spring Security + JWT + JPA + H2 + WebSocket + Pty4j |
| 前端 | Vue 3 + TypeScript + Element Plus + xterm.js + Vite |
| 终端 | xterm.js + WebSocket + Pty4j (JVM) / commons-exec |
| 加密 | RSA 非对称加密 + 时效校验 |
---
## 📷 功能模块预览
### 节点管理

### 节点脚本管理

### 脚本执行日志

### Web 终端

### 编排任务

### 任务执行监控

### 执行历史

### 文件管理

### 黑名单管理

### 用户管理

### 操作审计

### 集群日志


---
## 🚀 快速开始
### 环境要求
- JDK 17+
- Maven 3.6+
- Node.js 18+
### 启动步骤
**1. 启动 Server**
```bash
cd sd-server
mvn spring-boot:run
# 访问:http://localhost:10088
# 默认账号:admin / 123456
```
**2. 启动 Worker**
```bash
cd sd-worker
mvn spring-boot:run
```
**3. 启动前端**
```bash
cd ui
npm install
npm run dev
# 访问:http://localhost:10077
```
---
## ⚙️ 核心配置
### 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 端一致
```
---
## 📖 功能模块详解
### 1. 节点管理
支持节点的增删改查、分组管理、拖拽归类、在线/离线状态实时追踪。
**添加节点时复制脚本**:新增节点可选择从已有节点复制脚本,支持多选。
### 2. 分组管理
左侧分组栏与右侧节点表格联动,支持:
- 新建/编辑/删除分组
- 拖拽节点到指定分组
- 未分组节点单独展示
### 3. 脚本管理
- 节点级别脚本配置
- 支持部署(DEPLOY)和回滚(ROLLBACK)两种执行类型
- 脚本排序、启用/禁用控制
- xterm.js 内置终端工具选择
### 4. Web 终端
- 基于 xterm.js + WebSocket + Pty4j 实现
- 支持 Linux/Windows 默认终端适配
- Server 端透传命令到 Worker 执行
### 5. 命令黑名单
正则表达式拦截高危指令,支持启用/禁用控制:
```regex
^rm\s+-rf\s+/ # 禁止删除根目录
^format\s+[cCdD]: # 禁止格式化磁盘
^dd\s+if=.*of=/dev/ # 禁止破坏磁盘
^shutdown # 禁止关机
^reboot # 禁止重启
```
### 6. 批次任务
支持跨节点批量执行脚本:
- **串行/并行**执行策略
- **失败后停止**选项
- 实时进度监控(成功/失败/执行中)
- 节点级别日志查看
- 失败节点一键重试
### 7. 编排任务
跨节点指定脚本的批次任务配置:
- 命名保存编排任务
- 多批次配置,每批次可配置多个节点+脚本
- 支持 **部署(DEPLOY)** 和 **回滚(ROLLBACK)** 类型
- 一键批量执行
### 8. 文件管理
- 文件上传/下载
- 一键分发至多个 Worker
- 进度条展示
- MD5 一致性校验
### 9. 执行历史
- 完整脚本执行记录
- 状态、耗时、退出码追踪
- 日志文件路径存储
### 10. 操作审计
基于 AOP 切面的全链路操作日志:
- 用户、操作类型、业务类型、业务ID
- IP 地址、时间戳
### 11. 集群日志
**配置管理**:
- 为多个节点的应用日志创建统一查看配置
- 每个节点独立配置日志目录、文件名模式、日期格式等
- 支持回退文件名(无日期的当前日志)
- 可自定义日志时间解析格式和文件编码
**日志查看**:
- **合并视图**:按时间顺序合并所有节点日志,统一时间轴展示
- **分栏视图**:每个节点独立分栏显示,便于对比
- **实时追踪**:WebSocket 实时推送最新日志,自动滚动
- **历史回溯**:选择历史日期查看归档日志
- **加载更早**:按需向上加载更早日志内容
- **节点筛选**:可按节点过滤显示
- **内存优化**:自动裁剪最旧日志,保持最大 50000 行
**全文搜索**:
- 支持多关键字搜索(逗号分隔)
- AND/OR 逻辑组合
- 搜索结果高亮显示
- 显示上下文行(前后 5 行)
- 快速跳转到上/下一个匹配项
- 按节点分组展示结果
---
## 🔐 安全机制
### 三重防护
1. **JWT 鉴权** - 用户登录验证,ADMIN/USER 角色权限控制
2. **RSA 加密握手** - Worker 连接双向认证,时效校验
3. **命令黑名单** - Server + Worker 双重校验危险指令
### 权限说明
| 角色 | 权限 |
|------|------|
| ADMIN | 全部功能 |
| USER | 节点查看、脚本执行、终端访问、编排任务执行/查看 |
---
## 🛠️ 生产部署
### 打包
```bash
# Server
cd sd-server && mvn clean package -DskipTests
# Worker
cd sd-worker && mvn clean package -DskipTests
# 前端
cd ui && npm run build
```
### 部署
```bash
# 启动 Server
nohup java -Xms512m -Xmx1g -jar sd-server.jar &
# 启动 Worker
nohup java -Xms256m -Xmx512m -jar sd-worker.jar &
# 前端使用 Nginx
cp -r dist/* /usr/share/nginx/html/
nginx -s reload
```
---
## 💡 最佳实践
### 脚本规范
✅ 推荐:
```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: 支持,脚本管理中配置回滚脚本,编排任务中选择 ROLLBACK 类型执行
**Q: 切换数据库?**
A: 修改 application.yml,替换 H2 为 MySQL/PostgreSQL
---
## 📄 License
MIT License
---
**⭐️ 如果对你有帮助,请给个 Star!**
Made with ❤️ by wsitm ( with AI )