使用 PM2 部署的 NodeJS 应用程序(包括集群和非集群)
NodeJS app deploying with PM2 (both clustered and not)
让我们假设以下流程:
- /服务器上的项目有一个 scoped pm2 实例 运行
- 新的应用版本被推送到 master
- CI构建新版本
如何让 CI 将新的应用实例部署到 x 台机器上?
目前的想法:
4. CI 将构建转移到服务器上的 /project-next
5. CI 在 /project 上停止 scoped pm2 并在 /project-next 上启动 scoped pm2
6. CI 将 /project-next 移动到 /project
但是第 5 步会导致应用程序损坏:如何在不停机的情况下进行优雅的 pm2 部署?
相关 github 问题:https://github.com/Unitech/pm2/issues/2944
为什么不使用 blue/green 部署形式?
基本上,您有两个文件夹:project-a 和 project-b。假设您的产品在项目 a 上 运行ning,您在项目 b 中部署下一个版本,启动它,运行 CI 对其进行测试。然后,一旦一切就绪并且 运行ning,您开始将请求定向到项目 b(使用负载均衡器、iptables 规则或其他)
现在您可以停止 project-a(旧版本),这就是您部署的零停机时间。
在下一次部署时,您在项目 a 上移动新版本,然后以相反的方式执行完全相同的过程(运行 在项目 a 中,将项目 b 重定向到项目 a,终止项目-b)
让我们假设以下流程:
- /服务器上的项目有一个 scoped pm2 实例 运行
- 新的应用版本被推送到 master
- CI构建新版本
如何让 CI 将新的应用实例部署到 x 台机器上?
目前的想法: 4. CI 将构建转移到服务器上的 /project-next 5. CI 在 /project 上停止 scoped pm2 并在 /project-next 上启动 scoped pm2 6. CI 将 /project-next 移动到 /project
但是第 5 步会导致应用程序损坏:如何在不停机的情况下进行优雅的 pm2 部署?
相关 github 问题:https://github.com/Unitech/pm2/issues/2944
为什么不使用 blue/green 部署形式?
基本上,您有两个文件夹:project-a 和 project-b。假设您的产品在项目 a 上 运行ning,您在项目 b 中部署下一个版本,启动它,运行 CI 对其进行测试。然后,一旦一切就绪并且 运行ning,您开始将请求定向到项目 b(使用负载均衡器、iptables 规则或其他)
现在您可以停止 project-a(旧版本),这就是您部署的零停机时间。
在下一次部署时,您在项目 a 上移动新版本,然后以相反的方式执行完全相同的过程(运行 在项目 a 中,将项目 b 重定向到项目 a,终止项目-b)