如何使 PM2 在系统启动时自动启动 Node.js 应用程序?
介绍
PM2 是一个用于 Node.js 应用程序的进程管理器。它能够在应用程序崩溃时自动重启应用程序,同时管理多个应用程序,并提供详细的日志和错误信息。由于易用性和强大的功能,此工具已被 Node.js 开发人员广泛采用。
使用 PM2 的最重要优势之一是它简化了 Node.js 应用程序的管理,通过自动化启动、停止和重启进程等常见任务。PM2 还提供监控功能,使开发人员能够实时跟踪应用程序性能指标。
在系统启动时自动启动 Node.js 应用程序的重要性
Node.js 已成为开发服务器端应用程序最流行的编程语言之一。这些应用程序通常运行在服务器上,这些服务器需要频繁重启以进行更新或系统维护。
安装 PM2
PM2 是一个用于 Node.js 应用程序的进程管理器。它提供诸如集群模式、负载平衡和崩溃时自动重启等功能。安装 PM2 非常简单直观,可以使用 npm 轻松完成。
要安装 PM2,您需要在您的机器上已经安装了 Node.js。您可以在终端中运行命令 `node -v` 来检查 Node.js 是否已安装。
如果未安装,请从官方网站下载并安装它。安装 Node.js 后,打开您的终端并运行以下命令以全局安装 PM2:
npm install pm2 -g
这将在您的系统上全局安装 PM2,以便您可以在系统的任何位置使用它。
安装 PM2 的分步指南
现在您已在系统上安装了 PM2,让我们逐步了解如何使用 PM2 设置 Node.js 应用程序:
导航到 Node.js 应用程序所在的目录。
cd /path/to/your/nodejs/app
使用以下命令使用 PM2 启动应用程序:
pm2 start app.js
这将使用默认设置启动您的应用程序。
使用此命令检查应用程序是否已成功启动:
pm2 list
这将显示在 PM2 下运行的所有应用程序的列表。
配置 PM2 用于 Node.js 应用程序
可以根据应用程序的具体需求配置 PM2。其主要配置选项之一是环境变量,它允许开发人员指定全局参数,例如数据库 URL 或身份验证凭据。
要为应用程序的生态系统文件 (ecosystem.config.json) 配置环境变量,请将其作为键值对添加到“env”对象中。例如,要为应用程序设置数据库 URL 和身份验证凭据,生态系统文件应如下所示:
{ "apps": [ { "name": "myapp", "script": "app.js", "env": { "DATABASE_URL": "", "AUTHENTICATION_CREDENTIALS": "" } } ] }
通过此配置,可以使用 `process.env.DATABASE_URL` 和 `process.env.AUTHENTICATION_CREDENTIALS` 在代码中访问环境变量。除了环境变量之外,PM2 还提供了许多其他配置选项,例如负载平衡、集群模式等。
启用系统启动时自动启动
如果您正在运行对业务运营至关重要的 Node.js 应用程序,则必须确保在服务器每次启动时都能自动启动该应用程序。这样,您就不必在每次系统重新启动时手动启动应用程序。在本节中,我们将讨论如何在各种操作系统上使用不同的工具启用系统启动时自动启动。
了解在系统启动时启用自动启动的过程
在深入研究具体的工具和方法之前,让我们了解在系统启动时启用自动启动的一般过程。该概念在大多数操作系统中都类似;但是,在使用的工具和命令方面可能存在差异。
创建一个启动 Node.js 应用程序的脚本文件。
确保此脚本文件具有可执行权限。
将此脚本文件添加到操作系统中的适当位置。
创建一个服务或任务,以便在启动时运行您的脚本文件。
使用 systemd 在 Linux 系统上启用自动启动
Systemd 是一个基于 Linux 的 init 系统和服务管理器,它使用户能够有效地管理服务。它预装在大多数现代 Linux 发行版(如 Ubuntu 16.04 及更高版本)上。
要使用 systemd 为您的 Node.js 应用程序启用自动启动:
在 `/etc/systemd/system` 目录中创建一个新的文件,并使用 `.service` 扩展名(例如,myapp.service)。
添加以下配置行:
[Unit] Description=My Node.js App After=network.target [Service] Environment=NODE_ENV=production ExecStart=/usr/bin/node /path/to/your/app.js Restart=always User=nobody Group=nobody [Install] WantedBy=multi-user.target
保存并关闭文件。
使用命令 `systemctl daemon-reload` 重新加载 systemd 配置。
使用 `systemctl enable myapp.service` 启用服务以在系统启动时自动启动。
高级配置选项
PM2 高级配置选项的功能
虽然用于自动启动 Node.js 应用程序的 PM2 的基本安装和配置非常简单,但它还提供了大量高级配置选项,可以帮助您微调设置以满足您的特定需求。PM2 提供的一个强大选项是能够自定义启动脚本。
默认情况下,PM2 会自动检测并启动您主目录或当前工作目录中的 Node.js 应用程序。但是,您可以指定一个自定义启动脚本,该脚本在启动 Node.js 应用程序之前执行您需要运行的任何命令。
这可能包括设置环境变量、加载配置文件或运行应用程序所需的其它进程。PM2 提供的另一个有用功能是能够设置自定义环境变量。
环境变量允许您在运行时将重要信息传递到您的应用程序中,这些信息可能会影响应用程序的行为或处理的数据。默认情况下,PM2 在启动应用程序时会继承您 shell 会话中设置的所有环境变量。
使用示例自定义启动脚本和环境变量
自定义启动脚本的一个示例用例可能是运行一个预启动脚本,该脚本在启动主要的 Node.js 应用程序进程之前检查 Git 存储库中是否有任何可用的更新。要使用 PM2 执行此操作,我们首先需要在我们的 `~/scripts/` 目录中创建一个新的 `.sh` 脚本文件:
#!/bin/bash cd /path/to/my/app git fetch && git merge origin/master
然后,我们将在我们的 `ecosystem.config.js` 文件中为我们的应用程序添加一个条目,该条目将此脚本指定为 `pre` 命令:
javascript module.exports = { apps: [ { name: "my-app", script: "/path/to/my/app/index.js", env_production: { NODE_ENV: "production" }, // Add the following `pre` property pre: "/home/myuser/scripts/update-app.sh", } ] }
现在,每次我们使用 PM2 启动 Node.js 应用程序进程时,它都会首先运行此自定义脚本以从我们的 Git 存储库中获取任何更新。
至于使用 PM2 设置环境变量,假设我们需要根据我们在开发模式还是生产模式下运行来在我们的应用程序中设置一个自定义 `PORT` 变量。我们可以通过在我们的应用程序配置文件中添加一个条目来实现此目的,该条目在 `env` 对象中设置环境变量:
javascript module.exports = { apps: [ { name: "my-app", script: "/path/to/my/app/index.js", env_production: { NODE_ENV: "production" // Set custom PORT variable here: PORT: 8080, }, } ] }
现在,当我们在生产模式下启动应用程序进程时,它将自动使用我们在配置文件中指定的 `8080` 端口。
结论
使用 PM2 为 Node.js 应用程序启用自动启动是确保您的应用程序即使在系统重新启动后也能保持可用和活动的关键步骤。通过遵循本文中概述的步骤,您可以轻松配置您的 PM2 以在 Linux、macOS 或 Windows 系统上启用系统启动时自动启动。