序章

Node.jsは、サーバー側およびネットワーキングアプリケーションを簡単に構築するためのオープンソースのJavascriptランタイム環境です。 プラットフォームはLinux、OS X、FreeBSD、およびWindowsで動作し、そのアプリケーションはJavaScriptで記述されています。 Node.jsアプリケーションはコマンドラインで実行できますが、サービスとして実行する方法を説明します。これにより、再起動または失敗時に自動的に再起動し、実稼働環境で使用できるようになります。

このチュートリアルでは、2台のUbuntu14.04サーバーで構成される本番環境に対応したNode.js環境のセットアップについて説明します。 一方のサーバーはPM2によって管理されるNode.jsアプリケーションを実行し、もう一方のサーバーはユーザーにアプリケーションサーバーへのNginxリバースプロキシを介したアプリケーションへのアクセスを提供します。

このチュートリアルのCentOSバージョンはここにあります。

前提条件

このガイドでは、(同じデータセンター内の)プライベートネットワークを備えた2台のUbuntu14.04サーバーを使用します。 それらを次の名前で参照します。

  • app :Node.jsランタイム、Node.jsアプリケーション、およびPM2をインストールするサーバー
  • web :アプリケーションのリバースプロキシとして機能するNginxWebサーバーをインストールするサーバー。 ユーザーは、このサーバーのパブリックIPアドレスにアクセスして、Node.jsアプリケーションにアクセスします。

このチュートリアルでは単一のサーバーを使用することもできますが、途中でいくつかの変更を加える必要があります。 ローカルホストのIPアドレスを使用するだけです。 127.0.0.1appサーバーのプライベートIPアドレスが使用されている場合。

このチュートリアルに従った後のセットアップの図は次のとおりです。

このガイドを開始する前に、root以外の通常のユーザーが sudo 両方のサーバーで構成された特権-これは、サーバーにログインする必要があるユーザーです。 Ubuntu 14.04 初期サーバーセットアップガイドの手順1〜4に従って、通常のユーザーアカウントを構成する方法を学習できます。

パブリックIPアドレスではなくドメイン名を介してwebサーバーにアクセスできるようにする場合は、ドメイン名を購入してから、次のチュートリアルに従ってください。

Node.jsランタイムをappサーバーにインストールすることから始めましょう。

Node.jsをインストールします

Node.jsの最新のLTSリリースをappサーバーにインストールします。

app サーバーで、次のコマンドを使用してapt-getパッケージリストを更新しましょう。

  1. sudo apt-get update

次に、 apt-get インストールするには git パッケージ、 npm に依存します:

  1. sudo apt-get install git

Node.jsダウンロードページに移動し、 Linuxバイナリ(.tar.xz)ダウンロードリンクを見つけます。 それを右クリックし、そのリンクアドレスをクリップボードにコピーします。 この記事の執筆時点で、最新のLTSリリースは4.2.3です。 Node.jsの最新の安定したリリースをインストールしたい場合は、適切なページに移動し、そのリンクをコピーしてください。

ホームディレクトリに移動し、Node.jsソースをダウンロードします。 wget. 強調表示された部分の代わりにダウンロードリンクを貼り付けます。

  1. cd ~
  2. wget https://nodejs.org/dist/v4.2.3/node-v4.2.3-linux-x64.tar.gz

次に、ダウンロードしたtarアーカイブを抽出します。 node これらのコマンドを含むディレクトリ:

  1. mkdir node
  2. tar xvf node-v*.tar.?z --strip-components=1 -C ./node

ダウンロードしたNode.jsアーカイブを削除する場合は、不要になったため、ホームディレクトリに移動して使用してください。 rm 指図:

  1. cd ~
  2. rm -rf node-v*

次に、グローバルを構成します prefixnpm、 どこ npm インストールされたノードパッケージへのシンボリックリンクを、デフォルトパスのどこかに作成します。 に設定します /usr/local このコマンドで:

  1. mkdir node/etc
  2. echo 'prefix=/usr/local' > node/etc/npmrc

これで、移動する準備ができました nodenpm インストール場所へのバイナリ。 に移動します /opt/node このコマンドで:

  1. sudo mv node /opt/

この時点で、あなたは作りたいかもしれません root ファイルの所有者:

  1. sudo chown -R root: /opt/node

最後に、のシンボリックリンクを作成しましょう nodenpm デフォルトパスのバイナリ。 リンクを入れます /usr/local/bin これらのコマンドで:

  1. sudo ln -s /opt/node/bin/node /usr/local/bin/node
  2. sudo ln -s /opt/node/bin/npm /usr/local/bin/npm

次のコマンドでバージョンを確認して、ノードがインストールされていることを確認します。

  1. node -v

これでNode.jsランタイムがインストールされ、アプリケーションを実行する準備が整いました。 Node.jsアプリケーションを書いてみましょう。

Node.jsアプリケーションを作成する

次に、HTTPリクエストに「HelloWorld」を返すだけの HelloWorldアプリケーションを作成します。 これは、Node.jsをセットアップするのに役立つサンプルアプリケーションであり、独自のアプリケーションに置き換えることができます。適切なIPアドレスとポートでリッスンするようにアプリケーションを変更してください。

Node.jsアプリケーションでリバースプロキシサーバーwebからのリクエストを処理する必要があるため、サーバー間通信にappサーバーのプライベートネットワークインターフェイスを利用します。 appサーバーのプライベートネットワークアドレスを検索します。

サーバーとしてDigitalOceanドロップレットを使用している場合は、メタデータサービスを介してサーバーのプライベートIPアドレスを検索できます。 app サーバーでは、 curl 今すぐIPアドレスを取得するコマンド:

  1. curl -w "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address

Node.jsアプリケーションの構成に使用されるため、出力(プライベートIPアドレス)をコピーする必要があります。

Hello World Code

次に、編集用にNode.jsアプリケーションを作成して開きます。 このチュートリアルでは、 vi と呼ばれるサンプルアプリケーションを編集するには hello.js:

  1. cd ~
  2. vi hello.js

次のコードをファイルに挿入し、appサーバーのプライベートIPアドレスを強調表示された両方の代わりに使用してください APP_PRIVATE_IP_ADDRESS アイテム。 必要に応じて、強調表示されたポートを置き換えることもできます。 8080、両方の場所で(管理者以外のポートを使用してください。 1024以上):

hello.js
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080, 'APP_PRIVATE_IP_ADDRESS');
console.log('Server running at http://APP_PRIVATE_IP_ADDRESS:8080/');

保存して終了します。

このNode.jsアプリケーションは、指定されたIPアドレスとポートをリッスンし、「HelloWorld」を返します。 200 HTTP成功コード。 つまり、アプリケーションには、webサーバーなどの同じプライベートネットワーク上のサーバーからのみアクセスできます。

テストアプリケーション(オプション)

アプリケーションが機能するかどうかをテストする場合は、これを実行します node app サーバーでのコマンド:

  1. node hello.js

注:この方法でNode.jsアプリケーションを実行すると、を押してアプリケーションを強制終了するまで、追加のコマンドがブロックされます。 CTRL+C.

アプリケーションをテストするには、別のターミナルセッションを開き、webサーバーに接続します。 Webサーバーは同じプライベートネットワーク上にあるため、appサーバーのプライベートIPアドレスに到達できる必要があります。 curl. appサーバーのプライベートIPアドレスを必ず置き換えてください APP_PRIVATE_IP_ADDRESS、および変更した場合のポート:

  1. curl http://APP_PRIVATE_IP_ADDRESS:8080

次の出力が表示された場合、アプリケーションは正常に動作しており、適切なIPアドレスとポートでリッスンしています。

Output:
Hello World

適切な出力が表示されない場合は、Node.jsアプリケーションが実行されており、適切なIPアドレスとポートでリッスンするように構成されていることを確認してください。

app サーバーで、[まだ実行していない場合は)を押してアプリケーションを強制終了してください。 CTRL+C.

PM2をインストールします

次に、Node.jsアプリケーションのプロセスマネージャーであるPM2をインストールします。 PM2は、アプリケーションを管理およびデーモン化する(サービスとして実行する)ための簡単な方法を提供します。

基本的にNode.jsとともにインストールするNodeモジュールのパッケージマネージャーであるNodePackagedModules(NPM)を使用して、appサーバーにPM2をインストールします。 次のコマンドを使用して、PM2をインストールします。

  1. sudo npm install pm2 -g

PM2でアプリケーションを管理する

PM2はシンプルで使いやすいです。 PM2のいくつかの基本的な使用法について説明します。

アプリケーションを開始します

あなたが最初にしたいことは、 pm2 start アプリケーションを実行するコマンド、 hello.js、バックグラウンドで:

  1. pm2 start hello.js

これにより、アプリケーションがPM2のプロセスリストに追加されます。このリストは、アプリケーションを起動するたびに出力されます。

Output:
┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬────────────┬──────────┐ │ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │ ├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼────────────┼──────────┤ │ hello │ 0 │ fork │ 5871 │ online │ 0 │ 0s │ 9.012 MB │ disabled │ └──────────┴────┴──────┴──────┴────────┴───────────┴────────┴────────────┴──────────┘

ご覧のとおり、PM2はアプリ名を自動的に割り当てます(ファイル名に基づいて、 .js 拡張機能)およびPM2 id。 PM2は、プロセスの PID 、その現在のステータス、メモリ使用量などの他の情報も保持します。

PM2で実行されているアプリケーションは、アプリケーションがクラッシュまたは強制終了された場合に自動的に再起動されますが、システムの起動(起動または再起動)時にアプリケーションを起動するには、追加の手順を実行する必要があります。 幸いなことに、PM2はこれを行う簡単な方法を提供します。 startup サブコマンド。

The startup サブコマンドは、サーバーの起動時にPM2とその管理対象プロセスを起動するための起動スクリプトを生成および構成します。 また、実行しているプラットフォームを指定する必要があります。 ubuntu、 私たちの場合には:

  1. pm2 startup ubuntu

結果の出力の最後の行には、実行する必要のあるコマンド(スーパーユーザー権限で実行する必要があります)が含まれます。

Output:
[PM2] You have to run this command as root [PM2] Execute the following command : [PM2] sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy"

生成されたコマンド(上記で強調表示された出力と同様)を実行して、PM2を起動時に開始するように設定します(独自の出力からのコマンドを使用します)。

  1. sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy"

その他のPM2の使用法(オプション)

PM2には、アプリケーションに関する情報を管理または検索できる多くのサブコマンドが用意されています。 実行していることに注意してください pm2 引数なしで、チュートリアルのこのセクションよりも詳細にPM2の使用法をカバーする使用例を含むヘルプページが表示されます。

このコマンドでアプリケーションを停止します(PM2を指定します) App name また id):

  1. pm2 stop example

このコマンドでアプリケーションを再起動します(PM2を指定します) App name また id):

  1. pm2 restart example

PM2によって現在管理されているアプリケーションのリストは、 list サブコマンド:

  1. pm2 list

特定のアプリケーションに関する詳細情報は、を使用して見つけることができます info サブコマンド(PM2アプリ名またはid を指定)::

  1. pm2 info example

PM2プロセスモニターは、 monit サブコマンド。 これにより、アプリケーションのステータス、CPU、およびメモリ使用量が表示されます。

  1. pm2 monit

Node.jsアプリケーションが実行され、PM2によって管理されたので、リバースプロキシを設定しましょう。

リバースプロキシサーバーを設定する

アプリケーションが実行され、プライベートIPアドレスをリッスンしているので、ユーザーがアプリケーションにアクセスする方法を設定する必要があります。 この目的のために、リバースプロキシとしてNginxWebサーバーをセットアップします。 このチュートリアルでは、Nginxサーバーを最初からセットアップします。 すでにNginxサーバーをセットアップしている場合は、 location 選択したサーバーブロックにブロックします(場所がWebサーバーの既存のコンテンツと競合しないことを確認してください)。

web サーバーで、次のコマンドを使用してapt-getパッケージリストを更新しましょう。

  1. sudo apt-get update

次に、apt-getを使用してNginxをインストールします。

  1. sudo apt-get install nginx

次に、デフォルトのサーバーブロック構成ファイルを開いて編集します。

  1. sudo vi /etc/nginx/sites-available/default

ファイル内のすべてを削除し、次の構成を挿入します。 必ず独自のドメイン名に置き換えてください server_name ディレクティブ(またはドメインが設定されていない場合はIPアドレス)、およびappサーバーのプライベートIPアドレス APP_PRIVATE_IP_ADDRESS. さらに、ポートを変更します(8080)アプリケーションが別のポートでリッスンするように設定されている場合:

/ etc / nginx / sites-available / default
server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
        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;
    }
}

これにより、ルートでリクエストに応答するようにwebサーバーが構成されます。 私たちのサーバーがで利用可能であると仮定すると example.com、アクセス http://example.com/ Webブラウザを介して、ポート上のアプリケーションサーバーのプライベートIPアドレスにリクエストを送信します 8080、Node.jsアプリケーションによって受信および応答されます。

追加できます location 同じサーバーブロックにブロックして、同じwebサーバー上の他のアプリケーションへのアクセスを提供します。 たとえば、ポートのappサーバーで別のNode.jsアプリケーションも実行している場合 8081、このロケーションブロックを追加して、経由でアクセスできるようにすることができます http://example.com/app2:

Nginx構成—追加の場所
    location /app2 {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;
        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;
    }

アプリケーションのロケーションブロックの追加が完了したら、保存して終了します。

web サーバーで、Nginxを再起動します。

  1. sudo service nginx restart

Node.jsアプリケーションが実行されていて、アプリケーションとNginxの構成が正しいと仮定すると、webサーバーのリバースプロキシを介してアプリケーションにアクセスできるはずです。 web サーバーのURL(パブリックIPアドレスまたはドメイン名)にアクセスして試してみてください。

結論

おめでとう! これで、Ubuntu14.04サーバー上のNginxリバースプロキシの背後でNode.jsアプリケーションが実行されます。 このリバースプロキシ設定は、共有したい他のアプリケーションや静的Webコンテンツへのアクセスをユーザーに提供するのに十分な柔軟性があります。 Node.jsの開発に頑張ってください!

また、Webサーバーとユーザー間の送信を暗号化する場合は、 HTTPS(TLS / SSL)サポートを設定するのに役立つチュートリアルがあります