GNU/Linux >> Linux の 問題 >  >> Debian

Node.jsをDebian10にインストールし、Nginxをフロントエンドプロキシサーバーとして構成する方法

Node.jsは、動的でレスポンシブなサーバー側コンテンツを提供するために使用できる無料のオープンソースJavaScriptプラットフォームです。 ChromeのV8JavaScriptエンジンに基づいて構築されており、ウェブブラウザの外部でJavaScriptコードを実行できます。 Linux、FreeBSD、Windows、macOSなどのいくつかのオペレーティングシステムで実行できます。 Node.jsは、ApacheやNginxなどの他のWebサーバーでも機能します。

このチュートリアルでは、バックエンドリクエストを処理するようにNode.jsをインストールして設定する方法と、Debian10でフロントエンドリクエストを処理するようにNginxを設定する方法を学習します。

前提条件
  • Debian10を実行しているサーバー。
  • ルートパスワードはサーバーで構成されています。
はじめに

まず、システムを最新バージョンに更新することをお勧めします。次のコマンドで実行できます:

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

サーバーが更新されたら、サーバーを再起動して変更を適用します。

Node.jsをインストール

デフォルトでは、最新バージョンのNode.jsはDebian10のデフォルトリポジトリでは利用できません。そのため、スクリプトからインストールする必要があります。

まず、次のコマンドを使用して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('/', 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アプリケーションを管理するためのプロセスマネージャーです。 YOuは、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アプリケーションはローカルホストで実行され、リッスンしています。次に、すべてのユーザーがインターネット経由でアプリケーションにアクセスできるように、NginxをNode.jsアプリケーションのフロントエンドプロキシサーバーとして構成する必要があります。

まず、次のコマンドを使用してNginxWebサーバーをインストールします。

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ブラウザーを開き、URLhttp://node.myserver.tldを入力します。次の画面にNode.jsアプリケーションが表示されます。

結論

上記の記事では、Debian 10でNode.jsアプリケーションをセットアップする方法を学びました。また、Node.jsアプリケーションをデーモンとして実行し、アプリケーションを提供するためのリバースプロキシとしてNginxを構成する方法も学びました。 Node.jsアプリケーションを本番環境で簡単にホストできるようになったことを願っています。


Debian
  1. Debian10にVNCサーバーをインストールして設定する方法

  2. Debian11にdockerをインストールして設定する方法

  3. Debian11にHAProxyロードバランサをインストールして設定する方法

  1. Debian10にOpenVPNサーバーをインストールして設定する方法

  2. Debian11にNode.jsとnpmをインストールする方法

  3. Debian11にSquidプロキシをインストールして設定する方法

  1. Debian9にVNCをインストールして設定する方法

  2. Debian9にRedisをインストールして設定する方法

  3. Debian11にMariadb10をインストールして設定する方法