# 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 架构** [![Java](https://img.shields.io/badge/Java-17-blue.svg)](https://openjdk.java.net/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.x-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.x-green.svg)](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 非对称加密 + 时效校验 | --- ## 📷 功能模块预览 ### 节点管理 ![节点管理](./doc/101-节点管理.png) ### 节点脚本管理 ![节点-脚本管理](./doc/102-节点-脚本管理.png) ### 脚本执行日志 ![节点-脚本-日志](./doc/103-节点-脚本-日志.png) ### Web 终端 ![节点-在线终端](./doc/104-节点-在线终端.png) ### 编排任务 ![任务编排](./doc/201-任务编排.png) ### 任务执行监控 ![任务编排-执行监控](./doc/202-任务编排-执行监控.png) ### 执行历史 ![执行历史](./doc/301-执行历史.png) ### 文件管理 ![文件管理](./doc/401-文件管理.png) ### 黑名单管理 ![黑名单管理](./doc/501-黑名单管理.png) ### 用户管理 ![用户管理](./doc/601-用户管理.png) ### 操作审计 ![操作日志](./doc/701-操作日志.png) ### 集群日志 ![集群日志配置](./doc/801-集群日志配置.png) ![集群日志查看](./doc/802-集群日志查看.png) --- ## 🚀 快速开始 ### 环境要求 - 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 )