介绍
本教程旨在帮助您设置一个Ubuntu服务器来运行Node.js应用程序,包括基于Express,Geddy或Sails的应用程序。 这些说明将帮助您避免一些安全错误,以及提供一些惊人的好处,如:
您不会以root身份运行应用程序; 因此,您的应用程序将更安全。
您将使用端口80运行您的应用程序,通常只能由root用户访问。 (您将能够使用自定义URL,例如运行你的应用程序http://mysite.com -但你不必指定端口)。
如果应用程序崩溃,您的应用程序将重新启动,它将保留未处理的异常日志。
您的应用程序将在服务器启动时重新启动 - 即它将作为服务运行。
这些说明假定读者只有Linux的基本知识。 您可以跳过您不需要的信息,但按照紧密的步骤可能会提供一些优势。
创建安全帐户以运行代码
当您首次设置DigitalOceanDroplet时,您收到了使用root帐户登录的说明。 说明看起来像这样:
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请注意,'192.241.xxx.xxx'将为您不同。 只需按照您在设置虚拟服务器时从DigitalOcean收到的指示,并使用ssh登录。 正如我们大多数人所理解的,如果您使用root帐户运行代码,并且如果敌对方妥协该代码,该方可以完全控制您的VPS。 为了避免这种情况,让我们设置一个安全的帐户,如果我们提供相应的密码,仍然可以执行根操作。 为了本教程的目的,让我们调用我们的安全用户“safeuser” - 你可以命名任何你喜欢的。 现在,登录为root用户,并遵循以下步骤: 与在/ home / safeuser / A文件夹中创建用户:
useradd -s /bin/bash -m -d /home/safeuser -c "safe user" safeuser
为safeuser创建密码 - 输入以下命令后,系统会要求您键入两次:
passwd safeuser
授予安全用户权限以使用根级命令:
usermod -aG sudo <username>
以安全用户身份登录
通过按ctrl-D注销您的DigitalOcean根会话。
请注意,作为安全用户登录的命令与您以前使用的命令相同,但用户名已更改。 一旦你已经登录的用户的安全,要运行具有root权限的命令每一次,你将不得不字Sudo出发的命令。 从您自己机器上的命令行,使用下面显示的命令登录。
ssh safeuser@192.241.xxx.xxx
安装GIT
一个你已经登录,安装GIT(我们将使用GIT来安装Node.js.)。 如果,因为任何原因,你不熟悉GIT,它是一个美丽的工具,将成为你的生活的大部分。 读的书GIT如果你想知道更多。 在Ubuntu上安装它很容易:
sudo apt-get install git
这个词Sudo表示要运行这个命令的根。 系统将提示您输入密码,即安全的用户密码。 当您提供密码时,命令将运行。
安装最新的Node.JS
请注意,v0.10.24是Node最新版本的写作。 如果有较新版本,请改用该版本号。
键入以下命令,一次一行,并观察魔法下载,编译和安装Node.js:
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
当你键入sudo make,很多事情都会发生。 耐心一点。
当make安装过程结束时,通过键入以下内容确保一切正常:
node -v
如果一切顺利,你应该看到:
v0.10.24.
授予安全用户权限以使用端口80
请记住,我们不希望运行应用程序作为root用户,但这里有一个问题: 你的安全用户没有使用默认HTTP端口(80)权限 。 你的目标是能够发布一个网站,访问者可以通过导航到一个易于使用的URL像使用http://mysite.com 。
不幸的是,除非你以root身份登录时,你通常需要使用类似URL http://mysite.com:3000 -注意端口号。
很多人被困在这里,但解决方案很容易。 有几个选项,但这是我喜欢的。 键入以下命令:
sudo apt-get install libcap2-bin sudo setcap cap_net_bind_service=+ep /usr/local/bin/node
现在,当你告诉Node应用程序你想要它在端口80上运行时,它不会抱怨。
使用NPM安装名为PM2的包。
NPM是一个包管理器,您将使用它来安装框架和库以与Node.js应用程序一起使用。 NPM已安装Node.js. PM2是一个可爱的小工具,将为您解决两个问题:
它会通过重新启动应用程序,如果它崩溃,这些事故是不应该的,让您的网站,但它是很好的知道,PM2有你的背部。 (有些人可能意识到Forever.js,另一个工具,用于保持基于节点的网站运行 - 我想你会发现,PM2有很多提供。)
它会通过每次重新启动服务器时重新启动节点应用作为一种服务来帮助你。有些使用专有技术等方式做到这一点,但PM2使得它更容易,而且具有一定的灵活性。
通过在命令行中键入thr安装PM2:
sudo npm install pm2 -g
创建简单节点应用程序
这是你可以测试你的环境,以确保一切正常工作,因为它应该。 在本例中,我将使用IP地址,但您的目标应该是使用域名。 看看后来这些说明: 如何建立一个主机名与DigitalOcean
首先,创建一个简单的节点应用程序来测试。 在命令行类型:
nano app.js
然后在纳米编辑器中输入以下代码:
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退出-纳米时,询问是否要保存,回答是。
现在您有一个名为app.js的基于节点的应用程序,您可以使用它来测试您的环境。
您可以通过键入以下命令在命令行运行app.js:
node app.js
这样做,您应该能够通过使用浏览器并输入您的IP地址作为URL来查看您的hello world文本。 可以通过按crtl-C中断执行。 这不是我们想要如何运行我们的应用程序。 有一个更好的方式。 我们将使用PM2来运行它,而不是直接使用Node。
使用PM2运行应用程序,并确保您的node.js应用程序在服务器重新启动时自动启动
如果你运行你的应用程序使用pm2有一些巨大的好处。 而不是像上面运行你的应用程序,运行它使用以下命令:
pm2 start app.js
您应该会看到此报告:
以这种方式运行应用程序的优点是什么?
如果应用程序崩溃,PM2将自动重新启动。
PM2将保留您未处理的异常的日志 - 在这种情况下,在/home/safeuser/.pm2/logs/app-err.log中的文件中。
使用一个命令,PM2可以确保其管理的任何应用程序在服务器重新启动时重新启动。 基本上,您的节点应用程序将作为服务启动。
运行此命令以通过键入以下内容将应用程序作为服务运行:
sudo env PATH=$PATH:/usr/local/bin pm2 startup -u safeuser
请注意,您可能没有使用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通常只能由root用户使用。
如果应用程序崩溃,应用程序将重新启动,并且将保持未处理的异常的日志。
您的应用程序将在服务器启动时重新启动。
玩的开心! 这是一个相当健壮的设置开始。
想后:您可能注意到堪称safeuser目录节点的文件夹。 它在安装过程中使用,但您不再需要它。 您可以通过键入以下内容来删除它:
rm -rf /home/safuser/node
还有很多要了解节点,但本教程将把你放在正确的路径。 要了解更多关于PM2,请访问的PM2回购
重要澄清 :有启动的节点应用程序的启动脚本,但你会避免很多的困惑,如果你了解它是如何工作的。 该脚本称为“pm2-init.sh”。 它存在于'etc / init.d /'目录中,但它不启动app.js。 相反,它会在上次服务器关闭时启动在PM2下运行的程序。
这个很重要。 如果您的节点应用程序没有在列表中显示出来,当你键入PM2列表中,那么你的应用程序将不会重新启动服务器重新启动时。 按照正确的说明使用pm2启动应用程序,以确保它们将重新启动:
pm2 start app.js