问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在一个Ubuntu VPS上用PM2来设置一个Node.js生产环境

发布网友 发布时间:2022-04-30 02:30

我来回答

2个回答

懂视网 时间:2022-05-15 06:49

pm2 是一个带有负载均衡功能的Node应用的进程管理器。可以把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载。

pm2的主要特性:

1、内建负载均衡(使用Node cluster 集群模块)
2、后台运行
3、0秒停机重载
4、具有Ubuntu和CentOS 的启动脚本
5、停止不稳定的进程(避免无限循环)
6、控制台检测
7、提供 HTTP API
8、远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

pm2的安装:

npm install -g pm21

pm2的用法:

pm2 start app.js -i 4 // 后台运行pm2,启动4个app.js 
   // 也可以把'max' 参数传递给 start
   // 正确的进程数目依赖于Cpu的核心数目pm2 start app.js --name my-api // 命名进程pm2 list  // 显示所有进程状态pm2 monit  // 监视所有进程pm2 logs  // 显示所有进程日志pm2 stop all  // 停止所有进程pm2 restart all // 重启所有进程pm2 reload all  // 0秒停机重载进程 (用于 NETWORKED 进程)pm2 stop 0  // 停止指定的进程pm2 restart 0  // 重启指定的进程pm2 startup  // 产生 init 脚本 保持进程活着pm2 web  // 运行健壮的 computer API endpoint pm2 delete 0  // 杀死指定的进程pm2 delete all  // 杀死全部进程12345678910111213141516

pm2运行进程的不同方式:

pm2 start app.js -i max // 根据有效CPU数目启动最大进程数目pm2 start app.js -i 3 // 启动3个进程pm2 start app.js -x //用fork模式启动 app.js 而不是使用 clusterpm2 start app.js -x -- -a 23 // 用fork模式启动 app.js 并且传递参数 (-a 23)pm2 start app.js --name serverone // 启动一个进程并把它命名为 serveronepm2 stop serverone // 停止 serverone 进程pm2 start app.json // 启动进程, 在 app.json里设置选项pm2 start app.js -i max -- -a 23   //在--之后给 app.js 传递参数pm2 start app.js -i max -e err.log -o out.log // 启动并生成一个配置文件// 也可以执行用其他语言编写的app ( fork 模式):pm2 start my-bash-script.sh -x --interpreter bash
pm2 start my-python-script.py -x --interpreter python12345678910111213

常用命令使用:

pm2 list

列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。

pm2 monit

监视每个node进程的CPU和内存的使用情况

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

利用JS使用POST方式提交请求的方法(结合代码详细解答)

js代码延迟一定时间后执行一个函数的实例

Avalonjs 实现简单购物车功能

热心网友 时间:2022-05-15 03:57

###创建一个安全账户来运行你的代码
当你刚创建好DigitalOcean droplet后,会收到使用根账户登录的指令:
<pre>To login to your droplet, you will need to open a terminal window and copy and paste the following string:
ssh root@192.241.xxx.xxx</pre>
请注意:‘192.241.xxx.xxx’会有些不同之处。当你的虚拟服务器设置好并用ssh登录后,只管跟着执行DigitalOcean给出的指令就可以。正如我们大多数理解的那样,如果你使用根账户运行代码,而不怀好意的人泄露了代码,他就可以完全控制你的VPS。为避免事情发生,要设置一个安全账户,即使我们提供了合适的密码,账户仍然可以执行根操作。在本教程中,我们就给安全账户起名叫做“safeuser”-你也可以随便命名。现在,作为根用户登陆,并执行这些步骤:
在 /home/safeuser/里用一个文件夹创建用户:
<pre>useradd -s /bin/bash -m -d /home/safeuser -c “safe user” safeuser</pre>
给safeuser设置密码—输入以下命令后,你需要输入两遍:
<pre>passwd safeuser</pre>
给安全用户使用根级别命令的权限:
<pre>usermod -aG sudo <username></pre>
<br>
###作为安全用户登陆
按ctrl+D退出你的DigitalOcean根会话。
请注意作为安全用户登录的命令是你之前使用的同样命令,但用户名变了。而作为安全用户登陆时,每次你想运行一个具有根特权的命令时,需要在命令前加一个词:sudo。自己机器上的命令行使用命令登陆会显示下面的信息。
<pre>sh safeuser@192.241.xxx.xxx</pre>
<br>
###安装GIT
登陆后,安装GIT(我们会用GIT安装Node.js.)。如果出于一些原因,你不熟悉GIT的话,你会爱上这个漂亮的工具一辈子。如果您想知道更多,可以阅读GIT book。在Ubuntu上安装很容易:
<pre>sudo apt-get install git</pre>
Sudo表明你想作为根用户运行这一命令,你会看到密码提示,就是安全用户密码。当提供密码后,命令开始运行。
<br>
###安装最新的Node.JS
请注意在写本教程时,v0.10.24是Node最新版本,如果出现更新版本,请使用更新版本。
输入以下命令,一次一行,观察你的droplet下载、编译以及安装Node.js时的不可思议的变化。
<pre>sudo apt-get install build-essential
sudo apt-get install curl openssl libssl-dev
git clone
cd node
git checkout v0.10.24
./configure
make
sudo make install</pre>
当你输入sudo make,会发生很多事,耐心点。
当make install进程完毕后,为确保一切顺利,输入:
<pre>node -v</pre>
如果一切顺利,你会看到:
<pre>v0.10.24.</pre>
<br>
###授予安全用户使用80端口的权限
记住,我们不想作为根用户运行你的应用程序,但有个*:你的安全用户没有权限使用默认的HTTP 端口(80)。你的目标是发布一个网站,在网站上访问者可以通过导航轻松地使用像h这样的URL。
不走运的是,除非作为根用户登陆,一般情况下,你都需要使用像这样的一个URL—注意端口号。
很多人在这儿卡住,其实解决方法很简单,有几种方法,但有一个我比较偏爱。输入下面的命令:
<pre>sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node</pre>
现在,当你告诉一个Node应用程序你希望它在80端口运行,它会任劳任怨。
<br>
###使用NPM安装一个名为PM2的包
NPM是一个包管理器,要用它来安装框架和库,和你的Node.js应用程序一起使用。NPM是和Node.js一起安装的。PM2是个贴心的小工具,它会为你解决两个问题:
1.    如果它崩溃了,会通过重启应用程序让你的站点保持正常。
这些崩溃是不该发生的,但了解PM2能挽救你还是很好的。(一些人可能知道Forever.js,这是另外一个工具,可以让node基础站点保持运行—不过我觉得你会发现PM2能提供更多帮助)
2.每次你重启服务器时,你的node应用程序会作为一项服务重启,这样会帮助到你。一些用户知道其他的方法,但pm2更加简单,而且它添加了一些灵活性。
在命令行输入下列命令安装PM2:
<pre>sudo npm install pm2 -g</pre>
<br>
###创建一个简单的Node App
在这儿你可以测试环境,以确保一切工作顺利进行。在这个例子中,我会使用IP地址,但目标应该是用一个域名。点击查看这些指令:如何用DigitalOcean创建一个主机名。
首先,测试前创建一个简单的node app,在命令行输入:
<pre>nano app.js</pre>
然后,在nano编辑器输入下面的代码:

<pre>var http = require(‘http’);
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end(“Hello World\n”);
});
server.listen(80);
console.log(“Server running at  /”);</pre>
<br>


使用Ctrl-X退出,如果nano询问你是否保存,回答yes。
现在你有了一个基于node的名为app.js的应用程序,可以用它测试环境。
可以在命令行输入下列内容运行app.js:
<pre>node app.js</pre>
完成后,通过浏览器,并输入IP地址作为URL,你应该可以看到你的hello world文本了。可以按Crtl+C中断执行。我们不想这样运行应用程序,这儿有一个要好得多的方法,我们用PM2来运行,不直接用Node。
<br>
###使用Pm2运行你的app,并保证你的服务器重启时,node.js应用自动启动
如果你用pm2运行你的应用程序,会有很大益处。现在不要像上面那样运行app,用下面的命令:
<pre>pm2 start app.js</pre>
你应该能看到这个内容:
<br>
用这种方式运行你的应用程序,有什么优势呢?
•   如果应用程序崩溃,PM2会自动将其重启。
•   PM2会记录你未处理的异常情况—如果出现这种情况,会在/home/safeuser/.pm2/logs/app-err.log.目录的一个文件里。
•   当服务器重启时,一个命令,PM2就可以保证任何它管理的应用程序重启。基本上,你的node应用程序会作为一项服务开启。
运行这条命令,将应用程序作为一项服务运行:
<pre>sudo env PATH=$PATH:/usr/local/bin pm2 startup -u safeuser</pre>
请注意,你可能不会把用户名设置为安全用户—使用和你的设置相对应的名字。你应该会看到下面内容:

<pre>Adding system startup for /etc/init.d/pm2-init.sh …
/etc/rc0.d/K20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc1.d/K20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc6.d/K20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc2.d/S20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc3.d/S20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc4.d/S20pm2-init.sh -> …/init.d/pm2-init.sh
/etc/rc5.d/S20pm2-init.sh -> …/init.d/pm2-init.sh</pre>
<br>


现在我们的目标已经完成了!
•   你并未作为根用户运行;因此,你的app更安全。
•   你是在用80端口,一般只有根用户使用。
•   如果你的应用程序崩溃,它会重启,而且会保持未处理异常情况的记录。
•   服务器开启时,你的应用程序会重启。
玩的开心吧!这个开始阶段的设置相当强大了吧。
<br>
读后感:你可能注意到在safeuser目录里,有一个名为node的文件夹。它是在安装时使用的,但你已经不再需要了,可以删掉,输入:
关于node还有很多要学,但这个教程会带你走在正确的轨道上。要学习更多关于pm2的东西,可以访问pm2 repo。
重要说明:有一个启动脚本可以启动你的Node应用程序,但如果你知道它怎样工作的话,可以避免很多混淆,脚本叫做‘pm2-init.sh.’,在 'etc/init.d/’目录里,但它不会启动app.js。相反,服务器最后一次关机时,它会启动运行在PM2下的程序。
这很重要。当你输入pm2 list,如果你的node应用程序没有出现在list,你的app在服务器重启时将不会重启。使用pm2开启你的apps,以保证它们会重启:

<pre>pm2 start app.js</pre>
<br>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? rap2在linux下前端和后台服务如何启动可以让服务进程在后台运行 pm2项目管理是什么 视频制作剪辑哪个app好 你认为日照最有名的三个景点是哪三个? 求推荐一款好用的视频制作APP? 在windows下用pm2启动程序 的时候报错,有人帮我看下么 硬盘上的PM2,OPT,SSC.各是什么意思? pm2 最多能启动多少个nodejs 用PM2的时候,如何指定用哪个用户启动node 怎么用pm2开启harmony模式 nuxt项目怎么使用pm2进行启动 12306账号密码都不记得怎么找回 莲藕花生冬菇排骨汤孕妇 12306用户名和密码完全都不记得了&#39;怎样才能找回呢? 莲藕花生排骨汤孕妇可以吃吗 莲藕花生排 莲藕花生排骨汤孕妇可以吃吗 莲藕花生排骨汤如何做 孕妇可以吃莲藕花生排骨汤吗 SQL问题-查询的多条记录连接成一个字符串 莲藕花生排骨汤孕妇可以喝吗 莲藕花生排骨汤孕妇可以吃吗 莲藕花生排骨汤的 什么是nginx,什么是 pm2,这俩者冲突吗 pm2守护进程挂掉是怎么回事 什么是止盈止损? 止盈和止损的概念是什么 止盈止损怎么解释 苹果铃声在哪儿设置 止盈止损的定义 苹果手机铃声在哪里设置! 求指教! iphone 12如何设置铃声 苹果手机的铃声怎么设置不知道在哪里设置 请问滴滴安逸花怎么还钱 安逸花可以用其他手机还款吗? 安逸花怎么提前还款 安逸花短信发到哪个手机号 安逸花借钱了但是换手机了忘了还卡也注销了该怎么还 我在安逸花借款一年了用别的手机号登录的那个手机号号现在是空号我想还款怎么? 重庆警察学院招生条件 重庆警察学院2021年招生简章 重庆警察学院的招生要求 重庆警察学院招生条件是什么?