web-dev-qa-db-ja.com

node.js + expressjsアプリケーションのNODE_ENVをUbuntuのデーモンとして設定する

これらの手順でデーモンが正常に動作するようになりました: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

ただし、これによりアプリケーションがDEVELOPMENTモードで起動されるため、ログファイルはsocket.ioデバッグログでスパムされます。

upstart-conf-fileでNODE_ENVを本番に設定しようとしましたが、成功しませんでした。

script
    export HOME="/root"
    export NODE_ENV=production

    exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
end script

うまくいきませんでした。

28
pkyeck

試してみる

exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

私の設定では、より少ないユーザーとしてsudoingしていますので、

exec Sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

また、別のユーザーから生成されるため、おそらく別の環境があります。私はここの初心者ですが、それは私のために動作します。

27
Yuval

使用できる簡単なupstartスクリプトを次に示します。 Upstartは、スクリプトセクションや組み込みの多すぎるシェル構文を使用せずに、直接行う必要のあるすべてをサポートするようになりました。これには、環境変数(env)、作業ディレクトリ(chdir)、ユーザー/グループ(setuidsetgid)、ログ処理(console log)など。ログファイルは処理され、/var/log/upstart/your_app.log

description "start and stop the example express.js/node.js server"
author "John Doe <[email protected]>"

start on filesystem and started networking
respawn
console log
chdir /opt/your_app
setuid your_app_user
setgid your_app_user
env PATH=./node_modules/.bin:./node/bin:/usr/bin
env NODE_ENV=production
exec app/server.js
18
Peter Lyons

実稼働環境でnode.jsを使用している場合は、forever.jsを使用してプログラムをデーモン化することをお勧めします https://github.com/nodejitsu/forever

Npmを使用してインストール:[Sudo] npm install forever -g

export NODE_ENV=productionを実行してforever start app.jsを実行するエラーログと標準出力ログを置く場所を指定することもできます。

15
TiansHUo

herokuでNODE_ENVを設定するには:

heroku config:set NODE_ENV="production"
4
Connor Leech

Ubuntu/Upstartは質問にリストされていますが、FreeBSD/system Shellデーモンの答えを探しているときにここに来ました。

以下の行は、「開発」環境でアプリを開始しました。

exec node path/to/start/script.js

以下の行は、「実稼働」環境でアプリを開始しました。

NODE_ENV=production exec node path/to/start/script.js

これを理解するのに時間がかかったので、共有したいと思いました。

2
jayjfadd