网站搜索

如何安装 PM2 以在生产服务器上运行 Node.js 应用程序


PM2 是一款免费的开源、先进、高效、跨平台的 Node.js 生产级流程管理器,具有内置负载均衡器。它适用于 Linux、MacOS 和 Windows。它支持应用程序监控、微服务/进程的高效管理、以集群模式运行应用程序、应用程序的优雅启动和关闭。

它通过自动重启让您的应用程序“永远存活”,并且可以在系统启动时启动,从而实现高可用性 (HA)配置或架构。

值得注意的是,PM2 允许您在集群模式下运行应用程序,而无需对代码进行任何更改(这也取决于服务器上的 CPU 核心数量)。它还允许您轻松管理应用程序日志等等。

此外,它还对主要 Node.js 框架提供令人难以置信的支持,例如 ExpressAdonis JsSailsHapi 等,无需更改任何代码。 PM2 正在被 IBMMicrosoftPayPal 等公司使用。

在本文中,我们将解释如何在 Linux 生产服务器中安装和使用 PM2 运行 Nodejs 应用程序。我们将创建一个应用程序来演示 PM2 的一些基本功能,以便您开始使用它。

第1步:在Linux中安装Nodejs和NPM

1. 要安装最新版本的 Node.jsNPM,首先您需要在 Linux 发行版下启用官方 NodeSource 存储库,然后安装Node.jsNPM 包如图所示。

在 Debian/Ubuntu 上

---------- Install Node.js v11.x ---------- 
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs

---------- Install Node.js v10.x ----------
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

在 CentOS/RHEL 和 Fedora 上

---------- Install Node.js v11.x ---------- 
curl -sL https://rpm.nodesource.com/setup_11.x | bash -

---------- Install Node.js v10.x ----------
curl -sL https://rpm.nodesource.com/setup_10.x | bash -

第 2 步:创建 Nodejs 应用程序

2. 现在,让我们创建一个测试应用程序(我们假设它有共享同一数据库的客户端和管理端),微服务将在端口 3000 上运行,并且分别为3001

sudo mkdir -p /var/www/html/app
sudo mkdir -p /var/www/html/adminside
sudo vim /var/www/html/app/server.js
sudo vim /var/www/html/adminside/server.js

接下来,将以下代码复制并粘贴到 server.js 文件中(将 192.168.43.31 替换为您的服务器 IP)。

##mainapp code
const http = require('http');

const hostname = '192.168.43.31';
const port = 3000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('This is the Main App!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});
##adminside code
const http = require('http');

const hostname = '192.168.43.31';
const port = 3001;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('This is the Admin Side!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});

保存文件并退出。

步骤 3:在 Linux 中安装 PM2 产品流程管理器

3. 最新稳定版本的 PM2 可以通过 NPM 安装,如图所示。

sudo npm i -g pm2 

4.安装PM2后,您可以使用以下命令启动节点应用程序。

sudo node /var/www/html/app/server.js
sudo node /var/www/html/adminside/server.js

请注意,在生产环境中,您应该使用 PM2 启动它们,如图所示(如果您的应用程序存储在普通用户具有读写权限的位置,则可能不需要 sudo 命令)。

sudo pm2 start /var/www/html/app/server.js
sudo pm2 start /var/www/html/adminside/server.js

步骤 4:如何在 Linux 中使用和管理 PM2

5. 例如,要在集群模式下启动应用程序,请使用 -i 标志指定实例数。

sudo pm2 start /var/www/html/app/server.js -i 4 
sudo pm2 scale 0 8			#scale cluster app to 8 processes

6. 要列出所有节点应用程序(进程/微服务),请运行以下命令。

sudo pm2 list

7. 要监控所有进程的日志、自定义指标、进程信息,请运行以下命令。

sudo pm2 monit

8. 使用进程 ID 或名称查看如图所示的单个节点进程的详细信息。

sudo pm2 show 0

步骤 5:如何在 Linux 中使用 PM2 管理节点应用程序

9.以下是您应该注意的一些常见进程(单个或全部)管理命令的列表。

sudo pm2 stop all                  		#stop all apps
sudo pm2 stop 0                    		#stop process with ID 0
sudo pm2 restart all               		#restart all apps
sudo pm2 reset 0		         	#reset all counters
sudo pm2 delete all                		#kill and remove all apps
sudo pm2 delete 1                 		#kill and delete app with ID 1

10. 要管理应用程序日志,请使用以下命令。

sudo pm2 logs                      	#view logs for all processes 
sudo pm2 logs 1	         	#view logs for app 1
sudo pm2 logs --json               	#view logs for all processes in JSON format
sudo pm2 flush			#flush all logs

11. 要管理 PM2 进程,请使用以下命令。

sudo pm2 startup            #enable PM2 to start at system boot
sudo pm2 startup systemd    #or explicitly specify systemd as startup system 
sudo pm2 save               #save current process list on reboot
sudo pm2 unstartup          #disable PM2 from starting at system boot
sudo pm2 update	      #update PM2 package

第 6 步:从 Web 浏览器访问节点应用程序

12. 要从远程 Web 浏览器访问所有节点应用程序,首先需要在系统防火墙上打开以下端口,以允许客户端连接到应用程序,如图所示。

-------- Debian and Ubuntu -------- 
sudo ufw allow 3000/tcp
sudo ufw allow 3001/tcp
sudo ufw reload

-------- RHEL and CentOS --------
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --permanent --add-port=3001/tcp
firewall-cmd --reload 

13.然后通过网络浏览器使用以下 URL 访问您的应用:

http://198.168.43.31:3000
http://198.168.43.31:3001 

最后但并非最不重要的一点是,PM2是一个简单的内置模块系统,用于扩展其核心功能,其中一些模块包括 pm2-logrotate、pm2-webshell、pm2-server-monit 等 –您还可以创建和使用自己的模块。

有关更多信息,请访问 PM2 GitHub 存储库:https://github.com/Unitech/PM2/。

就这样! PM2 是一个先进、高效的 Node.js 生产级流程管理器,具有内置负载均衡器。在本文中,我们展示了如何在 Linux 中安装和使用 PM2 来管理 Nodejs 应用程序。如果您有任何疑问,请通过下面的评论表发送以供使用。