チームのVPSでNode.js開発環境をセットアップする方法
序章
このチュートリアルでは、Node.js開発環境をセットアップします。これにより、Node.jsアプリケーションの開発プロセスに迅速に新しいチームメンバーを含めることができます。 この方法は、開発者がアプリケーションの複数のバージョンを同時に作成する場合にも適用できます。
この方法は、Node.jsがポートではなくUnixソケットを介してNginxと対話することに基づいています。 アプリケーションの開発バージョンがlogin.dev.nodeapp.com
にあると仮定しましょう。 さらに、/tmp/login.dev.nodeapp.com.sock
のように、すべての開発者のソケットを/tmp
ディレクトリに保持します。
要件
NginxとNode.jsをインストールする必要があります。 さらに、VPSにリンクされたドメイン(たとえば、nodeapp.com
)がすでにあると想定します。 注:ドメインのワイルドカードCNAMEレコードも設定する必要があります。 DigitalOceanには、これらのトピックに関するよく書かれたチュートリアルがすでにあります。
Nginxのセットアップ
以下を含む新しいNginx構成ファイル/etc/nginx/sites-available/dev.nodeapp.com
を作成する必要があります。
server {
listen 80;
server_name ~^(?<login>[a-z]+)\.dev\.nodeapp\.com$;
location / {
proxy_pass http://unix:/tmp/$login.dev.nodeapp.com.sock:$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
この構成をsites-enabled
フォルダーにリンクし、Nginxを再起動します。
ln -nfs /etc/nginx/sites-available/dev.nodeapp.com /etc/nginx/sites-enabled/dev.nodeapp.com
/etc/init.d/nginx restart
これで、Nginxはユーザーリクエストを受け入れ、URLに応じて開発者のアプリコピーに誘導する準備が整いました。 例えば:
http://ivan.dev.nodeapp.com -> /tmp/ivan.dev.nodeapp.com.sock
http://anna.dev.nodeapp.com -> /tmp/anna.dev.nodeapp.com.sock
Node.jsアプリの変更
Node.js の最小限のWebサーバーの例を使用しますが、同じ変更を任意のNode.jsサーバー(Expressなど)に適用できます。
重要なのは、デフォルトのポートリスニング動作をソケットリスニングに変更する必要があるということです。
var fs = require('fs');
var http = require('http');
var mask = process.umask(0);
var socket = '/tmp/' + process.env.USER + '.dev.nodeapp.com.sock';
if (fs.existsSync(socket)) {
fs.unlinkSync(socket);
}
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(socket, function() {
if (mask) {
process.umask(mask);
mask = null;
}
});
console.log('Server running at ' + socket);
これで、アプリケーションnode app.js
を実行し、http://yourlogin.dev.nodeapp.com
でアクセスできます。
注: Node.jsがソケットのリッスンを開始すると、指定されたファイルが作成されます。 ただし、ソケットファイルがすでに存在する場合、Node.jsはリッスンを開始できません。 したがって、前回の実行からソケットを削除する必要があります。
もう1つは、すべてのユーザーがフルアクセスできるソケットを作成して、Nginxがそれを使用できるようにする必要があるということです。 開発には問題ありませんが、本番環境には適さない場合があります。
おめでとうございます! VPSでユーザーを作成するために新しい開発者を紹介するために必要なのはこれだけです。