8

私はノードのバージョン.0.6.5のnpmパッケージexpressバージョン2.5.2を使用しています。私はDebian 4.4.5でbashバージョン4.1.5を実行しているようです。node.jsをプロダクションモードでsudo経由で実行するにはどうしたらいいですか?

サーバーを運用モードで実行しようとしていますが、まだ開発モードで実行されています。

私はbashシェルで次のコマンドを実行します。

$ export NODE_ENV=production 
$ echo $NODE_ENV 
production 
$ sudo echo $NODE_ENV 
production 
$ sudo node bootstrap.js 

私はbootstrap.js内でこのコードを持っている:

development 

var bootstrap_app = module.exports = express.createServer(); 
//... 
console.log(bootstrap_app.settings.env); 

、ここでは、私は標準に印刷見るものです

私の使用方法やシステムに問題がありますか?

編集: ThiefMasterは、この問題が実行中のノードからrootであることを正しく認識してくれてくれてありがとうございます。 ThiefMasterは、iptablesを使用してポート80から特権のないポートに転送することを提案しましたが、私のシステムではエラーが表示されます。この議論をsuperuser.comまたはserverfault.comに移動する(続くリンク)

+2

セキュリティ上の理由から、sudoを使用するとほとんどの環境変数は設定解除されます。したがって、sudoersファイルを変更せずにその環境変数をノードに渡すことはできません。しかし、とにかくrootとしてノードを実行すべきではありません。ポート80に必要なだけの場合は、特権のないポートでノードを実行し、iptablesを設定してポート80をそのポートにマップするように設定します。 – ThiefMaster

+0

提案をありがとう! ポート80以外のアプリケーションを実行し、環境を正しくプロダクションとして識別しました。 これを回答として投稿してください - 私はそれを受け入れます。 もう一度おねがいします! – Aaron

+0

私はちょうどiptables(iptables -t -nat L)のインストールと使用を試み、 "iptables v1.4.8:iptablesテーブル' nat 'を初期化できません:許可が拒否されました(rootでなければなりません) おそらくiptablesかあなたのカーネルアップグレードする必要があります。" Debian 4.4はむしろ古いバージョンですが、/ proc/versionには" Linux version 3.1.9-vs2.3.2.5 "と書かれています – Aaron

答えて

9

ほとんどの環境変数はセキュリティ上の理由から設定されていません。したがって、sudoersファイルを変更せずにその環境変数をノードに渡すことはできません。

ただし、rootとしてノードを実行しないでください。だから、ここで良い回避策があります:
あなただけのiptablesはそのポートにポート80をマッピングするために転送する非特権ポートと設定にノードを実行し、ポート80のためにそれが必要な場合:あなたの公開と1.2.3.4を置き換え

iptables -A PREROUTING -d 1.2.3.4/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 2.3.4.5:1234 

IP、2.3.4.5で実行され、IPノードは実行されます(パブリック1または127.0.0.1)。これはあなたのシステム上の任意のユーザーを許可すること

setcap 'cap_net_bind_service=+ep' /usr/bin/node 

注:あなたもrootとして次のコマンドを使用してnode実行CAP_NET_BIND_SERVICE権限を付与することができ、能力をサポートしている、十分に新しいカーネルで


ノードを使って特権ポートを開く!

+0

iptablesを使って最初の解決策を試しました。それでも私のsudoer特権を使用しても問題がありません。エラーメッセージ全体を私の質問の編集として投稿しました。(それが許す書式設定を利用するために) – Aaron

+2

httpでそれについて尋ねる方がいいでしょう://superuser.comまたはhttp://serverfault.com。 – ThiefMaster

+0

'authbind'を使わないのはなぜですか? – configurator

2
sudo NODE_ENV=production /usr/local/bin/node /usr/local/apps/test/app.js 
関連する問題