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

pm2是Node.js应用程序的进程管理器,它允许您保持您的应用程序活动并具有内置的负载均衡器。在本教程中,我将...

pm2是Node.js应用程序的进程管理器,它允许您保持应用程序存活并具有内置的负载均衡器。 它简单而强大,您可以随时重新启动或重新加载节点应用程序,而且停机时间也将为零,并允许您创建节点应用程序的集群。

在本教程中,我将向您展示如何为简单的“Express”应用程序安装和配置pm2,然后将Nginx配置为在pm2下运行的节点应用程序的反向代理。

先决条件

  • Ubuntu 16.04 - 64bit
  • 根特权

第1步 - 安装Node.js LTS

在本教程中,我们将从头开始我们的项目。 首先,我们需要在服务器上安装Nodejs。 我将使用Nodejs LTS版本6.x,它可以从nodesource库中安装。

从Ubuntu存储库安装软件包“ python-software-properties ”,然后添加“nodesource”Nodejs存储库。

sudo apt-get install -y python-software-properties
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

安装最新的Nodejs LTS版本。

sudo apt-get install -y nodejs

安装成功后,请检查节点和npm版本。

node -v
npm -v

检查node.js版本

第2步 - 生成Express示例应用程序

我将使用一个名为“ express-generator ”的包生成的简单Web应用程序框架,用于此示例安装。 可以使用npm命令安装Express-generator。

用npm安装“ express-generator

npm install express-generator -g

-g:在系统中安装软件包

我们将作为普通用户运行应用程序,而不是根用户或超级用户。 所以我们需要先创建一个新用户。

创建一个新用户,我命名为' yume ':

useradd -m -s /bin/bash yume
passwd yume

使用su登录新用户:

su - yume

接下来,使用express命令生成一个新的简单Web应用程序:

express hakase-app

该命令将创建新的项目目录“ hakase-app ”。

用快速生成器生成应用程序框架

转到项目目录并安装应用程序所需的所有依赖项。

cd hakase-app
npm install

然后使用以下命令测试并启动一个新的简单应用程序:

DEBUG=myapp:* npm start

默认情况下,我们的快速应用程序将在端口3000上运行。 现在访问服务器IP地址: 192.168.33.10 : 3000

表示在端口3000上运行的nodej

简单的Web应用程序框架在端口3000上运行,在用户'yume'下运行。

第3步 - 安装pm2

pm2是一个节点包,可以使用npm命令安装。 所以让我们用npm安装(用root权限,当你还是以用户hakase的身份登录后,再运行命令“exit”,再次成为root)

npm install pm2 -g

现在我们可以使用pm2作为我们的Web应用程序。

转到应用程序目录“ hakase-app ”:

su - hakase
cd ~/hakase-app/

在那里你可以找到一个名为' package.json '的文件,用cat命令显示它的内容。

cat package.json

表达nodejs服务配置

您可以看到' start '行包含Nodejs用于启动express应用程序的命令。 这个命令我们将使用pm2进程管理器。

使用pm2命令运行express应用程序:

pm2 start ./bin/www

现在可以看到结果如下:

用pm2运行nodejs应用程序

我们的快速应用程序在pm2下运行,名称为“ www ”,id为“ 0 ”。 您可以使用show option'show nodeid | name '获取有关在pm2下运行的应用程序的更多详细信息。

pm2 show www

pm2服务状态

如果您想查看我们的应用程序的日志,可以使用logs选项。 这只是访问和错误日​​志,您可以看到应用程序的HTTP状态。

pm2 logs www

pm2服务日志

你可以看到我们的进程正在运行。 现在,让我们启动它在启动时启动。

pm2 startup systemd

systemd :Ubuntu 16正在使用systemd。

您将收到一条以root身份运行命令的消息。 使用“退出”返回到root权限,然后运行该命令。

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume

它将生成用于应用程序启动的systemd配置文件。 当您重新启动服务器时,应用程序将在启动时自动运行。

pm2添加服务到引导时间启动

第4步 - 安装和配置Nginx作为反向代理

在本教程中,我们将使用Nginx作为节点应用程序的反向代理。 Ubuntu存储库中提供了Nginx,并使用apt命令进行安装:

sudo apt-get install -y nginx

接下来,转到' sites-available '目录并创建一个新的虚拟主机配置文件。

cd /etc/nginx/sites-available/
vim hakase-app

粘贴配置如下:

upstream hakase-app {
    # Nodejs app upstream
    server 127.0.0.1:3000;
    keepalive 64;
}

# Server on port 80
server {
    listen 80;
    server_name hakase-node.co;
    root /home/yume/hakase-app;

    location / {
        # Proxy_pass configuration
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_max_temp_file_size 0;
        proxy_pass http://hakase-app/;
        proxy_redirect off;
        proxy_read_timeout 240s;
    }
}

保存文件并退出vim。

在配置上:

  • 该节点应用程序正在以域名“ hakase-node.co ”运行。
  • 来自nginx的所有流量都将转发到在端口3000上运行的节点应用程序。

通过在启用站点的目录中创建符号链接来激活配置。

ln -s /etc/nginx/sites-available/hakase-app /etc/nginx/sites-enabled/

测试Nginx配置,并确保没有错误。

nginx -t

启动Nginx并启动它在启动时启动:

systemctl start nginx
systemctl enable nginx

第5步 - 测试

打开您的网页浏览器并访问域名(我的是):

http://hakase-app.co

您将看到快速应用程序正在nginx Web服务器下运行。

Nodejs ap运行pm2和nginx

接下来,重新启动服务器,并确保节点应用程序在启动时运行:

pm2 save
sudo reboot

如果您已经重新登录到服务器,请检查节点应用进程。 运行下面的命令为' yume '用户。

su - yume
pm2 status www

nodejs在启动时运行pm2

Node应用程序在pm2和Nginx下运行,作为反向代理。