如何在Debian 10上安裝Node.js並將Nginx配置為前端代理服務器

如何在Debian 10上安裝Node.js並將Nginx配置為前端代理服務器

Node.js是一個免費的開放源代碼JavaScript平台,可用於交付動態且響應迅速的服務器端內容。它基於Chrome的V8 JavaScript引擎構建,可以在網絡瀏覽器之外執行JavaScript代碼。它可以在多種操作系統上運行,包括Linux,FreeBSD,Windows和macOS。 Node.js還可以與其他Web服務器一起使用,例如Apache和Nginx。

在本教程中,您將學習如何安裝和配置Node.js來處理後端請求,以及如何配置Nginx來處理Debian 10前端請求。

前提條件

  • 運行Debian 10的服務器。
  • 已經在服務器上設置了root密碼。

引言

首先,我們建議您將系統更新到最新版本。您可以使用以下命令執行此操作:

apt-get update -y apt-get upgrade -y

更新服務器後,請重新啟動服務器以應用更改。

安裝Node.js

默認情況下,默認的Debian 10存儲庫中不提供最新版本的Node.js。因此,必須從腳本安裝它。

首先,使用以下命令安裝curl。

apt-get install curl -y

接下來,使用以下命令下載並安裝Node.js安裝腳本。

curl -sL https://deb.nodesource.com/setup_12.x | bash -

安裝完成後,可以使用以下命令安裝Node.js。

apt-get install nodejs -y

成功安裝後,可以使用以下命令檢查Node.js版本:

nodejs --version

以下輸出顯示了Node.js版本。

v12.16.1

您還可以通過運行以下命令來檢查NPM版本:

npm --version

以下輸出顯示了NPM版本。

6.13.4

創建一個Node.js應用程序

首先,您需要為您的應用程序創建目錄。您可以通過運行以下命令來創建它:

mkdir nodeapp

接下來,將目錄更改為nodeapp並使用以下命令安裝express。

cd nodeapp npm install express

接下來,使用nano編輯器在Express中創建示例Node.js應用程序。

nano app.js

添加以下內容:

var express = require('express');
var app = express();
app.get("https://www.howtoforge.com/", function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

完成後,保存並關閉文件。

然後,使用以下命令運行該應用程序:

node app.js

接下來,打開另一個終端,並使用以下命令檢查應用程序。

netstat -antup | grep 8000

您可以看到Node.js應用程序正在偵聽端口8000。

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

您還可以使用curl命令檢查應用程序,如下所示。

curl http://127.0.0.1:8000

如果一切順利,您應該獲得以下輸出:

Nginx as Frontend Server for Node.js!

PM2安裝和配置

PM2是用於管理Node.js應用程序的流程管理器。您可以使用PM2在啟動時輕鬆啟動,停止和啟用Node.js應用程序。

首先,如下所示,使用NPM安裝最新版本的PM2。

npm install pm2 -g

安裝完成後,使用以下命令將目錄更改為nodeapp和應用程序:

cd nodeapp pm2 start app.js

應用程序啟動時,您將看到以下輸出:

                        -------------

__/\\\\\\____/\\____________/\\____/\\\\_____
 _/\/////////\_/\\\________/\\\__/\///////\___
  _/\_______/\_/\//\____/\//\_///______//\__
   _/\\\\\\/__/\\///\/\/_/\___________/\/___
    _/\/////////____/\__///\/___/\________/\//_____
     _/\_____________/\____///_____/\_____/\//________
      _/\_____________/\_____________/\___/\/___________
       _/\_____________/\_____________/\__/\\\\\\\_
        _///______________///______________///__///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

在上面的輸出中,您可以看到非常有用的信息,例如應用程序PID,正常運行時間,狀態,CPU和內存使用情況。

接下來,運行並執行以下命令來創建和配置Node.js應用程序的啟動腳本,以便Node.js應用程序在啟動時自動啟動。

pm2 startup

您將看到以下輸出:

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

接下來,使用以下命令啟動PM2服務:

systemctl start pm2-root

接下來,使用以下命令檢查PM2服務的狀態:

systemctl status pm2-root

您將看到以下輸出:

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

將Nginx配置為Node.js的反向代理

此時,Node.js應用程序正在運行並在localhost上偵聽。接下來,您需要將Nginx配置為Node.js應用程序的前端代理服務器,以便所有用戶都可以通過Internet訪問該應用程序。

首先,使用以下命令安裝Nginx Web服務器。

apt-get install nginx -y

安裝後,為您的Node.js應用程序創建一個Nginx虛擬主機配置文件。

nano /etc/nginx/sites-enabled/myapp.conf

添加以下內容:

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
     }
}

完成後,保存並關閉文件。接下來,重新啟動Nginx服務器以應用更改。

systemctl restart nginx

您可以使用以下命令檢查Nginx服務的狀態:

systemctl status nginx

您將看到以下輸出:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

完成後,您可以繼續下一步。

訪問Node.js應用程序

此時,Nginx已配置為服務Node.js應用程序。

接下來,打開Web瀏覽器並輸入URL http:///node.myserver.tld。 Node.js應用程序顯示在下一個屏幕上。

結論

在以上文章中,您學習了如何在Debian 10上配置Node.js應用程序。您還學習了如何將Node.js應用程序作為守護程序運行,以及如何將Nginx配置為反向代理以為該應用程序提供服務。現在可以輕鬆地在生產環境中託管Node.js應用程序。

Source

Sidebar