Node.jsをデプロイする最良の方法は何ですか?
私にはDreamhost VPSがあります(これは VM と呼ばれます)。Node.jsをインストールしてプロキシを設定することができました。これは、ノードを開いて開始したSSH接続を保持している限り、うまく機能します。
2016 answer:ほとんどすべてのLinuxディストリビューションにはsystemdが付属しています。つまり、forever、monit、PM2などはありません。長く必要-OSはこれらのタスクを既に処理しています。
myapp.service
ファイルを作成します(明らかに 'myapp'をアプリの名前に置き換えます):
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
Unixを初めて使用する場合は注意してください:/var/www/myapp/app.js
は最初の行に#!/usr/bin/env node
が必要です。
サービスファイルを/etc/systemd/system
フォルダーにコピーします。
systemctl daemon-reload
を使用して、systemdに新しいサービスについて知らせます。
systemctl start myapp
で開始します。
systemctl enable myapp
で起動時に実行できるようにします。
journalctl -u myapp
でログを見る
これはLinuxでのノードアプリのデプロイ方法、2018年版から取得されます。これにはAWS/DigitalOceanを生成するコマンドも含まれますLinux /ノードサーバー(.service
ファイルを含む)を構築するための/ Azure CloudConfig。
Forever を使用します。 Node.jsプログラムを個別のプロセスで実行し、いずれかが停止した場合は再起動します。
使用法:
forever start example.js
はプロセスを開始します。forever list
は、永久に開始されたすべてのプロセスのリストを表示しますforever stop example.js
でプロセスを停止するか、forever stop 0
でインデックス0のプロセスを停止します(forever list
で表示)。私はここに私のデプロイ方法について書きました: node.jsアプリのデプロイ
要するに:
pm2 はトリックを行います。
機能は、監視、ホットコードリロード、組み込みのロードバランサー、自動起動スクリプト、および復活/ダンププロセスです。
monit
、forever
、upstart
、またはsystemd
を使用してサーバーを起動できます。
Nginxの代わりにVarnishまたはHAProxyを使用できます(Nginxはwebsocketで動作しないことが知られています)。
迅速で汚れたソリューションとして、Nohup node your_app.js &
を使用してアプリがサーバーで終了するのを防ぐことができますが、forever
、monit
およびその他の提案されたソリューションの方が優れています。
現在、アプリに使用されているUpstartスクリプトを作成しました。
description "YOUR APP NAME"
author "Capy - http://ecapy.com"
env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"
######################################################
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 99 5
pre-start script
mkdir -p $PID_PATH
mkdir -p /var/log/node
end script
script
export NODE_ENV=$SERVER_ENV
exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script
post-start script
echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script
#########の前にすべてをカスタマイズし、/ etc/init/your-service.confにファイルを作成して貼り付けます。
その後、次のことができます。
start your-service
stop your-service
restart your-service
status your-service
Node.jsをデプロイするための非常に包括的なガイドをサンプルファイルとともに作成しました。
ルートアクセスがある場合は、バックグラウンドで安全に動作するようにデーモンを設定することをお勧めします。 Debian および bunt の場合は、ブログ投稿Node.jsをサービスとして実行Ubunt。
Systemdでこの問題を解決するための長い記事を次に示します。 http://savanne.be/articles/deploying-node-js-with-systemd/
留意すべきいくつかのこと:
これらはすべてsystemdで簡単に実行できます。
Foreverはトリックを行います。
@Kevin:プロセスを正常に終了できるはずです。私はドキュメントを少し再確認します。エラーを再現できる場合は、GitHubに問題として投稿することをお勧めします。
Box9が言ったように、 Forever は量産コードに適しています。ただし、クライアントから SSH 接続が閉じられた場合でも、プロセスを続行することもできます。
本番環境では必ずしも良い考えではありませんが、これは長いデバッグセッションの途中、または長いプロセスのコンソール出力に従う場合、またはSSH接続を切断するのに便利であるが、サーバーでターミナルを維持する場合に非常に便利です後で再接続する(自宅でNode.jsアプリケーションを起動し、作業中に後でコンソールに再接続して、状況を確認するなど)。
サーバーが* nixボックスであると仮定すると、シェルから screen コマンドを使用して、クライアントSSHが閉じられていてもプロセスを実行し続けることができます。まだインストールされていない場合は、Webから画面をダウンロード/インストールできます(Linuxの場合はディストリビューションのパッケージを探し、OS-Xの場合は MacPorts を使用します)。
次のように機能します。
必要に応じて、このように複数のスクリーンセッションを同時に実行でき、任意のクライアントから任意のスクリーンセッションに接続できます。すべてのオプションについては、オンラインでドキュメントをお読みください。
Capistrano、Upstart、およびNginxでNode.jsアプリを展開するための優れた詳細なガイド
https://paastor.com は、VPSまたはその他のサーバーに展開する比較的新しいサービスです。コードをプッシュするCLIがあります。 Paastorには無料ティアがあります。少なくともこの投稿の時点ではそうでした。
node-deploy-server を試してください。これは、プライベートサーバーにアプリケーションを展開するための複雑なツールセットです。 Node.jsで記述され、インストールにnpmを使用します。
Foreverは、アプリの実行を維持するための適切なオプションです(そして、npmはNiceモジュールとしてインストール可能です)。
しかし、より深刻な「展開」(展開、再起動、コマンドの実行などのリモート管理など)には、ノード拡張でcapistranoを使用します。
あなたの場合、 pstart デーモンを使用できます。完全な展開ソリューションについては、 capistrano をお勧めします。 2つの有用なガイドは、Node.js envのセットアップ方法およびcapistrano + upstartを介して展開する方法。