我推薦使用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指向我的應用服務器(如果需要,也可以共享)。
編輯:說明文件名
你確定這是命令嗎?你確定你可以在gunicorn_django命令的開頭添加'-u nobody'嗎?這似乎不適用於我。 – Mark 2012-07-04 11:10:12
@Mark他們在'sudo'命令的末尾添加'-u nobody',而不是'gunicorn_django'命令的開頭。 'sudo -u'讓你選擇一個非root用戶來運行下面的命令。 – BHSPitMonkey 2014-04-04 07:01:21