2011-09-09 5 views
3

Nginx를 역방향 프록시로 실행하는 방법, virtualenv 내 http 서버 및 django로 gevent를 실행하는 방법에 대한 좋은 자습서를 찾을 수 없습니다.nginx, gevent, virtualenv 및 django를 실행하는 방법

나는 tutorial과 유사하지만 uWSGI가 아닌 gevent를 발견했습니다. gevent를 사용하여이 작업을 수행하는 방법에 대한 모든 정보를 얻으실 수 있습니다.

+0

다음을 시도해보십시오. https://bitbucket.org/denis/gevent/src/0464753331d3/examples/webchat – qubird

+0

맛있는, 슬프게도 대답 없음 – kbec

답변

1

uWSGI 버전 0.9.9에서 gevent을 지원 주셔서 감사합니다, 당신은 gevent 플러그인 위해 그것을 적응 자습서를 따를 수 :

http://projects.unbit.it/uwsgi/wiki/Gevent

그것은 나 같은 사람을 위해 복잡 할 수
4

사람 결코 시도 nginx, gunicorn 및 gevent. Debian Squeeze를 사용하고 있으며 deb 패키지보다 virtualenv에서 pip를 선호합니다. 왜냐하면 stable에있는 일부 패키지는 쓸모가 없기 때문입니다. 물론 안정적입니다. 가끔은 debs가 관리하는 데 도움이 될 수 있습니다 (gunicorn 솔루션 참조). 나는 chroot을 원하지 않지만, 그것은 쉽습니다. - 나는 단지 그것이 불필요하다고 생각합니다.

먼저 더 나은 분리를 위해 webd라는 사용자를 만들어야합니다. webd 그룹이 있다고 가정합니다. 당신은 그 존재를 확인할 수 있습니다 :

root$ cat /etc/group | cut -d: -f1 | grep -E '^webd' 

이것은 그룹이 존재하면 webd을 인쇄합니다. 그렇지 않은 경우 아래 명령에서 -g webd-U으로 바꿉니다. 먼저 useradd --help을 읽으십시오.

root$ useradd --home-dir /var/web --create-home --shell /bin/bash -g webd webd 

공식의 repo에서 pipvirtualenv를 설치합니다.

root$ aptitude install python-pip python-virtualenv 

VIRTUALENV 도우미로서 당신은 virtualenvwrapper을 사용할 수 있지만, 그 뎁 버전은 아주 오래된, 그래서 내가 대신 핍 사용하는 것을 선호 다음 /var/web/.bashrc의 끝

root$ pip install virtualenvwrapper 

추가 다음 줄을 :

source /usr/local/bin/virtualenvwrapper.sh 

gevent 및 django 1.5c1을 사용하여 가상 환경을 준비해 봅시다. 문제가있을 경우 debian repo에서 몇 가지 패키지를 설치하여 아래 내용 중 일부를 pip해야 할 수도 있습니다. 당신이 deactivate를 사용 venv 생산을 남겨하려는 경우

(production)webd$ pip install pytz 
(production)webd$ pip install psycopg2 
(production)webd$ pip install gevent-psycopg2 

:

root$ su - webd 
webd$ mkvirtualenv --no-site-packages production 
(production)webd$ pip install -U distribute 
(production)webd$ pip install gunicorn 
(production)webd$ pip install gevent 
(production)webd$ pip install https://www.djangoproject.com/download/1.5c1/tarball/ 
(production)webd$ pip install django-gevent-deploy 
(production)webd$ cd .virtualenvs/production/bin/ 
(production)webd$ ln -s django-admin.py django-admin 
(production)webd$ exit 
root$ su - webd 
webd$ workon production 
(production)webd$ python 
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information 
>>> import django 
>>> django.VERSION 
(1, 5, 0, 'rc', 1) 

추가로 pytz 및 포스트 그레스 지원을받을. 활성화하려면 workon production을 사용하십시오. 의 장고 lifespace (나는 단일 마스터 장고 프로젝트를 선호) 만들어 보자 : 이런 식으로 뭔가에

(production)webd$ django-admin startproject myproject 
(production)webd$ mv myproject/manage.py ./ 
(production)webd$ chmod u+x manage.py 
(production)webd$ mv myproject/myproject/* myproject/ 
(production)webd$ rm -rf myproject/myproject/ 
(production)webd$ vim manage.py 

변경 :

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    if not '/var/web' in sys.path: 
     sys.path.append('/var/web') 

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

당신은 propably myproject/settings.py 파일을 사용자 정의해야합니다.

최신 gunicorn 0.17을 사용하고 싶습니다.2 그래서 나는 virtualenv 프로덕션에서 pip로 설치했습니다. 하지만 나는 다른 데몬과 마찬가지로 gunicorn 데몬을 /etc/init.d/gunicorn으로 관리하기를 원하므로 백 포트 레포에서 가능한 최신의 쓸모없는 0.14.5 버전을 설치합시다.

위에서 언급했듯이 공식적인 repo에서 가져온 것이 든, 짜증나는 등판에서 가져온 것이 든간에 적은 수의 debs가 필요합니다.

deb http://backports.debian.org/debian-backports squeeze-backports main 

업데이트하여 소스 및 gunicorn를 설치 : 아직 백 포트를 사용하지 않으면 /etc/apt/sources.list이 줄을 추가

root$ aptitude update 
root$ aptitude -t squeeze-backports install gunicorn 

Gunicorn이 VIRTUALENV에 대한 기본 사항을 지원하지만 사용하는 표준 방법이 없습니다 다른 데몬의 start-stop 스크립트에서 나온 gunicorn 전용. 파일 /usr/sbin/gunicorn-debian에이 기능을 하드 코딩하기로 결정했습니다. Config.start(self) 방법을 찾아 함께 첫 선을 교체 :

def start(self): 
    gunicornpath = self['gunicornpath'] if 'gunicornpath' in self else '/usr/bin' 

    daemon = { 
     'wsgi': gunicornpath + '/gunicorn', 
     'django': gunicornpath + '/gunicorn_django', 
     'paster': gunicornpath + '/gunicorn_paster', 
    }[self['mode']] 

는 이제 gunicorn 서버를 구성 할 수 있습니다. (나는 아직 장고 모드를 tryed하지 않음) /etc/gunicorn.d/web.py 파일을 만들어 넣어 :

CONFIG = { 
    'mode': 'wsgi', 
    'user': 'webd', 
    'group': 'webd', 
    'working_dir': '/var/web', 
    'python': '/var/web/.virtualenvs/production/bin/python', 
    'pythonpath': '/var/web/.virtualenvs/production/lib/python2.6', 
    'gunicornpath': '/var/web/.virtualenvs/production/bin', 
    'args': (
     '--bind=127.0.0.1:9090', 
     '--workers=4', 
     '--worker-class=egg:gunicorn#gevent', 
     '--daemon', 
     'myproject.wsgi:application', 
    ), 
} 

다음 설치 공식의 repo에서 온 최신 버전 (1.2.6-1 ~ dotdeb.0 대신 1.2.1-2.2을의의의 nginx를 ~ bpo60 + 1) :

root$ aptitude install nginx 

만들고 /etc/nginx/sites-available/myproject 편집 :

server { 
    listen *:80; 

    server_name mydomain.com; 

    root /var/web/; 

    location/{ 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_connect_timeout 10; 
     proxy_read_timeout 10; 
     proxy_pass http://localhost:9090/; 
    } 

    error_page 500 502 503 504 /err50x.html; 
} 

너무 /var/web/err50x.html을 만드십시오. 실제 서버에서는 static URL과 기타 세부 정보를 설정해야합니다. 로그 디렉토리에 대한

user webd webd 

그리고 chmod를을 : /etc/nginx/nginx.conf에서 첫 번째 줄에 다음과 같이 추가

root$ chown -R webd:webd /var/log/gunicorn/ && chmod g+s /var/log/gunicorn/ 
root$ chown -R webd:webd /var/log/nginx/ && chmod g+s /var/log/nginx/ 

변경 사항을 적용하고 기계 시작 :

root$ cd /etc/nginx/sites-enabled/ 
root$ ln -s ../sites-available/myproject 001-myproject 
root$ /etc/init.d/gunicorn restart 
root$ /etc/init.d/nginx restart 

사용이 장고의 프로젝트 쉘 :

(production)webd$ ~/manage.py shell 

새 앱을 만들려면 다음을 사용하십시오.

(production)webd$ cd ~/myproject/ 
(production)webd$ ~/manage.py startapp myapp 

문제가 있습니까? 어떤 일이 더 잘될 수 있습니까?

+0

시간을내어 답변을 작성해 주셔서 감사합니다. 1 년 전에 대답 해줬으면합니다. 나는이 모든 것을 배우고 있었고 모든 것이 혼란 스러웠고 모든 것을 읽고 재판을 통해 오류를 배워야했습니다. – miki725