在生产服务器上管理 Node.js 应用程序通常需要进程管理器来确保您的应用程序顺利运行并从崩溃中自动恢复。 PM2 是 Node.js 最受欢迎的进程管理器之一,提供强大的功能,例如进程监控、日志管理和集群模式。
如果您在 Google Cloud Ubuntu 实例上运行应用程序,您可能会遇到 PM2 进程仅对启动它们的用户可见的情况。如果您的服务器有多个用户(例如开发人员、系统管理员或自动部署脚本),这可能会出现问题。在这篇博文中,我们将逐步完成将 PM2 配置为系统范围服务的步骤,使其可供服务器上的所有用户访问。
默认情况下,PM2 作为启动它的用户下的进程运行。这意味着,如果您作为一个用户通过 SSH 登录服务器并启动 PM2 进程,则通过 SSH 登录的其他用户将看不到该进程。为了解决这个问题,我们可以将 PM2 配置为在系统级别作为服务运行。这种方法有几个优点:
在我们开始之前,请确保您具备以下条件:
为了确保所有用户都可以访问PM2,应该全局安装它。您可以使用 npm 全局安装 PM2:
sudo npm install -g pm2
此命令将 PM2 安装在全局 npm 目录中,使其在系统范围内可用。
接下来,我们需要将 PM2 设置为服务运行。这将允许 PM2 在系统级别管理进程,而不是绑定到特定的用户会话。
运行以下命令生成 PM2 必要的启动脚本:
pm2 startup
此命令检测您的 Ubuntu 实例使用的 init 系统(通常是 systemd),并提供需要使用 sudo 执行的命令,以将 PM2 配置为系统范围的服务。输出将如下所示:
[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u <username> --hp /home/<username>
这里,应替换为最初设置 PM2 的用户的用户名。这可确保 PM2 进程链接到正确的用户主目录。
复制上一步输出中提供的命令并执行它。例如:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u johndoe --hp /home/johndoe
此命令创建一个 systemd 服务,该服务使用正确的环境变量和用户上下文启动 PM2。
如果您已经有在 PM2 下运行的进程,并且希望在重新启动后仍保留该进程,则需要保存当前进程列表。这将创建一个转储文件,PM2 将在系统启动时使用该文件来恢复进程:
pm2 save
pm2 save 命令将当前托管进程列表保存到 ~/.pm2/dump.pm2 中的 JSON 文件中。 PM2 启动时会自动加载此文件,确保您的应用程序在重新启动后重新启动。
为了确保PM2在系统启动时自动启动,您需要启用该服务:
sudo systemctl enable pm2-johndoe
将 johndoe 替换为适当的用户名。此命令启用 PM2 服务,确保它在系统启动时启动。
现在 PM2 已配置为系统范围的服务,服务器上的任何用户都应该可以访问它。要检查进程的状态或列出它们,任何用户都可以运行:
pm2 list
此命令将显示由系统范围的 PM2 服务管理的进程列表,无论哪个用户登录。
如果您需要 PM2 日志可供多个用户访问,您可能需要调整文件权限或配置 PM2 将日志存储在共享目录中。这确保所有用户都可以查看和管理 PM2 下运行的进程的日志。
要更改日志文件目录,可以使用以下环境变量:
export PM2_HOME=/path/to/shared/pm2/home
Set this in a global configuration file, like /etc/environment, to make it persistent across sessions.
Once PM2 is set up as a service, users can manage processes using standard PM2 commands. However, depending on the permissions and user roles, some commands might require sudo access. For example:
sudo pm2 list
This command will list the processes managed by the system-wide PM2 service, making it easier for administrators and developers to collaborate on server management.
Setting up PM2 as a system-wide service on your Ubuntu instance ensures that your Node.js applications are robustly managed and accessible to all users on the server. This setup is particularly useful in environments with multiple users or automated deployment processes, providing a reliable and centralized way to manage applications.
By following the steps outlined in this guide, you can ensure that PM2 is available to all users, your processes are automatically restarted after system reboots, and logs are easily accessible. This not only simplifies server management but also enhances the reliability of your applications in production.
Happy coding!
以上是在 Ubuntu 实例上设置 PMor 多用户访问的详细内容。更多信息请关注PHP中文网其他相关文章!