我無法找到一個關於如何運行Nginx作爲反向代理的良好教程,gev作爲virtualenv中的http服務器和django。如何運行nginx,gevent,virtualenv和django
我發現類似tutorial,但它的uWSGI而不是gevent。任何關於如何使這與gevent工作的指針,將不勝感激。
謝謝
我無法找到一個關於如何運行Nginx作爲反向代理的良好教程,gev作爲virtualenv中的http服務器和django。如何運行nginx,gevent,virtualenv和django
我發現類似tutorial,但它的uWSGI而不是gevent。任何關於如何使這與gevent工作的指針,將不勝感激。
謝謝
uWSGI支持GEVENT從0.9.9版本,你可以按照本教程適應它的GEVENT插件:
它可以是複雜的對像我這樣誰沒有嘗試nginx,gunicorn和gevent。我使用的是Debian Squeeze,並且更喜歡使用virtualenv來處理deb包,因爲stable中的某些包已經過時了,但它們當然很穩定。有時候debs可以幫助管理(vide 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
官方回購安裝pip和virtualenv。
root$ aptitude install python-pip python-virtualenv
當的virtualenv幫手,您可以使用virtualenvwrapper,但它的DEB版本已經很老了,所以我更喜歡使用PIP代替:
root$ pip install virtualenvwrapper
添加以下行結束/var/web/.bashrc
的:
source /usr/local/bin/virtualenvwrapper.sh
讓我們準備用gevent和django 1.5c1製作virtualenv。您可能需要從debian repo安裝一些開發包來點下面的一些內容 - 如果您有問題,請告訴我。如果你想離開生產VENV使用deactivate
(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和Postgres支持。如果你想激活它使用workon production
。讓我們創建Django的智能終端產品(我更喜歡單主Django項目):
(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)
你需要定製myproject/settings.py
文件propably。
我想用最新的gunicorn 0.17。2,所以我用pip把它安裝在virtualenv上。但我想通過/etc/init.d/gunicorn
管理gunicorn守護像其他後臺程序太多,所以讓我們從反向移植回購安裝最新的可能,但過時的0.14.5版本。
正如上面提到的,你需要幾個德布斯 - 一些來自官方的回購,以及一些從擠壓反向移植。如果你不使用反向移植的是,這一行添加到您的/etc/apt/sources.list
:
deb http://backports.debian.org/debian-backports squeeze-backports main
更新源代碼和安裝gunicorn:
root$ aptitude update
root$ aptitude -t squeeze-backports install gunicorn
Gunicorn支持基礎知識的virtualenv但使用沒有標準的方法來自其他守護進程的啓動腳本的專用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服務器。創建/etc/gunicorn.d/web.py
文件,並把(我不tryed Django的模式尚):
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',
),
}
下一頁安裝nginx的這是較新的版本來自官方的回購(〜的1.2.6-1 dotdeb.0代替1.2.1-2.2 〜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
網址和其他一些細節。下面添加爲第一行/etc/nginx/nginx.conf
:
user webd webd
和chmod日誌目錄:
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
用這個Django的項目殼:
(production)webd$ ~/manage.py shell
創建一個新的應用程序使用:
(production)webd$ cd ~/myproject/
(production)webd$ ~/manage.py startapp myapp
你有什麼問題嗎?哪些事情可以做得更好?
欣賞你花時間寫出答案。我希望你在一年前回答。我正在學習所有這些東西,一切都很混亂,不得不通過閱讀大量的東西和試驗+錯誤來學習。 – miki725
試試這個:https://bitbucket.org/denis/gevent/src/0464753331d3/examples/webchat – qubird
美味,可悲的是沒有回答 – kbec