天天看點

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

pm2 是一個 node.js 應用的程序管理器,它可以讓你的應用程式保持運作,還有一個内建的負載均衡器。它非常簡單而且強大,你可以零間斷重新開機或重新加載你的 node 應用,它也允許你為你的 node 應用建立叢集。

在這篇博文中,我會向你展示如何安裝和配置 pm2 用于這個簡單的 'express' 應用,然後配置 nginx 作為運作在 pm2 下的 node 應用的反向代理。

前提:

ubuntu 16.04 - 64bit

root 權限

<a target="_blank"></a>

在這篇指南中,我們會從零開始我們的實驗。首先,我們需要在伺服器上安裝 node.js。我會使用 nodejs lts 6.x 版本,它能從 nodesource 倉庫中安裝。

從 ubuntu 倉庫安裝 <code>python-software-properties</code> 軟體包并添加 “nodesource” nodejs 倉庫。

<code>sudo apt-get install -y python-software-properties</code>

<code>curl -sl https://deb.nodesource.com/setup_6.x | sudo -e bash -</code>

安裝最新版本的 nodejs lts:

<code>sudo apt-get install -y nodejs</code>

安裝完成後,檢視 node 和 npm 版本。

<code>node -v</code>

<code>npm -v</code>

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

檢查 node.js 版本

我會使用 <code>express-generator</code> 軟體包生成的簡單 web 應用架構進行示例安裝。<code>express-generator</code> 可以使用<code>npm</code> 指令安裝。

用 <code>npm</code>安裝 <code>express-generator</code>:

<code>npm install express-generator -g</code>

<code>-g</code> : 在系統内部安裝軟體包。

我會以普通使用者運作應用程式,而不是 root 或者超級使用者。我們首先需要建立一個新的使用者。

建立一個名為 <code>yume</code> 的使用者:

<code>useradd -m -s /bin/bash yume</code>

<code>passwd yume</code>

使用 <code>su</code> 指令登入到新使用者:

<code>su - yume</code>

下一步,用 <code>express</code> 指令生成一個新的簡單 web 應用程式:

<code>express hakase-app</code>

指令會建立新項目目錄 <code>hakase-app</code>。

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

用 express-generator 生成應用架構

進入到項目目錄并安裝應用需要的所有依賴。

<code>cd hakase-app</code>

<code>npm install</code>

然後用下面的指令測試并啟動一個新的簡單應用程式:

<code>debug=myapp:* npm start</code>

預設情況下,我們的 express 應用會運作在 <code>3000</code> 端口。現在通路伺服器的 ip 位址:192.168.33.10:3000 :

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

express nodejs 運作在 3000 端口

這個簡單 web 應用架構現在以 'yume' 使用者運作在 3000 端口。

pm2 是一個 node 軟體包,可以使用 <code>npm</code> 指令安裝。(用 root 權限,如果你仍然以 yume 使用者登入,那麼運作指令 <code>exit</code> 再次成為 root 使用者):

<code>npm install pm2 -g</code>

現在我們可以為我們的 web 應用使用 pm2 了。

進入應用目錄 <code>hakase-app</code>:

<code>cd ~/hakase-app/</code>

這裡你可以看到一個名為 <code>package.json</code> 的檔案,用 <code>cat</code> 指令顯示它的内容。

<code>cat package.json</code>

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

配置 express nodejs 服務

你可以看到 <code>start</code> 行有一個 nodejs 用于啟動 express 應用的指令。我們會和 pm2 程序管理器一起使用這個指令。

像下面這樣使用 <code>pm2</code> 指令運作 express 應用:

<code>pm2 start ./bin/www</code>

現在你可以看到像下面這樣的結果:

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

使用 pm2 運作 nodejs app

我們的 express 應用正在 <code>pm2</code> 中運作,名稱為 <code>www</code>,id 為 <code>0</code>。你可以用 show 選項 <code>show nodeid|name</code>擷取更多 pm2 下運作的應用的資訊。

<code>pm2 show www</code>

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

pm2 服務狀态

如果你想看我們應用的日志,你可以使用 logs 選項。它包括通路和錯誤日志,你還可以看到應用程式的 http 狀态。

<code>pm2 logs www</code>

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

pm2 服務日志

你可以看到我們的程式正在運作。現在,讓我們來讓它開機自啟動。

<code>pm2 startup systemd</code>

<code>systemd</code>: ubuntu 16 使用的是 systemd。

你會看到要用 root 使用者運作指令的資訊。使用 <code>exit</code> 指令回到 root 使用者然後運作指令。

<code>sudo env path=$path:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume</code>

它會為啟動應用程式生成 systemd 配置檔案。當你重新開機伺服器的時候,應用程式就會自動運作。

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

pm2 添加服務到開機自啟動

在這篇指南中,我們會使用 nginx 作為 node 應用的反向代理。ubuntu 倉庫中有 nginx,用 <code>apt</code> 指令安裝它:

<code>sudo apt-get install -y nginx</code>

下一步,進入到 <code>sites-available</code> 目錄并建立新的虛拟主機配置檔案。

<code>cd /etc/nginx/sites-available/</code>

<code>vim hakase-app</code>

粘貼下面的配置:

<code>upstream hakase-app {</code>

<code># nodejs app upstream</code>

<code>server 127.0.0.1:3000;</code>

<code>keepalive 64;</code>

<code>}</code>

<code></code>

<code># server on port 80</code>

<code>server {</code>

<code>listen 80;</code>

<code>server_name hakase-node.co;</code>

<code>root /home/yume/hakase-app;</code>

<code>location / {</code>

<code># proxy_pass configuration</code>

<code>proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;</code>

<code>proxy_set_header host $http_host;</code>

<code>proxy_set_header x-nginx-proxy true;</code>

<code>proxy_http_version 1.1;</code>

<code>proxy_set_header upgrade $http_upgrade;</code>

<code>proxy_set_header connection "upgrade";</code>

<code>proxy_max_temp_file_size 0;</code>

<code>proxy_pass http://hakase-app/;</code>

<code>proxy_redirect off;</code>

<code>proxy_read_timeout 240s;</code>

儲存檔案并退出 vim。

在配置中:

node 應用使用域名 <code>hakase-node.co</code> 運作。

所有來自 nginx 的流量都會被轉發到運作在 <code>3000</code> 端口的 node app。

測試 nginx 配置確定沒有錯誤。

<code>nginx -t</code>

啟用 nginx 并使其開機自啟動。

<code>systemctl start nginx</code>

<code>systemctl enable nginx</code>

你可以看到 express 應用正在 nginx web 伺服器中運作。

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

nodejs app 在 pm2 和 nginx 中運作

下一步,重新開機你的伺服器,確定你的 node app 能開機自啟動:

<code>pm2 save</code>

<code>sudo reboot</code>

如果你再次登入到了你的伺服器,檢查 node app 程序。以 <code>yume</code> 使用者運作下面的指令。

<code>pm2 status www</code>

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

nodejs 在 pm2 下開機自啟動

node 應用在 pm2 中運作并使用 nginx 作為反向代理。

原文釋出時間為:2017-05-09

本文來自雲栖社群合作夥伴“linux中國”