web-dev-qa-db-ja.com

誰が神のプロセスを所有する必要がありますか?

SinatraとGrapeAPIで記述されたRackアプリケーションで構成されるubuntuでスタックを実行しています。アプリケーションスタックには、Redis、Postgres、Nginx、Unicornが含まれます。プロセスの監視を処理するために神を使用したいと思います。

現在、デプロイはgitを介してデプロイユーザーの下で行われます。このデプロイメントユーザーは、sudoerではありません。私の質問:誰が神のプロセスを所有すべきですか?そのプロセスをsudoerまたはdeployユーザーとして実行するのが最善ですか?

デプロイユーザーとして実行すると、rbenvが読み込まれ、Unicornを起動できますが、デプロイユーザーにはSudoアクセス権がないため、init.dスクリプトを実行できません。

一方、別のユーザーとして実行している場合、デプロイユーザーは、rbenvによって提供されるbundle execにアクセスできず、Unicornプロセスがダウンした場合に起動できません。

3
Stewart

Godプロセスは、upstartスクリプトによって制御する必要があるため、Sudoユーザーとして実行します。これはbinstubsによって可能になります。ビンスタブは、gemによってインストールされる実行可能ファイルのシムです。ビンスタブはバンドラーによって提供されます。これにより、binファイルをシステムのどこからでも実行できます。これを行うには、upstartスクリプトにrbenvパスを追加する必要があります。

export PATH=/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:$PATH
eval "$(rbenv init -)"
export BUNDLE_GEMFILE=$APPLICATION_ROOT/Gemfile

この後、binstubsを直接呼び出すと、バンドルが読み込まれ、正しく実行されます。このパターンでは、upstartを使用してUnicornを実行してresqueすることができます。これにより、upstartスクリプトを呼び出すだけでスタック全体が実行可能になり、upstartとgod構成が簡単になります。 HTH。

2
Stewart