PM2 如何在多个服务器上同步部署 Node.js 应用程序?

阅读时长 7 分钟读完

Node.js 是一个快速、轻量级的 JavaScript 运行环境,被广泛应用于 Web 开发、服务器端开发等领域。而 PM2 是一个流行的 Node.js 进程管理工具,可以方便的管理 Node.js 应用程序的启动、停止、监控等任务。

在实际应用中,我们可能需要部署同一个 Node.js 应用程序到多个服务器上,以提高应用的稳定性和可靠性。本文将介绍如何使用 PM2 在多个服务器上同步部署 Node.js 应用程序,并给出详细的示例代码和指导意义。

1. 准备工作

在开始之前,我们需要进行一些准备工作:

  • 确保在每个服务器上安装了 Node.js 和 PM2
  • 确保在每个服务器上配置了相同的数据目录,用于存储应用程序的日志、配置等文件
  • 确保在每个服务器上启动了 SSH 服务,并将其他服务器的 SSH 公钥添加到自己的 authorized_keys 文件中

2. 安装 PM2

如果您还没有安装 PM2,可以使用以下命令进行安装:

3. 创建 PM2 集群

PM2 支持将多个进程组成一个集群,可以方便的进行进程管理、监控等任务。在多个服务器上同步部署 Node.js 应用程序时,我们可以将这些服务器上的 Node.js 进程组成一个 PM2 集群。

要创建一个 PM2 集群,可以使用以下命令:

该命令将创建一个名为 pm2.json 的配置文件,其中包含了 PM2 集群的基本配置信息。我们可以根据需要修改这个配置文件,例如设置 PM2 集群的监听端口、数据目录等:

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

其中,apps 属性用于配置 PM2 集群中的应用程序信息,我们将在下一节中详细介绍。json_space 属性用于设置 pm2.json 文件格式化时的缩进空格数。port 属性用于配置 PM2 集群的监听端口,web 属性用于配置 PM2 集群的 Web GUI 界面的端口。cwd 属性用于设置 Node.js 应用程序的根目录。pid 属性用于设置 PM2 集群的 PID 文件路径。watch 属性用于设置是否启用文件变动监控,ignore_watch 属性用于设置不需要监控的文件目录。pm_log_path 和 pm_err_log_path 属性用于设置 PM2 日志文件路径,log_date_format 属性用于设置日志文件的时间格式。

4. 配置应用程序信息

在 PM2 集群中,每个应用程序都由一个或多个进程组成。要将一个 Node.js 应用程序添加到 PM2 集群中,我们需要指定该应用程序的名称、启动命令、参数等信息。

可以使用以下命令添加一个应用程序到 PM2 集群中:

其中,app.js 是应用程序的入口文件;--name 参数用于指定应用程序的名称,用于在 PM2 集群中进行管理;--watch 参数用于启用文件变动监控,当文件变动时自动重启应用程序;--ignore-watch 参数用于设置不需要监控的文件目录。此外,还可以使用其他参数指定应用程序的启动参数、环境变量、运行参数等信息。

我们可以将应用程序的配置信息添加到 pm2.json 配置文件中的 apps 属性,例如:

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

该配置文件中包含了两个应用程序 myapp1 和 myapp2,它们共享了相同的配置信息,但是具有不同的应用程序名称和端口号。这样,我们就可以在多个服务器上同时启动这两个应用程序,并通过 PM2 集群进行管理、监控等操作。

5. 部署应用程序

在 PM2 集群中添加了应用程序之后,我们就可以将这些应用程序部署到多个服务器上。这里我们将以 SSH 方式部署应用程序为例,下面是一个简单的部署脚本:

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

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

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

该脚本首先定义了要部署的服务器列表,然后使用 for 循环遍历这个列表,依次连接每个服务器执行以下操作:

  1. 切换到应用程序的根目录
  2. 从 Git 仓库中拉取最新的代码
  3. 停止并删除旧的 PM2 进程
  4. 使用 pm2.json 启动新的 PM2 进程

当部署脚本执行完毕后,我们就可以在多个服务器上同时启动、停止、重启 Node.js 应用程序,并且能够方便的进行管理、监控等操作。

6. 总结

本文介绍了如何使用 PM2 在多个服务器上同步部署 Node.js 应用程序,通过创建 PM2 集群、配置应用程序信息、编写部署脚本等方式实现了在多个服务器上同时部署、管理、监控 Node.js 应用程序的目的。希望本文对正在进行 Node.js 应用程序部署的开发人员有所帮助。

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

纠错
反馈