Skip to content

leleroyn/deploy-tool

Repository files navigation

🚀 Deploy Tool

一套面向运维场景的 Web 可视化发布平台

将 Shell 运维脚本包装为完整的 Web 管理系统,无需登录服务器,即可在浏览器中完成应用部署、备份、端口检测、远程维护等全套操作。

Node.js React TypeScript Docker License


📖 项目简介

Deploy Tool 为一套完整的 Web 管理平台,核心理念是:

无论是一键部署到多台服务器、备份远程应用目录、检测服务端口,还是远程执行运维命令,都可以通过浏览器完成。所有操作通过 WebSocket 实时推送终端输出,操作日志自动记录可追溯。


✨ 功能特性

功能 描述
🖥️ 实时终端输出 所有操作通过 WebSocket 将日志实时推送到前端,执行过程可视化
🔒 部署安全保护 部署前自动检测今日备份状态,未备份时禁用部署按钮,防止误操作丢失数据
📦 部署包上传 支持拖拽上传 .zip / .tar.gz / .tar,压缩包自动解压;支持直接上传 .jar 等任意格式
🌐 多服务器支持 单个项目可配置多台服务器,一次操作按顺序覆盖所有节点
⏱️ 任务队列 同一时间只允许一个任务运行,避免并发冲突,最多保留 100 条任务记录
🔧 远程维护 预置运维命令分组管理,支持二次确认执行、执行记录展示、实时日志输出
⚙️ 在线配置编辑 通过 Web 设置页直接编辑 config.toml,无需登录服务器
🐳 Docker 一键部署 多阶段 Dockerfile 构建,单容器单端口,开箱即用
🔑 JWT 认证 密码通过环境变量配置,无状态 JWT token 认证
📋 日志历史 任务记录与脚本日志统一展示,支持按类型筛选查看

🗺️ 系统架构

┌─────────────────────────────────────────────────────────────┐
│                        浏览器 (Web 前端)                      │
│                                                             │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐  │
│  │  登录页   │ │  仪表盘   │ │  部署页   │ │   备份页      │  │
│  └──────────┘ └──────────┘ └──────────┘ └──────────────┘  │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐  │
│  │  端口检测 │ │ 远程维护 │ │  日志页  │ │     设置页    │  │
│  └──────────┘ └──────────┘ └──────────┘ └──────────────┘  │
│              │  HTTP REST API         │  WebSocket         │
└──────────────┼────────────────────────┼────────────────────┘
               ▼                        ▼
┌─────────────────────────────────────────────────────────────┐
│                    Node.js 后端 (Express)                     │
│                                                             │
│  ┌─────────┐  ┌──────────┐  ┌──────────┐  ┌───────────┐  │
│  │ 认证中间 │  │  路由层   │  │  任务队列 │  │ WebSocket │  │
│  │  件(JWT) │  │(projects │  │(taskQueue│  │  Server   │  │
│  └─────────┘  │ tasks,   │  │   .ts)   │  │(wsServer) │  │
│               │ deploy,  │  └────┬─────┘  └─────┬─────┘  │
│               │ logs,ssh,│       │               │        │
│               │ commands)│       │  实时日志推送  │        │
│               └──────────┘       │               │        │
│                         ┌────────▼───────────────▼──┐     │
│                         │   child_process.spawn()    │     │
│                         └────────────┬───────────────┘     │
└──────────────────────────────────────┼─────────────────────┘
                                       ▼
┌─────────────────────────────────────────────────────────────┐
│                    Shell 脚本层 (script/)                     │
│                                                             │
│  ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐    │
│  │  deploy.sh  │ │backup_pj.sh  │ │ check_ports.sh   │    │
│  │  (部署脚本) │ │  (备份脚本)  │ │  (端口检测脚本)  │    │
│  └──────┬──────┘ └──────┬───────┘ └────────┬─────────┘    │
│         │               │                  │               │
│  ┌──────┴───────────────┴──────────────────┴─────────┐    │
│  │          exec_remote_script.sh                     │    │
│  │              (远程维护脚本)                         │    │
│  └──────────────────────┬─────────────────────────────┘    │
│                    读取 config.toml                           │
└──────────────────────────┬──────────────────────────────────┘
                           │ SSH
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                      目标服务器集群                           │
│                                                             │
│    Server 1              Server 2            Server N       │
│  192.168.1.10          192.168.1.11        192.168.1.x      │
│  [部署/备份/检测]      [部署/备份/检测]    [部署/备份/检测]  │
└─────────────────────────────────────────────────────────────┘

📋 功能说明

页面概览

页面 描述
仪表盘 项目统计、快捷操作(备份/部署/检测/远程维护)、最近任务、项目列表
备份管理 选择项目或全部备份,查看今日备份状态,备份文件列表
部署管理 上传部署包、预检备份状态、一键部署到多服务器、实时终端输出
端口检测 检测项目配置的端口是否在远程服务器上监听,按服务器分组展示
远程维护 分组管理运维命令,支持二次确认执行、执行记录、实时输出
日志历史 任务记录表格 + 脚本日志文件查看(部署/备份/检测/远程维护/SSH)
系统设置 在线编辑 config.toml、SSH 配置管理

部署流程

选择项目 → Preflight 检查 → 上传部署包(可选) → 执行部署
                ↓                                    ↓
          检查今日备份状态                  打包 → scp上传 → SSH解压 → 重启服务
          未备份 → 禁用部署

备份流程

选择项目/全部 → 执行备份 → SSH到目标服务器 → tar打包 → 保存到 backup_dir

端口检测流程

选择项目/全部 → 执行检测 → SSH连接 → ss/netstat 检测 → 按服务器分组展示结果

远程维护流程

点击执行 → 二次确认 → 创建任务 → SSH执行命令 → 实时日志输出 → 记录历史

🚀 快速开始

方式一:Docker 部署(推荐)

前提: 服务器已安装 Docker,且 ~/.ssh/id_rsa 已配置并可 SSH 到目标服务器。

第一步:克隆项目

git clone https://github.com/your-username/deploy-tool.git
cd deploy-tool

第二步:配置 config.toml

# 编辑配置文件,填入你的项目信息
nano config.toml

配置示例:

[ssh]
user = "root"
key = "/root/.ssh/id_rsa"

[deploy.my-app]
server = ["192.168.1.100", "192.168.1.101"]
remote_dir = "/opt/project/my-app"
backup_dir = "/opt/backup"
local_dir = "/path/to/local/build"
restart_cmd = "docker restart my-app"
bind-port = [8080, 3306]
exclude = ["logs", "log", "tmp", "temp", "*.log", "*.logs"]

[command."查看磁盘"]
server = ["192.168.1.100"]
command = "df -h"
group = "系统信息"

[command."查看内存"]
server = ["192.168.1.100"]
command = "free -m"
group = "系统信息"

第三步:启动容器

docker run -d \
  --name deploy-tool \
  --restart unless-stopped \
  -p 3001:3001 \
  -u root \
  -e DEPLOY_PASSWORD=你的密码 \ 
  -e SKIP_SSH_INIT=1 \
  -v "$(pwd)/config.toml:/app/config.toml" \
  -v "$(pwd)/script:/app/script:ro" \
  -v "/root/.ssh:/root/.ssh:ro" \
  -v "$(pwd)/logs:/app/logs" \
  leleroyn/deploy-tool:0.1.5

浏览器访问: http://服务器IP:3001


方式二:本地开发环境(WSL)

前提: WSL(Ubuntu 24.04)中已安装 Node.js 18+。

# 终端一:启动后端(必须在同一终端加载 SSH 密钥)
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
cd server && npm install && npm run dev   # 端口 3001

# 终端二:启动前端
cd web && npm install && npm run dev      # 端口 5173

浏览器访问:http://localhost:5173,默认密码:admin123


⚙️ 配置说明

config.toml 字段说明

字段 必填 说明
server 目标服务器 IP 数组,如 ["192.168.1.100"]
remote_dir 远程应用目录
backup_dir ✅(备份时) 远程备份存放路径
local_dir ✅(部署时) 本地部署包所在目录
exclude 打包时排除的路径数组,默认 ["logs", "log", "tmp", "temp", "*.log", "*.logs"]
restart_cmd 部署完成后在远程服务器执行的重启命令
bind-port ✅(端口检测) 要检测的端口号数组,如 [8080, 3306]

远程维护命令配置

字段 必填 说明
server 目标服务器 IP 数组
command 要执行的远程命令
group 命令分组名称,用于前端分类展示,默认"未分组"

环境变量

变量名 说明
DEPLOY_PASSWORD 登录密码(必填)
PORT 后端服务端口,默认 3001
SCRIPT_DIR 脚本目录,默认 /app/script
CONFIG_FILE 配置文件路径,默认 /app/config.toml
LOG_BASE_DIR 日志目录,默认 /app/logs
SKIP_SSH_INIT 跳过脚本内 ssh-agent 初始化,设为 1

📂 项目结构

deploy-tool/
├── config.toml                # 项目配置(TOML 格式)
├── script/                    # Shell 脚本
│   ├── deploy.sh             # 部署脚本
│   ├── backup_pj.sh          # 备份脚本
│   ├── check_ports.sh        # 端口检测脚本
│   └── exec_remote_script.sh # 远程维护脚本
├── server/                    # 后端服务
│   ├── src/
│   │   ├── config/           # 配置管理(TOML 读写)
│   │   ├── routes/           # API 路由
│   │   │   ├── auth.ts       # 认证
│   │   │   ├── projects.ts   # 项目管理
│   │   │   ├── tasks.ts      # 任务创建
│   │   │   ├── deploy.ts     # 部署/上传
│   │   │   ├── commands.ts   # 远程维护命令
│   │   │   ├── logs.ts       # 日志查询
│   │   │   └── ssh.ts        # SSH 配置
│   │   ├── tasks/            # 任务队列
│   │   │   ├── taskQueue.ts  # 队列管理
│   │   │   └── scriptRunner.ts # 脚本执行
│   │   ├── ws/               # WebSocket
│   │   └── index.ts          # 入口
│   └── package.json
├── web/                       # 前端应用
│   ├── src/
│   │   ├── pages/            # 页面组件
│   │   │   ├── Dashboard.tsx
│   │   │   ├── DeployPage.tsx
│   │   │   ├── BackupPage.tsx
│   │   │   ├── PortCheckPage.tsx
│   │   │   ├── RemoteMaintenancePage.tsx
│   │   │   ├── LogsPage.tsx
│   │   │   └── SettingsPage.tsx
│   │   ├── components/       # 通用组件
│   │   ├── api/              # API 客户端
│   │   └── types.ts          # 类型定义
│   └── package.json
└── Dockerfile

📄 License

MIT


如有问题请提 Issue

About

项目自助发布平台

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors