2012-02-13 12 views
8

私はcentos5上のnginxの後ろにgunicornを使ってdjangoアプリケーションを配備しています。rootでないユーザーとしてgunicornを実行するにはどうすればいいですか?これに対処するような文書はありません。gunicorn/pythonアプリケーションサーバーを非rootユーザーとして実行するにはどうすればいいですか?

raise HaltServer(reason, self.WORKER_BOOT_ERROR) 
    gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3> 

回答:

sudo -u nobody gunicorn_django --workers=4 

それはで失敗します。これはおそらく

私は次のように動作しないことを追加する必要があります...だけでなくnginxの後ろに実行されている任意のPythonのアプリケーション・サーバに適用されます:

私の間違い。

sudo -u nobody gunicorn_django --workers=4 production_settings.py 
+0

本当にコマンドですか? gunicorn_djangoコマンドの最初に '-u nobody'を追加できますか?これは私にとってはうまくいかないようです。 – Mark

+0

@マーク彼らは 'sudo'コマンドの最後に' -u nobody'を追加します。 'gunicorn_django'コマンドの先頭ではありません。 'sudo -u'はroot以外のユーザを選択して、以下のコマンドを実行します。 – BHSPitMonkey

答えて

2

私はsupervisordを使用することをお勧めします:私はそうでgunicorn呼び出されているはずのカスタムsettings.pyファイルを持っていました。 Supervisorは、ブート時にあなたが指示したユーザーアカウントでアプリを起動します。ここで

は、私が/etc/supervisor/conf.d/下に置く私のmy_app.confです:

[program:my_app] 
command=/home/some_user/my_app/run_gunicorn 
directory=/home/some_user/my_app 
user=some_user     
redirect_stderr=true    
stdout_logfile=/home/some_user/supervisord_stdout.txt 
stdout_logfile_maxbytes=20MB 
stdout_logfile_backups=10 

マイrun_gunicornスクリプトは次のようになります。

#!/bin/bash 
source /home/some_user/virtualenvs/my_app_virtualenv/bin/activate 
exec /home/some_user/virtualenvs/my_app_virtualenv/bin/gunicorn -c gunicorn.conf wsgi:application 

私はMY_APPに直接gunicorn参照できます.conf。しかし、私はこの方法で私が活動化することができるので、私はしません。私はDJANGO_SECRETを自分の起動スクリプトの末尾にenv varとして入れました。また、GitやMercurialに属していないAPIキーや他の機密情報を使っても良いです。

マイgunicorn.confは次のとおりです。

backlog = 2048 
bind = "127.0.0.1:9000" 
pidfile = "/home/some_user/gunicorn-my_app.pid" 
daemon = False 
debug = False 
workers = 3 
logfile = "/home/some_user/gunicorn-my_app.log" 
loglevel = "info" 
timeout = 90 

実は私はそこが改善される可能性が確信しているが、彼らはルートされずに私のアプリを実行し得ます。 Supervisordは、アプリケーションサーバーが動作し続けることを保証します。私は次に、proxy_pass経由で私のアプリケーションサーバーでnginxを指しています(必要であれば共有することもできます)。

EDIT:ファイル名を明確にする

関連する問題