zmrdlb 2019-07-18
PM2是Node.js的免费开源,高级,高效和跨平台的生产级流程管理器,具有内置负载均衡器。它适用于Linux,MacOS以及Windows。它支持应用程序监控,微服务/流程的高效管理,以群集模式运行应用程序,正常启动和关闭应用程序。
它通过自动重启保持您的应用程序“永远活着”,并且可以启用以在系统引导时启动,从而允许高可用性(HA)配置或体系结构。
值得注意的是,PM2允许您以群集模式运行应用程序,而无需对代码进行任何更改(这也取决于服务器上的CPU核心数)。它还允许您轻松管理应用程序日志等等。
此外,它还对Express,Adonis Js,Sails,Hapi等主要Node.js框架提供了令人难以置信的支持,无需进行任何代码更改。 PM2正被IBM,Microsoft,PayPal等公司使用。
在本文中,我们将解释如何安装和使用PM2在Linux生产服务器中运行Nodejs应用程序。我们将创建一个应用程序,用于演示PM2的一些基本功能,以便您开始使用它。
第1步:在Linux中安装Nodejs和NPM
1.要安装最新版本的Node.js和NPM,首先需要在Linux发行版下启用官方NodeSource存储库,然后安装Node.js和NPM软件包,如图所示。
在Debian/Ubuntu上
---------- 安装 Node.js v11.x ----------
$ curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
$ sudo apt-get install -y nodejs
---------- 安装 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上
---------- 安装 Node.js v11.x ----------
$ curl -sL https://rpm.nodesource.com/setup_11.x | bash -
---------- 安装 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 Product Process Manager
3.如图所示,可以通过NPM安装最新稳定版的PM2。
$ sudo npm i -g pm2
4.安装PM2后,可以使用以下命令启动node应用程序。
$ 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
使用PM2启动Nodejs App
第4步:如何在Linux中使用和管理PM2
5.例如,使用-i标志以集群模式启动应用程序以指定实例数。
$ sudo pm2 start /var/www/html/app/server.js -i 4
$ sudo pm2 scale 0 8 #将群集应用扩展到8个进程
6.要列出所有节点应用程序(进程/微服务),请运行以下命令。
$ sudo pm2 list
列出所有PM2管理node应用程序
7.通过运行以下命令来监视日志,自定义度量标准,来自所有进程的进程信息。
$ sudo pm2 monit
监控所有Node进程
8.使用进程ID或名称查看所示的单个Node进程的详细信息。
$ sudo pm2 show 0
查看单个应用的详细信息
第5步:如何在Linux中使用PM2管理Node应用程序
9.以下是您应注意的一些常见流程(单个或所有)管理命令的列表。
$ sudo pm2 stop all #停止所有应用
$ sudo pm2 stop 0 #停止ID为0的进程
$ sudo pm2 restart all #重启所有应用
$ sudo pm2 reset 0 #重置所有计数器
$ sudo pm2 delete all #杀死并删除所有应用
$ sudo pm2 delete 1 #杀死并删除ID为1的应用
10.要管理应用程序日志,请使用以下命令。
$ sudo pm2 logs #查看所有进程的日志
$ sudo pm2 logs 1 #查看应用1的日志
$ sudo pm2 logs --json #以JSON格式查看所有进程的日志
$ sudo pm2 flush #刷新所有日志
11.要管理PM2进程,请使用以下命令。
$ sudo pm2 startup #启用PM2在启动系统时启动
$ sudo pm2 startup systemd #或者将systemd明确指定为启动系统
$ sudo pm2 save #重启时保存当前进程列表
$ sudo pm2 unstartup #禁用PM2从系统引导启动
$ sudo pm2 update #更新PM2包
步骤6:从Web浏览器访问node应用程序
12.要从远程Web浏览器访问所有node应用程序,首先需要在系统防火墙上打开以下端口,以允许客户端连接到应用程序,如图所示。
-------- Debian 与 Ubuntu --------
$ sudo ufw allow 3000/tcp
$ sudo ufw allow 3001/tcp
$ sudo ufw reload
-------- RHEL 与 CentOS --------
# firewall-cmd --permanent --add-port=3000/tcp
# firewall-cmd --permanent --add-port=3001/tcp
# firewall-cmd --reload
13.然后使用以下URL从Web浏览器访问您的应用程序:
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的高级,高效的生产级流程管理器,具有内置的负载均衡器。 在本文中,我们展示了如何安装和使用PM2来管理Linux中的Nodejs应用程序。 如果您有任何疑问,请通过下面的评论表发送给我们。