2016-10-19 1 views
1

NodeJSでHTTPSサーバを実行しているAWS上に1つのEC2インスタンスがあります。 私は/etc/rc.localからNodeJSサーバを起動しているので、起動するたびに自動的に起動します。EC2のNodeJSからのログを見る

  1. sudo path/to/node myScript.jsを使用せずに、ポート443でリスニングHTTPSサーバを起動するには良い方法があります:

    私は2つの質問がありますか?このプロセスをrootとして実行すると、どのようなリスクがありますか?

  2. ログはどこに表示されますか?シェルからスクリプトを実行すると、プロセスのログが表示されますが、今度はrc.localから実行されると、サーバーの出力にどのようにアクセスできますか?

ありがとう!

答えて

3

sudoを使ってアプリケーションを正しく起動するのは良い方法ではありません。ルート資格情報を使用してパブリックアクセス可能なサービスを実行しないでください。アプリケーションに欠陥があり、誰かがこれを見つけた場合、マシン内のより多くのサービスにアクセスする危険性があります。

あなたのアプリケーションは非特権ポート(5000など)から起動し、nginxまたはapacheをリバースプロキシとして使用し、トラフィックをポート5000上で実行されているアプリケーションに内部的に転送する必要があります。同様に:http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup。オンラインで検索すると、httpsでnginxを実行する方法のチュートリアルや、httpからhttpsへのすべてのトラフィックを転送する方法についてのチュートリアルを見つけることができます。あなたのアプリケーションでは、SSL証明書などを認識してはいけません.p pm2モジュールはプロジェクト内にローカルにインストールする必要があり、package.jsonを利用する必要があります。ここでは、ローカルのpm2モジュールを使用して本番環境でアプリケーションを起動するタスクを定義できます。メリットは、pm2モジュールをグローバルにインストールする必要がなく、権限とスーパーユーザーで再び混乱させないということです。

ログがrc.localスクリプトで発生するまで、どこかに保存されているとは思われません。あなたはそこにプロセスをどのように産んだのですか?しかし、

node path/to/node myScript.js 2> /var/log/my-app.rc.local.log  # send stderr from rc.local to a log file` 

アプリケーションでロガーを使用しないでください。そのようなことは、ファイルに標準出力をリダイレクトする必要がありますか?私は1つを選ぶことをお勧めします(ブンヤン、ウィンストンなど多くのものがあります)、あなたのconsole.logsのすべてをロガーに置き換えてください。次に、ログを保存するアプリケーションで明示的に定義することができます。異なるログレベルやその他の機能を一般的に持つことができます。

2

ここで直接的な回答ではなく、ここで少し経験を積んでいます。

ノードッカー設定(現在は、;)で、AWSのプロダクションで重い使用のnodejsアプリを使用しています)。

ノードアプリケーションを実行する専用のユーザーがいます。ルートでノードプロセスを開始すると、ルートアクセス権があり、それは安全ではありません。あなたのEC2インスタンスのコアの数と一致する労働者の数を

は、プロセス・マネージャーとして、それが失敗したノードのプロセスを再起動することができ、我々は pm2を使用するアプリケーションを実行するには(そして、それは意志)、およびスケール。また、 ./path/to/node ./node_modules/.bin/pm2 logsを使用しているすべての労働者のログにアクセスでき、希望するものに送信することができます(ELKからヒップハットへ)。

My2cents。

関連する問題