如何启用 PM2 在系统启动时自动启动 Node.js 应用?

linuxoperating systemopen source

简介

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 下运行的所有应用程序的列表。

为 Node.js 应用配置 PM

PM 可以根据应用程序的特定需求进行配置。其主要配置选项之一是环境变量,允许开发者指定全局参数,例如数据库 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 高级配置选项的强大功能

虽然 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" }, // 添加以下 `pre` 属性
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 系统上启用系统启动时的自动启动功能。


相关文章


有用资源