批量发布部署工具——一键将应用部署到多台Linux服务器
批量发布部署工具——一键将应用部署到多台Linux服务器
前言
在日常开发中,我们经常需要将本地编译好的应用程序部署到多台远程Linux服务器上。手动逐台上传文件、执行重启命令不仅繁琐,还容易出错。今天分享一款批量发布工具,通过 SFTP 上传文件 + SSH 执行远程命令,实现一键将应用批量部署到多台服务器。
无论是 .NET API 后端服务、Web 前端网页,还是 Docker 容器化应用,都可以通过配置不同的 PreCmd 和 Cmd 命令,轻松实现一键部署。

功能概述
- JSON 配置驱动:通过 JSON 配置文件管理多台服务器信息,支持按项目独立配置
- SFTP 文件上传:递归上传本地发布目录下的所有文件和子目录到远程服务器
- SSH 远程命令:支持部署前(PreCmd)和部署后(Cmd)执行远程命令,如停止/启动服务
- 多指令顺序执行:PreCmd 和 Cmd 支持英文分号
;分隔多条指令,按顺序执行,间隔3秒 - 服务器启用/禁用:可在界面中勾选需要部署的服务器,支持全选/全取消
- 实时日志输出:部署过程日志实时显示,便于排查问题
- 路径记忆:自动记住上次使用的配置文件路径和程序目录路径
支持的部署场景
场景一:部署 .NET API 程序
将 .NET WebAPI 后端服务部署到Linux服务器,通过 systemctl 管理服务启停。
配置示例:
{
"Name": "IOT物联网平台",
"PulishFolder": "C:\\projects\\iot-api\\bin\\Release\\net8.0\\publish",
"ServerInfos": [
{
"Name": "生产服务器A",
"Enable": true,
"Host": "10.0.0.101",
"Port": 22,
"Username": "deploy",
"Password": "******",
"RemotePath": "/opt/apps/iot-api/",
"PreCmd": "systemctl stop iot-api",
"Cmd": "systemctl start iot-api"
}
]
}
部署流程:
- PreCmd 执行
systemctl stop iot-api,先停止正在运行的服务 - SFTP 将本地 publish 目录下的所有文件上传到远程服务器
- Cmd 执行
systemctl start iot-api,启动新版本服务
适用场景:所有通过 systemd 管理的 .NET API 服务,如物联网平台、用户中心、财务系统等后端接口服务。
场景二:部署 Web 前端网页
将 Vue/React 等前端项目打包后的静态文件部署到Nginx服务器。
配置示例:
{
"Name": "管理平台前端",
"PulishFolder": "D:\\projects\\admin-web\\dist",
"ServerInfos": [
{
"Name": "前端服务器",
"Enable": true,
"Host": "10.0.0.102",
"Port": 22,
"Username": "deploy",
"Password": "******",
"RemotePath": "/var/www/admin-web/",
"PreCmd": "",
"Cmd": "nginx -s reload"
}
]
}
部署流程:
- 无需 PreCmd,前端静态文件无需停止服务
- SFTP 将 dist 目录下的 HTML/CSS/JS 等文件上传到 Nginx 站点目录
- Cmd 执行
nginx -s reload,让 Nginx 重新加载最新文件
适用场景:Vue、React、Angular 等前端项目的打包部署,以及静态网站、H5活动页面等。
场景三:Docker 打包并运行
将应用打包为Docker镜像并运行容器,适合容器化部署场景。
配置示例:
{
"Name": "消息队列服务",
"PulishFolder": "C:\\projects\\mq-service\\bin\\Release\\net8.0\\publish",
"ServerInfos": [
{
"Name": "容器服务器",
"Enable": true,
"Host": "10.0.0.103",
"Port": 22,
"Username": "deploy",
"Password": "******",
"RemotePath": "/opt/apps/mq-service/",
"PreCmd": "docker stop mq-service; docker rm mq-service",
"Cmd": "docker build -t mq-service .; docker run -d --name mq-service -p 5672:5672 mq-service"
}
]
}
部署流程:
- PreCmd 依次执行:
docker stop mq-service停止容器 →docker rm mq-service删除容器(分号分隔,间隔3秒) - SFTP 将发布文件和 Dockerfile 上传到远程服务器
- Cmd 依次执行:
docker build -t mq-service .构建新镜像 →docker run -d --name mq-service -p 5672:5672 mq-service启动新容器
适用场景:所有基于 Docker 容器化部署的应用,包括 .NET API、Java 服务、Node.js 应用等,只需在项目目录中放置 Dockerfile 即可。
使用流程
- 选择配置文件:点击"配置"输入框,选择对应项目的 JSON 配置文件
- 选择程序目录:点击"程序"输入框,选择本地发布目录(如
bin\Release\net8.0\publish或前端dist目录) - 加载配置:点击"加载"按钮,读取配置文件并在表格中显示服务器列表
- 勾选服务器:在表格中勾选需要部署的服务器(右键菜单支持全选/全取消)
- 一键发布:点击"发布"按钮,自动依次对每台服务器执行:PreCmd → SFTP上传 → Cmd
- 查看日志:切换到"日志"选项卡查看实时部署日志
完整发布流程
工具的完整发布流程如下:
遍历每台启用的服务器
│
├─ 1. 执行 PreCmd(部署前命令)
│ ├─ .NET API:systemctl stop xxx
│ ├─ Web前端:无需操作
│ └─ Docker:docker stop xxx; docker rm xxx
│
├─ 2. SFTP 上传文件
│ ├─ 递归遍历本地发布目录
│ ├─ 自动创建远程目录结构
│ └─ 逐文件上传到远程服务器
│
├─ 3. 执行 Cmd(部署后命令)
│ ├─ .NET API:systemctl start xxx
│ ├─ Web前端:nginx -s reload
│ └─ Docker:docker build ...; docker run ...
│
└─ 4. 记录耗时,继续下一台服务器
配置文件说明
每个项目对应一个 JSON 配置文件,核心字段说明:
| 字段 | 说明 |
|---|---|
| Name | 配置名称,用于标识项目 |
| PulishFolder | 本地发布目录路径 |
| ServerInfos | 服务器列表 |
| └ Name | 服务器名称 |
| └ Enable | 是否启用该服务器 |
| └ Host / Port | 服务器地址和SSH端口 |
| └ Username / Password | SSH登录凭据 |
| └ RemotePath | 远程部署路径 |
| └ PreCmd | 部署前命令,多条用 ; 分隔 |
| └ Cmd | 部署后命令,多条用 ; 分隔 |
PreCmd 在文件上传前执行(如停止服务/容器),Cmd 在文件上传后执行(如启动服务/构建镜像)。多条命令用英文分号
;分隔,会按顺序依次执行,间隔3秒,某条命令失败则终止后续执行。
总结
这个批量发布工具虽然轻量,但覆盖了日常开发中最常见的部署场景:
- .NET API 服务:systemctl 管理启停,上传即部署
- Web 前端项目:上传静态文件,reload Nginx 即生效
- Docker 容器应用:停止旧容器 → 上传文件 → 构建镜像 → 启动新容器
通过灵活配置 PreCmd 和 Cmd,几乎可以适配任何部署方式。一个工具,覆盖多种场景,告别重复的手动部署操作。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)