我做了个工具,帮不懂运维的开发者一键把项目部署到 VPS 上

起因

我相信很多人都有过这种体验:

花了好几周写完一个项目,本地跑得好好的,然后买了台服务器——然后就卡住了。

  • Nginx 怎么配?
  • HTTPS 证书怎么申请?
  • Node.js 怎么让它一直跑着不挂?
  • 代码更新了怎么同步到服务器?
  • 服务挂了怎么知道、怎么恢复?

我搜了很多教程,每篇都假设你已经懂一半了。折腾了两天,服务器还是一片空白。

所以我做了 deploy-helper


它是什么

一个交互式 CLI 工具。运行之后像向导一样问你几个问题,然后把剩下的事全包了。

npx @zhengyizhao/deploy-helper init
🚀 deploy-helper v0.2.1 — 把项目部署到服务器,就这么简单

回答几个问题,我来帮你搞定剩下的一切 👇

[1/5] 服务器连接信息
? 服务器 IP 地址:123.456.78.9
? 登录方式:SSH 密钥(推荐)
  ✓ 服务器连接成功!

[2/5] 项目信息
  ℹ 自动检测到项目类型:Node.js 应用(Express / Koa / Next.js 等)
  ℹ 检测到 Node.js 版本要求:v20(来源:.nvmrc)
  ℹ 检测到启动命令:node index.js(来源:检测到入口文件 index.js)
? 应用名称(用于进程管理):my-app
? 确认应用运行方式:Web 服务(监听端口,通过浏览器 / API 访问)
? 端口:3000

[3/5] 域名 & HTTPS(可选)
? 是否配置域名?是
? 你的域名:example.com
? 是否自动申请 HTTPS 证书?是

[4/5] 在服务器上安装运行环境
  ✓ 更新系统包
  ✓ 安装 Nginx
  ✓ 安装 Certbot(用于 HTTPS)
  ✓ 安装 Node.js 20
  ✓ 安装 PM2(进程管理器)

[5/5] 上传代码并启动服务
  ✓ 项目文件上传完成
  ✓ 安装依赖
  ✓ 启动应用(PM2)
  ✓ 设置 PM2 开机自启
  ✓ Nginx 配置完成
  ✓ HTTPS 证书申请成功
  ✓ 服务运行正常 — PM2 状态: online (PID 12345)

🎉 部署成功!

  访问地址:https://example.com

支持的功能

基础部署

支持五种项目类型,自动识别:

  • Node.js(Express / Koa / Next.js)→ PM2 管理进程,自动读取 .nvmrc / package.json engines.node 确定版本
  • Python(Flask / FastAPI / Django)→ Supervisor 管理,支持 pip+venv 和 conda 两种依赖管理方式;自动读取 .python-version / pyproject.toml 确定版本
  • Docker → 自动检测 Dockerfile + docker-compose.yml,单容器或 compose 两种模式均支持
  • 静态网站 → 直接 Nginx 托管
  • 其他语言(Java / Go / C++ / CUDA 等) → 通过 Docker 部署,工具内置 Dockerfile 模板(Java/Go/conda/Node.js 多阶段构建)

三种运行模式

部署时可以选择应用的运行方式:

  • Web 服务 → 自动配置端口、Nginx 反向代理、Let’s Encrypt HTTPS 证书
  • 后台脚本 → Supervisor / PM2 守护,崩溃时不自动重启
  • 定时任务 → 写入 crontab,支持预设频率或自定义 cron 表达式
? 确认应用运行方式:
  ❯ Web 服务(监听端口,通过浏览器 / API 访问)
    后台脚本(长期运行,不对外提供 HTTP 服务)
    定时任务(按计划执行,跑完自动退出)

版本回滚

每次部署前自动创建快照,出了问题一条命令回到上个版本:

deploy-helper rollback
# 列出历史版本,选一个,自动还原

环境变量同步

.env 文件不适合放进 git,但手动传到服务器很麻烦。现在:

deploy-helper env
# 上传本地 .env 到服务器
# 或从服务器拉取
# 或对比差异

数据库备份

支持 MySQL、PostgreSQL、MongoDB,可以手动备份,也可以配置定时自动备份:

deploy-helper backup
# 立即备份 / 查看历史 / 下载到本地 / 设置定时 cron

部署时若已配置数据库,deploy-helper update 会先询问是否备份再推代码。

多服务器部署

需要同时部署到多台机器时,支持三种策略:

deploy-helper servers  # 添加/查看/删除服务器
deploy-helper update   # 选并行 / 串行 / 滚动部署

状态监控

deploy-helper status
# 显示:系统运行时间、内存占用、磁盘、PM2/Supervisor 状态、最近日志

关于 Java / Go / conda 这类环境

对于运行环境比较特殊的项目,工具会提示你选择 Docker 部署,并内置了几个可直接使用的 Dockerfile 模板:

# Java(Maven + JDK 21,多阶段构建)
FROM maven:3.9-eclipse-temurin-21-alpine AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:resolve -q
COPY src ./src
RUN mvn package -DskipTests -q
FROM eclipse-temurin:21-jre-alpine
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

类似地,Go、Python+conda、Node.js 多阶段构建也有对应模板。把 Dockerfile 放到项目根目录,选择 Docker 类型,工具负责把容器在服务器上跑起来。


技术栈

  • Node.js + ES Module
  • inquirer 交互式问答
  • node-ssh SSH 连接与文件上传
  • commander CLI 框架
  • chalk + ora 终端美化
  • fs-extra 文件操作

核心逻辑不复杂,欢迎看源码。


安装使用

无需安装,直接用 npx:

npx @zhengyizhao/deploy-helper init

或全局安装:

npm install -g @zhengyizhao/deploy-helper
deploy-helper init

前提条件

  • 本地:Node.js 18+
  • 服务器:Ubuntu 20.04 / 22.04 / 24.04,有 root 或 sudo 权限

现阶段的局限

说实话,目前还有几个没做好的地方:

  1. Node.js 构建步骤:Next.js 等需要 npm run build 的项目,直接部署时不会自动执行构建——推荐用 Docker 多阶段构建模板绕过这个问题
  2. Python conda 环境:需要项目根目录有 environment.ymlconda env export 生成),工具会提示你如何生成
  3. 系统依赖:如果项目依赖 Redis、FFmpeg 等,需要自己手动装或封进 Docker,工具还检测不到
  4. 只支持 Ubuntu:CentOS / Debian 暂未测试

这些都在计划里,欢迎提 issue 或者直接 PR。


最后

这个工具首先是为了解决我自己的问题做的,如果也能帮到同样卡在「写完不会部署」这一步的人,那就更好了。

GitHub:https://github.com/sjksndnfkwks/deploy-helper

npm:https://www.npmjs.com/package/@zhengyizhao/deploy-helper

如果觉得有用,欢迎点个 star ⭐,也欢迎提 issue 告诉我你遇到的问题或者想要的功能。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐