2012-02-13 3 views
8

Centos üzerinde nginx'in arkasında silahla bir django uygulaması konuşuyorum 5. Kök olmayan bir kullanıcı olarak gunicorn'u nasıl çalıştırabilirim? Belgelerin hiçbiri buna değinmiyor.Tabanca/python uygulama sunucusunu root olmayan kullanıcı olarak nasıl çalıştırırım?

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

Yanıt:

sudo -u nobody gunicorn_django --workers=4 

Bu başarısız: Bu muhtemelen

Aşağıdaki çalışmadığını eklemek gerekir ... hem nginx arkasında çalışan herhangi piton uygulama sunucusu için geçerlidir :

Benim hatam.

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

Komutun bu olduğundan emin misiniz? Gunicorn_django komutunun başında '-u nobody 'ekleyebileceğinizden emin misiniz? Bu benim için çalışmıyor gibi görünüyor. – Mark

+0

@Mark 'su 'komutunun sonuna' -u kimse 'komutunu ekliyorlar,' gunicorn_django' komutunun başlangıcını değil. sudo -u, aşağıdaki komutu çalıştırmak için root dışında bir kullanıcı seçmenize izin verir. – BHSPitMonkey

cevap

2

Ben supervisord kullanılmasını öneriyoruz: Öyle birlikte gunicorn çağrılan gerekirdi özel settings.py dosyası vardı. Supervisor, uygulamanızı açılışta anlattığınız kullanıcı hesabıyla başlatır.

[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 

Benim run_gunicorn komut daha sonra:

#!/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 

ben MY_APP doğrudan gunicorn referans olabilir

İşte /etc/supervisor/conf.d/ altında yer benim my_app.conf var .conf, ama yapamam çünkü bu şekilde aktive edebilirim. DJANGO_SECRET'imi, aktif betiğimin kuyruk ucuna env var olarak koyuyorum. Ayrıca, API anahtarları ve Git veya Mercurial'a ait olmayan diğer hassas şeyler ile bunu yapmak da iyidir.
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 

Aslında orada geliştirilebilir eminim, ama onlar root olmadan benim app yayınlanmasını sağlamak:

Benim gunicorn.conf olduğunu. Supervisord, uygulama sunucusunun çalışmasını sağlar. Daha sonra proxy_pass üzerinden uygulama sunucumda nginx'i işaretleyin (gerekirse bunu paylaşabilir).

DÜZENLEME: dosya adlarının açıklığa kavuşturulması