【问题标题】:NodeJS app deploying with PM2 (both clustered and not)使用 PM2 部署的 NodeJS 应用程序(集群和非集群)
【发布时间】:2017-06-26 19:43:28
【问题描述】:

让我们假设以下流程:

  1. 服务器上的/project 有一个 scoped pm2 实例正在运行
  2. 新的应用版本被推送到master
  3. CI 构建新版本

如何让 CI 将新应用实例部署到 x 台机器上?

目前的想法: 4. CI 将构建转移到服务器上的 /project-next 5. CI 在 /project 上停止作用域 pm2 并在 /project-next 上启动作用域 pm2 6. CI 将 /project-next 移动到 /project

但是第 5 步会导致应用程序损坏:我如何才能在不停机的情况下进行优雅的 pm2 部署?

相关 github 问题:https://github.com/Unitech/pm2/issues/2944

【问题讨论】:

    标签: node.js pm2


    【解决方案1】:

    为什么不使用蓝/绿部署形式?

    基本上,您有两个文件夹:project-a 和 project-b。假设您的生产在项目-a 上运行,您在项目-b 中部署下一个版本,启动它,在其上运行 CI 测试。然后,一旦一切都启动并运行,您开始将请求定向到 project-b(使用负载均衡器、iptables 规则或其他)

    现在您可以停止 project-a(旧版本),这样您就可以零停机时间部署了。

    在下一次部署时,您将新版本移动到项目-a,然后以相反的方式执行完全相同的过程(在项目 a 中运行,将项目-b 重定向到项目-a,终止项目-b)

    【讨论】:

    • 有趣!缺点:1)任何时候只有一半的机器可以工作? 2)如何与单机基础设施进行相同的工作?因为只有一台服务器,我没有机会在 x:80 停止服务
    • nodejs 的关键是让它监听一些非特权端口(>1024)。这样您就可以在同一台机器上运行多个节点实例(因此 project-a 和 b 在同一台机器上同时运行)。关键是在端口 80 上有一些负载均衡器(如 nginx)来进行请求转发。顺便说一句,让nodejs直接面向公共网络IMO是一件坏事。
    • 为什么是不好的做法?节点总是在非特权用户下运行!
    • 无论如何在不同的端口上都可以很好地调用:我可以让每台服务器服务于不同的应用程序版本
    • 在上一条评论中,您说这是单机基础架构,而现在我们正在处理多机基础架构?无论如何,这取决于您在部署期间所做的事情,我在这里并没有真正看到问题。如果您不将相同的版本部署到每台服务器,那么您当然会有跨服务器的不同版本。但是,如果您在 A 或 B 之间切换之前确保每个服务器都获得了新版本,那么您每次都将拥有完全相同的版本......
    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多