PM2 实现 Node.js 应用程序的灰度发布与回滚

阅读时长 4 分钟读完

在实际项目中,灰度发布和回滚是非常常见的需求。灰度发布指在生产环境中逐步发布新版本,而不是一次性全部发布,以降低线上问题的风险;回滚则是在发现问题时快速恢复上一个可用版本,以保证业务的可用性。本文将介绍如何使用 PM2 工具实现 Node.js 应用程序的灰度发布和回滚。

准备工作

首先,需要安装 PM2 工具。如果您还没有安装,可以使用以下命令进行安装:

接下来,需要准备两个版本的 Node.js 应用程序代码,分别为旧版本和新版本。两个版本的代码应该处于不同的目录中。

灰度发布

配置文件

在使用 PM2 进行灰度发布之前,需要先创建一个配置文件。在旧版本的代码目录中创建一个 pm2_config.json 文件,填写以下内容:

-- -------------------- ---- -------
-
  ------ -
    ------- ----------
    --------- -----------
    ------ -
      ----------- ------------
    -
  --
  --------- -
    ------------- -
      ------- -----------
      ------- --------------
      ------ ----------------
      ------- --------------------------------------
      ------- -------------------
      -------------- ---- ------- -- --- ------------- --------------- ----- -----------
    -
  -
-

这里的配置中,name 表示应用程序的名称,script 表示应用程序的启动文件,env 表示环境变量,这里设置为 production。deploy 中的 production 部分表示生产环境的部署信息,user 和 host 分别表示服务器登录的用户名和 IP 地址,ref 表示 Git 的分支,repo 表示 Git 仓库的地址,path 表示应用程序部署的目录,post-deploy 表示在部署完成后需要执行的命令,这里是安装依赖并启动应用程序。

发布新版本

在新版本的代码目录中,切换到 Git 分支,并提交代码。然后在旧版本的代码目录中使用以下命令进行发布:

这里的 pm2_config.json 是配置文件的路径,production 表示需要部署到生产环境。

在部署过程中,PM2 会自动启动新版本的应用程序,并在后台监听和记录日志。此时可以通过以下命令查看应用程序的状态:

可以看到,应用程序的状态为 online,表示已经成功启动。

观察流量

在发布新版本后,建议等待一段时间后,再根据业务情况逐步将流量切换到新版本。可以通过以下方式来实现:

  • 在负载均衡器上设置某个比例的请求流量转到新版本的服务器上。
  • 在 DNS 解析中,针对某些域名或者地区,将新版本的服务器设置为首选的 IP。

具体实现方式可以根据具体业务情况来决定。如果观察到新版本在生产环境的表现良好,可以逐步提高流量的转发比例,直到全部流量转到新版本上。

回滚

如果在灰度发布的过程中,发现了问题,需要立即回滚到上一个可用版本。这时,可以使用 PM2 提供的 rollback 命令进行回滚。具体操作如下:

  1. 使用如下命令列出发布的版本:

会显示所有发布的版本,包括其 Git 分支、Commit ID、发布时间等信息。

  1. 找到需要回滚的版本的 Commit ID。

  2. 使用如下命令进行回滚:

这里的 pm2_config.json、production 分别是配置文件和部署环境的标识,COMMIT_ID 是需要回滚的版本的 Git Commit ID。

回滚成功后,PM2 会自动重启旧版本的应用程序,并自动删除新版本的应用程序。可以通过以下命令进行验证:

此时可以看到旧版本的应用程序已经恢复在线上。

总结

灰度发布和回滚是保证生产环境稳定可靠的关键技术。使用 PM2 工具可以非常方便地实现 Node.js 应用程序的灰度发布和回滚。希望本文能够对大家在日常工作中实现灰度发布和回滚有所帮助。

示例代码:https://github.com/pm2-hive/pm2-deploy-example

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a7da37add4f0e0ff0fd535

纠错
反馈