首页 > 代码库 > django 部署,gunicorn、virtualenv、nginx

django 部署,gunicorn、virtualenv、nginx

声明:

1、本篇文章是我边写命令边写的,请尊重我的劳动成果,转载请加上链接。

2、我既然公开写出来,是希望大家遇到问题的时候有个参考,所以,大家可以免费转载,使用该文章

3、但是,如果你要用这篇文章来赚钱,sorry,你至少得分我点吧。

 

 

使用gunicorn 来部署django

django写代码简单,但部署是个难题,今天终于发现gunicorn 这个好东西,与大家一起分享。

 

环境:ubuntu 14.04 64bit + django 1.6.5 + virtualenv + gunicorn


一、创建虚拟环境

root@recall:/home/www# pwd/home/wwwroot@recall:/home/www# virtualenv bugenvNew python executable in bugenv/bin/pythonInstalling setuptools, pip...done.root@recall:/home/www# lltotal 16drwxr-xr-x 4 root root 4096 Jul 21 15:04 ./drwxr-xr-x 5 root root 4096 Jul 21 12:34 ../drwxr-xr-x 6 root root 4096 Jul 21 15:05 bugenv/....................................(这一行是私人数据,这里不影响,所以不显示了)

 


二、进入虚拟环境

root@recall:/home/www# cd bugenv/root@recall:/home/www/bugenv# source bin/activate(bugenv)root@recall:/home/www/bugenv#

 

三、下载django和gunicorn
pip install django==1.6.5
pip install gunicorn

 1 (bugenv)root@recall:/home/www/bugenv# pip install django==1.6.5 2 Downloading/unpacking django==1.6.5 3   Downloading Django-1.6.5-py2.py3-none-any.whl (6.7MB): 6.7MB downloaded 4 Installing collected packages: django 5 Successfully installed django 6 Cleaning up... 7 (bugenv)root@recall:/home/www/bugenv# pip install gunicorn 8 Downloading/unpacking gunicorn 9   Downloading gunicorn-19.0.0.tar.gz (382kB): 382kB downloaded10   Running setup.py (path:/home/www/bugenv/build/gunicorn/setup.py) egg_info for package gunicorn11     12     warning: no previously-included files matching *.pyc found under directory docs13     warning: no previously-included files matching *.pyo found under directory docs14     warning: no previously-included files matching *.pyc found under directory tests15     warning: no previously-included files matching *.pyo found under directory tests16     warning: no previously-included files matching *.pyc found under directory examples17     warning: no previously-included files matching *.pyo found under directory examples18 Installing collected packages: gunicorn19   Running setup.py install for gunicorn20     21     warning: no previously-included files matching *.pyc found under directory docs22     warning: no previously-included files matching *.pyo found under directory docs23     warning: no previously-included files matching *.pyc found under directory tests24     warning: no previously-included files matching *.pyo found under directory tests25     warning: no previously-included files matching *.pyc found under directory examples26     warning: no previously-included files matching *.pyo found under directory examples27       File "/home/www/bugenv/lib/python2.7/site-packages/gunicorn/workers/gaiohttp.py", line 6728         yield from self.wsgi.close()29                  ^30     SyntaxError: invalid syntax31     32     Installing gunicorn_paster script to /home/www/bugenv/bin33     Installing gunicorn script to /home/www/bugenv/bin34     Installing gunicorn_django script to /home/www/bugenv/bin35 Successfully installed gunicorn36 Cleaning up...37 (bugenv)root@recall:/home/www/bugenv# 
下载django和gunicorn

四、创建django项目和django app

django-admin.py startproject bugproject
python manages.py startapp bugapp

1 (bugenv)root@recall:/home/www/bugenv# ls2 bin include lib local3 (bugenv)root@recall:/home/www/bugenv# mkdir djcode4 (bugenv)root@recall:/home/www/bugenv# cd djcode/5 (bugenv)root@recall:/home/www/bugenv/djcode# django-admin.py startproject bugproject6 (bugenv)root@recall:/home/www/bugenv/djcode# cd bugproject/7 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# python manage.py startapp bugapp

 


五、设置django 的settings.py文件
添加app,最后结果如下:

 1 INSTALLED_APPS = ( 2     django.contrib.admin, 3     django.contrib.auth, 4     django.contrib.contenttypes, 5     django.contrib.sessions, 6     django.contrib.messages, 7     django.contrib.staticfiles, 8     # add app 9     bugapp,10     gunicorn,11 )

 

六、运行gunicorn

1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# pwd2 /home/www/bugenv/djcode/bugproject3 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# gunicorn bugproject.wsgi:application -b 127.0.0.1:1010

如果没有问题,程序就挂起了。
如果你要操作其它东西,你最好使用nohup或screen

七、测试

7.1 我这里用的是nohup运行的(也就是说,上面六的最后一行命令变成了下面这一行)

1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# nohup gunicorn bugproject.wsgi:application -b 127.0.0.1:1010&

然后用tail查看nohup.out,没有任何信息就对了

7.2 查看端口

1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# netstat -lpnt 2 Active Internet connections (only servers)3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name4 ---------------------------------------------------------------------------------------------    5 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      772/nginx       6 tcp        0      0 127.0.0.1:1010          0.0.0.0:*               LISTEN      9842/python     7 tcp        0      0 0.0.0.0:******          0.0.0.0:*               LISTEN      8387/python     8 tcp        0      0 0.0.0.0:*****           0.0.0.0:*               LISTEN      689/python        9 tcp        0      0 0.0.0.0:****            0.0.0.0:*               LISTEN      1013/python  

 

我们使用的1010端口已经被占用了

7.3 使用curl 进行测试
root@recall:~# curl 127.0.0.1:1010
结果如下:

 1 <!DOCTYPE html> 2 <html lang="en"><head> 3   <meta http-equiv="content-type" content="text/html; charset=utf-8"> 4   <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title> 5   <style type="text/css"> 6     html * { padding:0; margin:0; } 7     body * { padding:10px 20px; } 8     body * * { padding:0; } 9     body { font:small sans-serif; }10     body>div { border-bottom:1px solid #ddd; }11     h1 { font-weight:normal; }12     h2 { margin-bottom:.8em; }13     h2 span { font-size:80%; color:#666; font-weight:normal; }14     h3 { margin:1em 0 .5em 0; }15     h4 { margin:0 0 .5em 0; font-weight: normal; }16     table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }17     tbody td, tbody th { vertical-align:top; padding:2px 3px; }18     thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }19     tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }20     #summary { background: #e0ebff; }21     #summary h2 { font-weight: normal; color: #666; }22     #explanation { background:#eee; }23     #instructions { background:#f6f6f6; }24     #summary table { border:none; background:transparent; }25   </style>26 </head>27 28 <body>29 <div id="summary">30   <h1>It worked!</h1>31   <h2>Congratulations on your first Django-powered page.</h2>32 </div>33 34 <div id="instructions">35   <p>36     Of course, you haven‘t actually done any work yet.37     Next, start your first app by running <code>python manage.py startapp [appname]</code>.38   </p>39 </div>40 41 <div id="explanation">42   <p>43     You‘re seeing this message because you have <code>DEBUG = True</code> in your44     Django settings file and you haven‘t configured any URLs. Get to work!45   </p>46 </div>47 </body></html>

 

八、配置nginx
8.1 只有127.0.0.1:1010能访问时不够的,我们还需要配置nginx

root@recall:~# vim /usr/local/nginx/nginx.conf

 1     server{ 2         listen 80; 3         resolver 8.8.8.8; 4         server_name www.xxoo.com; 5  6         location / { 7                 proxy_pass http://127.0.0.1:1010; 8                 proxy_set_header Host $host; 9                 proxy_set_header X-Real-IP $remote_addr;10                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;11         }12     }

至于静态文件,自己百度、谷歌配置就好了。

8.2 测试配置文件

1 root@recall:~# /usr/local/nginx/nginx -t2 nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok3 nginx: configuration file /usr/local/nginx/nginx.conf test is successful

 

8.3 nginx 重新加载配置文件
root@recall:~# /usr/local/nginx/nginx -s reload