2012-02-13 4 views
8

centos 5에서 nginx 뒤에 gunicorn으로 장고 응용 프로그램을 배포하고 있습니다. root가 아닌 사용자로 gunicorn을 어떻게 실행할 수 있습니까? 어떤 문서도이 문제를 해결하지 못하는 것 같습니다.루트가 아닌 사용자로 gunicorn/python 앱 서버를 실행하는 방법은 무엇입니까?

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

답변 :

sudo -u nobody gunicorn_django --workers=4 

그것은 실패 : 이것은 아마도

나는 다음과 같은 작동하지 않는 것을 추가해야합니다 ...뿐만 아니라 nginx를 뒤에 실행하는 파이썬 응용 프로그램 서버에 적용 :

내 실수.

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는 부팅 할 때 말하는 사용자 계정으로 앱을 시작합니다.

[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 참조 할 수

는 여기에 내가 /etc/supervisor/conf.d/ 아래에 배치 내 my_app.conf입니다 .conf하지만이 방법으로 활성화 할 수 있기 때문에 실행하지 않습니다. 내 활성화 스크립트의 끝 부분에 내 DJANGO_SECRET을 env var로 넣습니다. Git 또는 Mercurial에 속하지 않는 API 키 및 기타 민감한 항목으로도이를 수행하는 것이 좋습니다.
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 

가 사실은 내가이 개선 될 수 확신하지만, 그들은 루트없이 내 응용 프로그램 실행을 얻을 :

내 gunicorn.conf이다. Supervisord는 앱 서버가 계속 실행되도록합니다. 나는 proxy_pass를 통해 내 응용 프로그램 서버에서 nginx를 가리킨다 (필요한 경우 공유 할 수있다).

편집 : 파일 이름 명확화

관련 문제