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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一个Ubuntu VPS上用PM2来设置一个Node.js生产环境相关的知识,希望对你有一定的参考价值。

参考技术A

###创建一个安全账户来运行你的代码
当你刚创建好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>

带有 Ubuntu 20.04 的 VPS:无法连接到 Github

【中文标题】带有 Ubuntu 20.04 的 VPS:无法连接到 Github【英文标题】:VPS with Ubuntu 20.04: Cannot connect to Github 【发布时间】:2021-05-13 03:39:38 【问题描述】:

我正在设置一个 VPS,它应该托管一个 RStudio 实例和闪亮的服务器。

我似乎在与 Github 交流方面遇到了麻烦。我已经建立了一个 Git 存储库并想对其进行测试:

git push -u origin master
fatal: konnte nicht auf 'https://github.com/***.git/' zugreifen: Couldn't connect to server

当我尝试从 Github 安装 R 库时也是如此。

sudo su - -c "R -e \"devtools::install_github('***')\""
Fehler: Failed to install 'unknown package' from GitHub:
Couldn't connect to server

我禁用了 ufw,但没有任何变化。对你有什么帮助有什么想法吗?

另外:不确定是否相关,但安装 RStudio 服务器也会产生错误:

sudo rstudio-server verify-installation
ERROR system error 1 (Operation not permitted); OCCURRED AT rstudio::core::Error rstudio::core::system::setResourceLimit(rstudio::core::system::ResourceLimit, RLimitType, RLimitType) src/cpp/core/system/PosixSystem.cpp:1485; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:569

【问题讨论】:

【参考方案1】:

回答:VPS 运行在 Github 目前不支持的 IPv6 上。

【讨论】:

以上是关于如何在一个Ubuntu VPS上用PM2来设置一个Node.js生产环境的主要内容,如果未能解决你的问题,请参考以下文章

如何把vmware里的ubuntu设置成一个服务器,然后通过主机来访问,虚拟机和主机可以同时上网?

如何设置我的 Ubuntu VPS 以发送外发邮件? [关闭]

如何在 Ubuntu 上使用 pm2 和 Nginx 部署 Node.js 应用

Ubuntu 18.04 安装 pm2

如何在Ubuntu VPS下配置VPN

带有 Ubuntu 20.04 的 VPS:无法连接到 Github