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,可以使用以下命令进行安装:
npm install -g pm2
3. 创建 PM2 集群
PM2 支持将多个进程组成一个集群,可以方便的进行进程管理、监控等任务。在多个服务器上同步部署 Node.js 应用程序时,我们可以将这些服务器上的 Node.js 进程组成一个 PM2 集群。
要创建一个 PM2 集群,可以使用以下命令:
pm2 init
该命令将创建一个名为 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 集群中:
pm2 start app.js --name myapp --watch --ignore-watch="node_modules logs"
其中,app.js 是应用程序的入口文件;--name 参数用于指定应用程序的名称,用于在 PM2 集群中进行管理;--watch 参数用于启用文件变动监控,当文件变动时自动重启应用程序;--ignore-watch 参数用于设置不需要监控的文件目录。此外,还可以使用其他参数指定应用程序的启动参数、环境变量、运行参数等信息。
我们可以将应用程序的配置信息添加到 pm2.json 配置文件中的 apps 属性,例如:
-- -------------------- ---- ------- - ------- - - ------- --------- --------- --------- ------- --------- -------------- ------------ ------ ------------ ---------- -------------- ----- -------- ----- --------------- - --------------- ------ -- ----------------- - ----------- ------------ - -- - ------- --------- --------- --------- ------- --------- -------------- ------------ ------ ------------ ---------- -------------- ----- -------- ----- --------------- - --------------- ------ -- ----------------- - ----------- ------------ - - -- ------------- -- ------- ----- ------ - ------- ---- -- ------ ----------- ------ ----------------------- -------- ------ --------------- - --------------- ------- ------- -------- --------- -- -------------- ------------------- ------------------ ------------------------- ------------------ ----------- -------- -- -
该配置文件中包含了两个应用程序 myapp1 和 myapp2,它们共享了相同的配置信息,但是具有不同的应用程序名称和端口号。这样,我们就可以在多个服务器上同时启动这两个应用程序,并通过 PM2 集群进行管理、监控等操作。
5. 部署应用程序
在 PM2 集群中添加了应用程序之后,我们就可以将这些应用程序部署到多个服务器上。这里我们将以 SSH 方式部署应用程序为例,下面是一个简单的部署脚本:
-- -------------------- ---- ------- ----------- --------- --------- --------- --------- - --- ------ -- -------------- -- --- -- -- ------------ -- --- -- -------------- --- ---- ------ ------ --- ---- ----- --- ------ ----- --- ----- -------- --- ----
该脚本首先定义了要部署的服务器列表,然后使用 for 循环遍历这个列表,依次连接每个服务器执行以下操作:
- 切换到应用程序的根目录
- 从 Git 仓库中拉取最新的代码
- 停止并删除旧的 PM2 进程
- 使用 pm2.json 启动新的 PM2 进程
当部署脚本执行完毕后,我们就可以在多个服务器上同时启动、停止、重启 Node.js 应用程序,并且能够方便的进行管理、监控等操作。
6. 总结
本文介绍了如何使用 PM2 在多个服务器上同步部署 Node.js 应用程序,通过创建 PM2 集群、配置应用程序信息、编写部署脚本等方式实现了在多个服务器上同时部署、管理、监控 Node.js 应用程序的目的。希望本文对正在进行 Node.js 应用程序部署的开发人员有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64814fc148841e98940c639c