介绍
Node.js是一个开源的Javascript运行时环境,用于轻松构建服务器端和网络应用程序。该平台在Linux,OS X,FreeBSD和Windows上运行,其应用程序使用JavaScript编写。 Node.js应用程序可以在命令行运行,但我们将教你如何作为服务运行他们,所以他们将在重新启动或故障时自动重新启动,以便您可以在生产环境中使用它们。 在本教程中,我们将介绍如何设置一个由两个Ubuntu 14.04服务器组成的生产就绪的Node.js环境;一个服务器将运行由PM2管理的Node.js应用程序,而另一个服务器将通过Nginx逆向代理向应用程序服务器提供用户对应用程序的访问。 本教程的CentOS的版本可以找到 这里 。先决条件
本指南使用 与专用网络 2的Ubuntu 14.04服务器(在同一数据中心)。我们将通过以下名称提及它们:- 应用 :在这里我们将安装Node.js的运行时服务器,您的Node.js应用程序,PM2
- 网址 :我们将安装Nginx的网络服务器,这将作为一个反向代理到应用程序服务器。用户将访问此服务器的公共IP地址以访问您的Node.js应用程序。
127.0.0.1
,无论使用
应用程序服务器的私有IP地址。 这里是一个图表,你的设置将遵循本教程后:
在开始本指南之前,你应该有一个正规,非root用户
sudo
两个服务器的配置权限-这是你应登录到服务器的用户。 你可以学习如何按照1-4我们的步骤来配置一个普通用户帐户
初始服务器设置指南的Ubuntu 14.04 。 如果你希望能够通过域名来访问,而不是它的公网IP地址,你的
Web服务器,然后购买一个域名遵循这些教程:
让我们从
应用服务器上安装的Node.js运行时启动。
安装Node.js
我们将安装Node.js的最新LTS版, 应用程序服务器上。 在 应用服务器,让我们更新使用此命令apt-get的软件包列表:sudo apt-get update
然后用
apt-get
安装
git
包,
npm
取决于:
sudo apt-get install git
转至
Node.js的下载页面 ,找到
Linux程序(.tar.xz)下载链接。 右键单击它,并将其链接地址复制到剪贴板。 在写这篇文章的时候,最新的LTS版本是
4.2.3。 如果你喜欢安装的Node.js的最新的稳定版本,进入
相应的页面 ,并复制该链接。 切换到你的主目录,并下载Node.js的源
wget
。粘贴下载链接以替代突出显示的部分:
cd ~
wget https://nodejs.org/dist/v4.2.3/node-v4.2.3-linux-x64.tar.gz
现在提取tar归档您刚刚下载到
node
这些命令目录:
mkdir node
tar xvf node-v*.tar.?z --strip-components=1 -C ./node
如果您想删除已下载的存档的Node.js,因为我们不再需要它,切换到你的主目录,并使用此
rm
命令:
cd ~
rm -rf node-v*
接下来,我们将配置全局
prefix
的
npm
,在
npm
将创建符号链接,安装节点程序包,到地方,它在你的默认路径。 我们将其设定为
/usr/local
用这个命令:
mkdir node/etc
echo 'prefix=/usr/local' > node/etc/npmrc
现在,我们已经准备好了移动
node
和
npm
二进制文件到我们的安装位置。 我们将其移动到
/opt/node
用这个命令:
sudo mv node /opt/
在这一点上,你可能想使
root
文件的所有者:
sudo chown -R root: /opt/node
最后,让我们创建符号链接
node
和
npm
在默认路径的二进制文件。 我们会把中的链接
/usr/local/bin
使用以下命令:
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm
通过使用此命令检查节点的版本来验证节点是否已安装:
node -v
Node.js运行时现在已安装,并准备运行应用程序!让我们编写一个Node.js应用程序。
创建Node.js应用程序
现在,我们将创建一个 Hello World应用程序,它只是返回的“Hello World”的任何HTTP请求。这是一个示例应用程序,将帮助您获取您的Node.js设置,您可以用您自己的应用程序替换它 - 只是确保您修改您的应用程序以侦听适当的IP地址和端口。 因为我们希望我们的Node.js应用服务是来自于我们的反向代理服务器 ,Web请求,我们将利用服务器间通信的我们的 应用程序服务器的专用网络接口。 查一查你的 应用服务器的私网地址。 如果您使用的是DigitalOceanDroplet为您的服务器,您可以通过 元数据服务查找服务器的私有IP地址。 在 应用服务器上,使用curl
命令现在来获取IP地址:
curl -w "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address
您将要复制输出(私有IP地址),因为它将用于配置我们的Node.js应用程序。
Hello World代码
接下来,创建并打开您的Node.js应用程序以进行编辑。在本教程中,我们将使用vi
编辑一个示例应用程序名为
hello.js
:
cd ~
vi hello.js
将下面的代码到该文件,并确保替代
应用程序服务器的专用IP地址为强调
APP_PRIVATE_IP_ADDRESS
项目。 如果你愿意,你也可以更换高亮度显示端口,
8080
,在这两个位置(一定要使用非管理端口,即1024或更高版本):
hello.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8080, 'APP_PRIVATE_IP_ADDRESS');
console.log('Server running at http://APP_PRIVATE_IP_ADDRESS:8080/');
现在保存并退出。 这Node.js的应用程序只监听指定的IP地址和端口,并配有回报的“Hello World”
200
HTTP成功代码。 这意味着应用程序是从同一个专用网络,在服务器上只可达如我们的
Web服务器。
测试应用程序(可选)
如果你想测试你的应用程序的工作原理,运行该node
的
应用程序服务器上的命令:
node hello.js
注:以这种方式运行的Node.js应用程序会阻止其他命令,直到应用程序被打死按
CTRL+C
。 为了测试应用程序,打开另一个终端会话,并连接到
Web服务器。 由于Web服务器是同一个专用网络上,它应该能够达到使用的
应用程序服务器的私有IP地址
curl
。 一定要在
应用程序服务器的专用IP地址替代
APP_PRIVATE_IP_ADDRESS
,如果你改变了它的端口:
curl http://APP_PRIVATE_IP_ADDRESS:8080
如果看到以下输出,应用程序正常工作并侦听正确的IP地址和端口:
Output:Hello World
如果没有看到正确的输出,请确保您的Node.js应用程序正在运行,并配置为监听正确的IP地址和端口。 在
应用服务器,一定要杀死应用程序(如果您还没有),按
CTRL+C
。
安装PM2
现在我们将安装PM2,它是Node.js应用程序的进程管理器。 PM2提供了一种简单的方法来管理和守护应用程序(作为服务运行它们)。 我们将使用节点打包模块(NPM),它基本上是对节点模块的软件包管理与Node.js的安装,到我们的 应用程序服务器上安装PM2。使用此命令安装PM2:sudo npm install pm2 -g
使用PM2管理应用程序
PM2简单易用。我们将介绍PM2的几个基本用途。启动应用程序
你会想要做的第一件事就是使用pm2 start
命令来运行你的应用程序,
hello.js
,在后台:
pm2 start hello.js
这也将您的应用程序添加到PM2的进程列表,这是每次启动应用程序时输出的:
Output:┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬────────────┬──────────┐
│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │
├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼────────────┼──────────┤
│ hello │ 0 │ fork │ 5871 │ online │ 0 │ 0s │ 9.012 MB │ disabled │
└──────────┴────┴──────┴──────┴────────┴───────────┴────────┴────────────┴──────────┘
正如你所看到的,PM2自动分配一个
应用程序名称 (基于文件名,没有
.js
扩展名)和PM2
ID。 PM2还维护的其它信息,如进程的
PID,其当前状态,和存储器使用率。 在PM2下运行的应用程序将在应用程序崩溃或被终止时自动重新启动,但需要执行额外的步骤才能在系统启动(启动或重新引导)时启动应用程序。幸运的是,PM2提供了一种简单的方法来做到这一点,
startup
子命令。 该
startup
子产生并配置启动脚本启动PM2和管理流程上的服务器引导。 你还必须指定要运行的平台,这是
ubuntu
,在我们的例子:
pm2 startup ubuntu
结果输出的最后一行将包含必须运行的命令(必须以超级用户权限运行):
Output:[PM2] You have to run this command as root
[PM2] Execute the following command :
[PM2] sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy"
运行生成的命令(类似于上面突出显示的输出),将PM2设置为在引导时启动(使用您自己的输出中的命令):
sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy"
其他PM2用法(可选)
PM2提供了许多子命令,允许您管理或查找有关应用程序的信息。请注意,运行pm2
不带任何参数将显示一个帮助页面,包括用法示例,涵盖PM2使用在除本节中的更多细节。 停止使用此命令(指定PM2的应用程序
App name
或
id
):
pm2 stop example
重新启动使用此命令(指定PM2的应用程序
App name
或
id
):
pm2 restart example
目前由PM2管理的应用程序列表也可以抬头与
list
子命令:
pm2 list
有关特定应用程序的更多信息,可以通过使用发现
info
子(指定PM2
应用程序名称或
ID)::
pm2 info example
该PM2进程监视器可以与拉升
monit
子命令。这将显示应用程序状态,CPU和内存使用情况:
pm2 monit
现在你的Node.js应用程序正在运行,并由PM2管理,让我们设置反向代理。
设置反向代理服务器
现在您的应用程序正在运行,并且正在侦听私有IP地址,您需要为用户设置一种方式来访问它。我们将为此设置一个Nginx Web服务器作为反向代理。本教程将从头开始设置一个Nginx服务器。如果你已经有一个Nginx的服务器设置,您可以将刚才复制location
块到您选择的服务器模块(确保位置不与任何Web服务器的现有内容的冲突)。 在
Web服务器上,让我们更新使用此命令apt-get的软件包列表:
sudo apt-get update
然后使用apt-get安装Nginx:
sudo apt-get install nginx
现在打开默认服务器块配置文件进行编辑:
sudo vi /etc/nginx/sites-available/default
删除文件中的所有内容并插入以下配置。一定要代替你自己的域名为
server_name
指令(或IP地址,如果你没有一个域设立这样做),并为
应用程序服务器的私有IP地址
APP_PRIVATE_IP_ADDRESS
。 此外,更改端口(
8080
),如果你的应用程序设置为监听在不同的端口:
/ etc / nginx / sites-available / default
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
此配置
Web服务器,以从根本上要求作出回应。 假设我们的服务器可在
example.com
,访问
http://example.com/
通过Web浏览器将请求发送到端口上的应用程序服务器的私有IP地址
8080
,将由Node.js的接收和回复应用。 您可以添加其他
location
的块到同一服务器模块能提供访问其他应用程序相同的
Web服务器上。 例如,如果您还运行在端口
应用服务器上的其他应用程序的Node.js
8081
,您可以通过添加此位置区块允许访问它
http://example.com/app2
:
Nginx配置 - 其他位置
location /app2 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
为应用程序完成添加位置块后,保存并退出。 在
Web服务器上重新启动Nginx的:
sudo service nginx restart
假设你的Node.js应用程序正在运行,并且您的应用程序和Nginx的配置是正确的,你应该能够通过
Web服务器的反向代理来访问你的应用程序。 尝试一下通过访问
Web服务器的URL(其公网IP地址或域名)。