2012-02-13 78 views
8

我在centos 5上部署了一個在nginx後面使用gunicorn的django應用程序。我如何以非root用戶身份運行gunicorn?這些文件似乎都沒有解決這個問題。這可能適用於運行Nginx的背後,以及任何的Python應用程序服務器...如何以非root用戶的身份運行gunicorn/python應用程序服務器?

我要補充一點,下面不工作:

sudo -u nobody gunicorn_django --workers=4 

它失敗:

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

回答:

我的錯誤。我有一個自定義的settings.py文件,所以應該引用gunicorn:

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

你確定這是命令嗎?你確定你可以在gunicorn_django命令的開頭添加'-u nobody'嗎?這似乎不適用於我。 – Mark 2012-07-04 11:10:12

+0

@Mark他們在'sudo'命令的末尾添加'-u nobody',而不是'gunicorn_django'命令的開頭。 'sudo -u'讓你選擇一個非root用戶來運行下面的命令。 – BHSPitMonkey 2014-04-04 07:01:21

回答

2

我推薦使用supervisord。 Supervisor在您啓動時告訴您的用戶帳戶下啓動您的應用程序。

這裏是我的my_app.conf我下/etc/supervisor/conf.d/地方:

[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放在激活腳本的尾部。使用API​​密鑰和其他不屬於Git或Mercurial的敏感內容來做到這一點也不錯。

我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指向我的應用服務器(如果需要,也可以共享)。

編輯:說明文件名

相關問題