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アプリケーションを本番環境で簡単にホストできるようになったことを願っています。