如何在CVM上安装Node.js及PM2

介绍

本教程目的是帮助您设置Ubuntu服务器以运行Node.js程序,包括基于Express,Geddy或Sails的应用程序。这些说明将帮助您避免一些安全性错误,主要内容如下,让我们开始吧!

例如:

  • 本教程不会以root身份运行您的应用程序,您的应用程序将更安全。
  • 本教程将使用80端口来运行您的应用程序,您可以通过url直接访问。
  • 如果应用程序崩溃,您的应用程序将重新启动,并将保留未处理异常的日志。
  • 您的应用程序将自动设为开机启动,以方便运行。

以上说明假定您有一定的Linux基础知识,希望您任真阅读。在教程开始之前,你应该先购买一台服Ubuntu服务器,我建议您使用腾讯云免费开发者专属在线实验平台进行试验。

创建一个安全帐户来运行您的代码

首次使用腾讯云CVM时,您会在您的邮箱收到使用Ubuntu帐户登录的说明。说明看起来会像这样:

尊敬的用户,
您重装云服务器购买成功,感谢您对腾讯云的支持! 
服务器操作系统为 Ubuntu Server 16.04.1 LTS 64位 ,默认账户为 ubuntu ,密码是您设置的初始密码,如果忘记,请在控制台重置密码。 
服务器名称   云主机ID   所在网络ID  内网IP    公网IP
未命名 ins-XXXX    vpc-XXXX    172.27.X.X  118.24.XXX.XXX

这里我们先以Ubuntu账户登录,并创建名为safeuser的账户118.24.XXX.XXX对您而言会有所不同。在设置虚拟服务器并使用ssh登录时,只需按照从腾讯云CVM收到的说明进行操作即可。

ssh ubuntu@118.24.XXX.XXX
useradd -s /bin/bash -m -d /home/safeuser -c "safe user" safeuser

为safeuser创建密码,输入以下命令后,系统会要求您输入两次密码:

passwd safeuser

授予安全用户使用root别命令的权限:

usermod -aG sudo <username>

以safeuser身份登录

按ctrl-D退出腾讯云CVM ubuntu会话。请注意,以安全用户身份登录的命令与您之前使用的命令相同,但用户名已更改。一旦以安全用户身份登录,每次要运行具有root权限的命令时,您必须使用sudo继续执行该命令。从您自己计算机上使用下面显示的命令登录。

ssh safeuser@192.241.xxx.xxx

安装GIT

下面我们来安装GIT(我们将使用GIT安装Node.js)。

在Ubuntu上安装:

sudo apt-get install git

sudo表示您要以root身份运行此命令。系统将提示您输入密码,输入密码后,将运行该命令。

安装最新的Node.JS

请注意,在撰写本文时,v0.10.24是Node的最新版本。如果有更新的版本,请使用该版本号。输入以下命令进行安装:

sudo apt-get install build-essential
sudo apt-get install curl openssl libssl-dev
git clone https://github.com/joyent/node.git
cd node
git checkout v0.10.24
./configure
make
sudo make install

make install命令执行完成后,请输入以下命令检查您的服务器是否安装了node:

node -v

如果一切顺利,你应该看到:

v0.10.24.

授予safeuser使用80端口

我们不希望以root用户身份运行您的应用,但有一个问题:safeuser无权使用默认HTTP端口(80)。但是这样,用户就无法通过http://mysite.com访问你的网站了。除非你以root用户身份登录,否则你必须使用http://mysite.com:3000这样的网址才能登录。

有没有解决方案呢?答案很简单,输入以下命令:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node

现在,当您告诉Node应用程序您希望它在80端口上运行,他就会使用80端口啦!

使用NPM安装PM2程序

NPM是一个包管理器,您将使用它来安装与Node.js应用一起使用的框架和库。PM2是一个很好的工具,可以解决两个问题:

  1. 如果应用程序崩溃,它将通过重新启动应用程序来保证您服务正常运行。虽说这些崩溃不常发生,但是我们建议还是将PM2作为备选方案。
  2. 每次重新启动服务器时,它都会通过重新启动node程序。使用PM2可以使整个过程更轻松,使体验更加灵活。

通过在命令行输入下面的命令来安装PM2:

sudo npm install pm2 -g

创建一个简单的node应用

您可以测试您的环境,以确保一切正常。在此示例中,我将使用IP地址,建议您使用域名,域名注册请点击这里

首先,创建一个简单的node.js应用程序,仅用于测试。在命令行输入

nano app.js

然后在nano编辑器中输入以下代码行:

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 http://127.0.0.1:80/");

ctrl-X退出 - 当nano询问您是否要保存时,请回答是。

现在您有了一个名为app.js的基于node.js的应用程序,您可以使用它来测试您的环境。

您可以通过输入以下命令运行app.js

node app.js

现在,您应该能够通过浏览器输入您的IP地址来查看您的hello world文本。您可以通过按crtl-C来中断执行。其实更好的方法是使用PM2来运行它,而不是直接使用Node。

使用PM2运行您的应用程序,并确保在服务器重新启动时自动启动node.js应用程序

如果您使用pm2运行应用程序,那么你会发现pm2的好处,使用以下命令运行它:

pm2 start app.js

你应该看到这个报告:

以这种方式运行应用程序有什么好处?

  • 如果应用程序崩溃,PM2将自动重启您的应用程序。
  • PM2将记录未处理的异常日志,在本例中,位于/home/safeuser/.pm2/logs/app-err.log中的文件中。
  • PM2可以确保在服务器重新启动时它管理的任何应用程序都会重新启动。简单的讲,您的node.js应用程序将作为服务启动。

输入以下内容将您的应用程序作为服务运行:

sudo env PATH=$PATH:/usr/local/bin pm2 startup -u safeuser

请注意,请使用与您的设置相对应的名称作为用户名。您应该看到以下报告:

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

现在我们完成了之前设定的目标!

  • 本教程不会以root身份运行您的应用程序,您的应用程序将更安全。
  • 本教程将使用80端口来运行您的应用程序,您可以通过url直接访问。
  • 如果应用程序崩溃,您的应用程序将重新启动,并将保留未处理异常的日志。
  • 您的应用程序将自动设为开机启动,以方便运行。

PS:您可能会注意到safeuser目录中名为node的文件夹。虽然它在安装过程中被使用,但实际上您不再需要它了。您可以通过输入以下内容将其删除:

rm -rf /home/safuser/node

结论

现在,你已经学会使用Ubuntu安装Node.js程序,并且学会使用PM2来控制node.js程序,购买一台服务器进行尝试吧,学无止境!更多Linux教程请前往腾讯云+社区学习。


参考文献:《How To Use PM2 to Setup a Node.js Production Environment On An Ubuntu VPS》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

使用as工具包解压zip文件

在一些请求静态资源较多的地方,如webgame中要请求很多数值相关的信息,为了减少请求数以及请求的文件大小,可以通过zip工具先将文件合并后进行压缩,得到一个z...

1113
来自专栏mini188

MongoDB安装与使用体验

1、获取并安装 具体的安装包可以到官方网站下载:http://www.mongodb.org/downloads 我看着教程就下载了linux版本吧,也不是很...

2426
来自专栏运维小白

12.24 php-fpm进程管理

12.24 php-fpm进程管理 [root@hf-01 ~]# cat /usr/local/php-fpm/etc/php-fpm.d/www.conf ...

25010
来自专栏SnailTyan

Linux的/bin、/sbin、/usr/sbin、/usr/bin、/usr/local/bin、/usr/local/sbin

1、Linux的/bin、/sbin、/usr/sbin、/usr/bin、/usr/local/bin、/usr/local/sbin /bin bin为...

2319
来自专栏后端技术探索

nginx 缓存策略实现方案

由于本人工作原因,涉及到网络直播领域,其中视频的回放下载,涉及到了一些视频下载方面的技术。针对于一个完整视频的下载,目前市面上的主流做法是,先将整个视频流切片,...

3241
来自专栏张善友的专栏

WS-Eventing、WS-Transfer Web服务标准

传输(Transfer)     WS-Transfer详细说明了对通过Web服务进行访问的数据实体进行管理所需的基本操作。要了解WS-Transfer需要介绍...

19110
来自专栏网站漏洞修补

struts2架构网站漏洞修复详情与利用漏洞修复方案

struts2从开发出来到现在,很多互联网企业,公司,平台都在使用apache struts2系统来开发网站,以及应用系统,这几年来因为使用较多,被攻击者挖掘出...

1113
来自专栏资深Tester

软件测试人员在工作中如何运用Linux

2814
来自专栏码神联盟

分布式服务集群下实现session共享解决方案

随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求。目前大多数大型网站的服务器都采用了分布式服务集群...

5378
来自专栏PHP实战技术

Redis实现缓存,你应该懂的哪些思路!

场景一:类似于微博,实现关注和被关注功能。 思路: 对每个用户使用两个集合类型键,用来存储关注别人的用户和被该用户关注的用户。当用户A关注用户B的时候,执行两步...

3787

扫码关注云+社区

领取腾讯云代金券