1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<code>https:</code><code>//www</code><code>.xdoujiang.com</code><code>/blog/book</code><code>评论留言</code>
<code>一、基础环境Django Web部署平台</code>
<code>1、角色、ip、版本、内核、软件</code>
<code>serverA 10.1.10.236 3.16.0-4-amd64 8.1 nginx uwsgi django python</code>
<code>python-2.7.9</code>
<code>nginx-1.6.2</code>
<code>uwsgi-2.0.11.2</code>
<code>django-1.8.6</code>
<code>2、安装基础包</code>
<code>1)安装基础包</code>
<code>apt-get -y </code><code>install</code> <code>gcc </code><code>make</code> <code>python-dev python-setuptools python curl tree</code>
<code>2)使用easy_install命令安装pip</code>
<code>easy_install pip</code>
<code>二、安装uwsgi并测试访问</code>
<code>1、安装uwsgi</code>
<code>pip </code><code>install</code> <code>uwsgi</code>
<code>2、查看已安装模块</code>
<code>pip list</code>
<code>chardet (2.3.0)</code>
<code>defusedxml (0.4.1)</code>
<code>docutils (0.12)</code>
<code>Pillow (2.6.1)</code>
<code>pip (7.1.2)</code>
<code>Pygments (2.0.1)</code>
<code>python-apt (0.9.3.11)</code>
<code>python-debian (0.1.27)</code>
<code>python-debianbts (1.11)</code>
<code>reportbug (6.6.3)</code>
<code>roman (2.0.0)</code>
<code>setuptools (5.5.1)</code>
<code>six (1.8.0)</code>
<code>SOAPpy (0.12.22)</code>
<code>uWSGI (2.0.11.2)</code>
<code>wstools (0.4.3)</code>
<code>3、查看相关命令</code>
<code>[email protected]:~</code><code># ll /usr/local/bin</code>
<code>total 1340</code>
<code>-rwxr-xr-x 1 root staff 281 Nov 19 09:32 pip</code>
<code>-rwxr-xr-x 1 root staff 283 Nov 19 09:32 pip2</code>
<code>-rwxr-xr-x 1 root staff 287 Nov 19 09:32 pip2.7</code>
<code>-rwxr-xr-x 1 root staff 1357088 Nov 19 09:34 uwsgi</code>
<code>4、创建</code><code>test</code><code>.py</code>
<code>[email protected]:~</code><code># cat /root/test.py </code>
<code>#!/usr/bin/python</code>
<code># -*- coding: utf-8 -*-</code>
<code>#--------------------------------------------------</code>
<code>#Author:jimmygong</code>
<code>#Email:[email protected]</code>
<code>#FileName:test.py</code>
<code>#Function: </code>
<code>#Version:1.0 </code>
<code>#Created:2015-11-19</code>
<code>def application(</code><code>env</code><code>,start_response):</code>
<code> </code><code>start_response(</code><code>'200 OK'</code><code>,[(</code><code>'Content_Type'</code><code>,</code><code>'text/html'</code><code>)])</code>
<code> </code><code>return</code> <code>"uwsgi testing ok!"</code>
<code>5、启动服务</code>
<code>[email protected]:~</code><code># uwsgi --http :9999 --wsgi-file test.py</code>
<code>6、查看进程</code>
<code>[email protected]:~</code><code># ps -ef |grep uwsgi</code>
<code>root 2037 1833 0 10:01 pts</code><code>/1</code> <code>00:00:00 uwsgi --http :9999 --wsgi-</code><code>file</code> <code>test</code><code>.py</code>
<code>root 2038 2037 0 10:01 pts</code><code>/1</code> <code>00:00:00 uwsgi --http :9999 --wsgi-</code><code>file</code> <code>test</code><code>.py</code>
<code>root 2042 731 0 10:02 pts</code><code>/0</code> <code>00:00:00 </code><code>grep</code> <code>--color=auto uwsgi</code>
<code>7、查看端口</code>
<code>[email protected]:~</code><code># netstat -tupnl |grep 9999</code>
<code>tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 2037</code><code>/uwsgi</code>
<code>8、访问</code>
<a href="http://s5.51cto.com/wyfs02/M00/76/3D/wKioL1ZNvSeAy6g2AAAfR0ge51Q596.png" target="_blank"></a>
<code>9、关闭服务</code>
<code>kill</code> <code>-9 2037</code>
<code>三、安装django并测试访问</code>
<code>1、安装django</code>
<code>pip </code><code>install</code> <code>django</code>
<code>2、验证模块和查看版本</code>
<a href="http://s3.51cto.com/wyfs02/M01/76/3D/wKioL1ZNvTezFrK-AAAlY464KVY803.png" target="_blank"></a>
<code>3、创建django项目所存放的目录</code>
<code>[email protected]:~</code><code># mkdir /opt/django -p</code>
<code>4、创建aaabbbcom项目</code>
<code>[email protected]:~</code><code># cd /opt/django/ && django-admin startproject aaabbbcom</code>
<code>5、查看下aaabbbcom项目目录结构</code>
<code>1)[email protected]:django</code><code># tree aaabbbcom/</code>
<code>aaabbbcom/</code>
<code>├── aaabbbcom</code>
<code>│ ├── __init__.py</code>
<code>│ ├── settings.py</code>
<code>│ ├── urls.py</code>
<code>│ └── wsgi.py</code>
<code>└── manage.py</code>
<code>1 directory, 5 files</code>
<code>2)目录结构说明</code>
<code>__init__.py 目录结构 调用有关</code>
<code>settings.py 项目设置</code>
<code>urls.py 地址配置文件</code>
<code>wsgi.py 部署服务器文件</code>
<code>6、启动服务</code>
<code>cd</code> <code>aaabbbcom/ && </code><code>nohup</code> <code>python manage.py runserver 0.0.0.0:8888 &</code>
<code>7、查看进程</code>
<code>ps</code> <code>-ef |</code><code>grep</code> <code>python</code>
<code>root 2413 2412 0 15:14 pts</code><code>/2</code> <code>00:00:00 python manage.py runserver 0.0.0.0:8888</code>
<code>root 2416 2413 1 15:14 pts</code><code>/2</code> <code>00:00:04 </code><code>/usr/bin/python</code> <code>manage.py runserver 0.0.0.0:8888</code>
<code>8、查看端口</code>
<code>netstat</code> <code>-tupnl |</code><code>grep</code> <code>python</code>
<code>tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 2416</code><code>/python</code>
<code>9、访问</code>
<a href="http://s2.51cto.com/wyfs02/M01/76/3D/wKioL1ZNvUfgGz4xAABz6TwxU58592.png" target="_blank"></a>
<code>10、关闭服务</code>
<code>kill</code> <code>-9 2416</code>
<code>11、创建aaabbbcom项目下的testapp应用</code>
<code>cd</code> <code>/opt/django/aaabbbcom</code> <code>&& python manage.py startapp testapp</code>
<code>12、查看下testapp目录结构</code>
<code>[email protected]:aaabbbcom</code><code># tree testapp/</code>
<code>testapp/</code>
<code>├── admin.py</code>
<code>├── __init__.py</code>
<code>├── migrations</code>
<code>│ └── __init__.py</code>
<code>├── models.py</code>
<code>├── tests.py</code>
<code>└── views.py</code>
<code>1 directory, 6 files</code>
<code>13、备份下settings.py配置</code>
<code>cp</code> <code>/opt/django/aaabbbcom/aaabbbcom/settings</code><code>.py </code><code>/opt/django/aaabbbcom/aaabbbcom/settings</code><code>.py.bak</code>
<code>14、修改settings.py配置</code>
<code>[email protected]:~</code><code># diff /opt/django/aaabbbcom/aaabbbcom/settings.py /opt/django/aaabbbcom/aaabbbcom/settings.py.bak</code>
<code>40d39</code>
<code>< </code><code>'testapp'</code><code>,</code>
<code>15、定义视图函数views.py</code>
<code>[email protected]:~</code><code># cat /opt/django/aaabbbcom/testapp/views.py</code>
<code>from django.http </code><code>import</code> <code>HttpResponse</code>
<code>def index(request):</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"welcome django web!"</code><code>)</code>
<code>16、定义视图函数相关的urls.py</code>
<code>[email protected]:~</code><code># cat /opt/django/aaabbbcom/aaabbbcom/urls.py</code>
<code>from django.conf.urls </code><code>import</code> <code>patterns,include,url</code>
<code>from django.contrib </code><code>import</code> <code>admin</code>
<code>admin.autodiscover()</code>
<code>urlpatterns=patterns(</code><code>''</code><code>,</code>
<code>url(r</code><code>'^$'</code><code>,</code><code>'testapp.views.index'</code><code>,name=</code><code>'home'</code><code>),</code>
<code>url(r</code><code>'^admin/'</code><code>,include(admin.site.urls)),</code>
<code>)</code>
<code>17、启动服务</code>
<code>cd</code> <code>/opt/django/aaabbbcom/</code> <code>&& </code><code>nohup</code> <code>python manage.py runserver 0.0.0.0:8888 &</code>
<code>18、访问</code>
<a href="http://s4.51cto.com/wyfs02/M02/76/3D/wKioL1ZNvV_T2kvHAAAkaATK31I259.png" target="_blank"></a>
<code>19、关闭服务</code>
<code>四、配置django和uwsgi结合</code>
<code>1、启动服务</code>
<code>uwsgi --http :7777 --chdir </code><code>/opt/django/aaabbbcom/</code> <code>--module aaabbbcom.wsgi</code>
<code>2、查看端口</code>
<code>netstat</code> <code>-tupnl |</code><code>grep</code> <code>uwsgi</code>
<code>tcp 0 0 127.0.0.1:42415 0.0.0.0:* LISTEN 2587</code><code>/uwsgi</code>
<code>tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN 2587</code><code>/uwsgi</code>
<code>3、查看进程</code>
<code>ps</code> <code>-ef |</code><code>grep</code> <code>wsgi</code>
<code>root 2587 779 0 15:43 pts</code><code>/1</code> <code>00:00:00 uwsgi --http :7777 --chdir </code><code>/opt/django/aaabbbcom/</code> <code>--module aaabbbcom.wsgi</code>
<code>root 2588 2587 0 15:43 pts</code><code>/1</code> <code>00:00:00 uwsgi --http :7777 --chdir </code><code>/opt/django/aaabbbcom/</code> <code>--module aaabbbcom.wsgi</code>
<code>root 2604 740 0 15:47 pts</code><code>/0</code> <code>00:00:00 </code><code>grep</code> <code>--color=auto wsgi</code>
<code>4、访问</code>
<a href="http://s1.51cto.com/wyfs02/M00/76/3D/wKioL1ZNvWux16ooAAAhENhGAtg249.png" target="_blank"></a>
<code>5、关闭服务</code>
<code>kill</code> <code>-9 2587</code>
<code>五、配置nginx和uwsgi结合</code>
<code>1、安装nginx</code>
<code>apt-get -y </code><code>install</code> <code>nginx</code>
<code>2、创建aaabbbcom站点</code>
<code>cat</code> <code>/etc/nginx/sites-enabled/aaabbbcom</code>
<code>server {</code>
<code> </code><code>listen 10.1.10.236:80;</code>
<code> </code><code>server_name 10.1.10.236;</code>
<code> </code><code>access_log </code><code>/opt/django/access</code><code>.log;</code>
<code> </code><code>error_log </code><code>/opt/django/error</code><code>.log;</code>
<code> </code><code>location / {</code>
<code> </code><code>include </code><code>/etc/nginx/uwsgi_params</code><code>;</code>
<code> </code><code>uwsgi_pass 127.0.0.1:8630;</code>
<code> </code><code>}</code>
<code>}</code>
<code>3、删除默认default节点</code>
<code>rm</code> <code>-f </code><code>/etc/nginx/sites-enabled/default</code>
<code>4、创建django.ini配置文件</code>
<code>cat</code> <code>/opt/django/django</code><code>.ini </code>
<code>[uwsgi]</code>
<code>vhost=</code><code>true</code>
<code>socket=127.0.0.1:8630</code>
<code>chdir=</code><code>/opt/django/aaabbbcom</code>
<code>module=aaabbbcom.wsgi</code>
<code>master=</code><code>true</code>
<code>processes=2</code>
<code>threads=2</code>
<code>max-requests=6000</code>
<code>chmod</code><code>-socket=664</code>
<code>vacuum=</code><code>true</code>
<code>daemonize=</code><code>/opt/django/django</code><code>.log</code>
<code>5、启uwsgi服务</code>
<code>nohup</code> <code>/usr/local/bin/uwsgi</code> <code>--ini </code><code>/opt/django/django</code><code>.ini &</code>
<code>6、重启nginx服务</code>
<code>/etc/init</code><code>.d</code><code>/nginx</code> <code>restart</code>
<code>[ ok ] Restarting nginx (via systemctl): nginx.service.</code>
<code>netstat</code> <code>-tupnl|</code><code>egrep</code> <code>"uwsgi|nginx"</code>
<code>tcp 0 0 10.1.10.236:80 0.0.0.0:* LISTEN 3433</code><code>/nginx</code> <code>-g daemo</code>
<code>tcp 0 0 127.0.0.1:8630 0.0.0.0:* LISTEN 3408</code><code>/uwsgi</code>
<code>8、查看进程</code>
<code>ps</code> <code>-ef |</code><code>egrep</code> <code>"uwsgi|nginx"</code>
<code>root 3408 740 0 16:12 pts</code><code>/0</code> <code>00:00:00 </code><code>/usr/local/bin/uwsgi</code> <code>--ini </code><code>/opt/django/django</code><code>.ini</code>
<code>root 3411 3408 0 16:12 pts</code><code>/0</code> <code>00:00:00 </code><code>/usr/local/bin/uwsgi</code> <code>--ini </code><code>/opt/django/django</code><code>.ini</code>
<code>root 3412 3408 0 16:12 pts</code><code>/0</code> <code>00:00:00 </code><code>/usr/local/bin/uwsgi</code> <code>--ini </code><code>/opt/django/django</code><code>.ini</code>
<code>root 3433 1 0 16:13 ? 00:00:00 nginx: master process </code><code>/usr/sbin/nginx</code> <code>-g daemon on; master_process on;</code>
<code>www-data 3435 3433 0 16:13 ? 00:00:00 nginx: worker process </code>
<code>www-data 3436 3433 0 16:13 ? 00:00:00 nginx: worker process </code>
<code>www-data 3437 3433 0 16:13 ? 00:00:00 nginx: worker process </code>
<code>www-data 3438 3433 0 16:13 ? 00:00:00 nginx: worker process </code>
<code>root 3476 779 0 16:16 pts</code><code>/1</code> <code>00:00:00 </code><code>grep</code> <code>-E uwsgi|nginx</code>
<a href="http://s3.51cto.com/wyfs02/M01/76/3D/wKioL1ZNvXyDl436AAAhPCRvgn0296.png" target="_blank"></a>
<code>10、查看相关日志</code>
<code>1)</code><code>cat</code> <code>/opt/django/access</code><code>.log</code>
<code>10.1.10.131 - - [19</code><code>/Nov/2015</code><code>:15:44:27 +0800] </code><code>"GET / HTTP/1.1"</code> <code>200 50 </code><code>"-"</code> <code>"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0"</code>
<code>2)</code><code>cat</code> <code>/opt/django/django</code><code>.log </code>
<code>*** Starting uWSGI 2.0.11.2 (64bit) on [Thu Nov 19 14:44:02 2015] ***</code>
<code>compiled with version: 4.9.2 on 19 November 2015 09:33:34</code>
<code>os: Linux-3.16.0-4-amd64 </code><code>#1 SMP Debian 3.16.7-ckt11-1 (2015-05-24)</code>
<code>nodename: 10.1.10.236</code>
<code>machine: x86_64</code>
<code>clock </code><code>source</code><code>: unix</code>
<code>detected number of CPU cores: 1</code>
<code>current working directory: </code><code>/root</code>
<code>detected binary path: </code><code>/usr/local/bin/uwsgi</code>
<code>!!! no internal routing support, rebuild with pcre support !!!</code>
<code>uWSGI running as root, you can use --uid</code><code>/--gid/--chroot</code> <code>options</code>
<code>*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** </code>
<code>chdir() to </code><code>/opt/django/aaabbbcom</code>
<code>your processes number limit is 850</code>
<code>your memory page size is 4096 bytes</code>
<code>detected max </code><code>file</code> <code>descriptor number: 819200</code>
<code>VirtualHosting mode enabled.</code>
<code>lock engine: pthread robust mutexes</code>
<code>thunder lock: disabled (you can </code><code>enable</code> <code>it with --thunder-lock)</code>
<code>uwsgi socket 0 bound to TCP address 127.0.0.1:8630 fd 3</code>
<code>Python version: 2.7.9 (default, Mar 1 2015, 13:01:26) [GCC 4.9.2]</code>
<code>Python main interpreter initialized at 0xc65b20</code>
<code>python threads support enabled</code>
<code>your server socket listen backlog is limited to 100 connections</code>
<code>your mercy </code><code>for</code> <code>graceful operations on workers is 60 seconds</code>
<code>mapped 249168 bytes (243 KB) </code><code>for</code> <code>4 cores</code>
<code>*** Operational MODE: preforking+threaded ***</code>
<code>WSGI app 0 (mountpoint=</code><code>''</code><code>) ready </code><code>in</code> <code>1 seconds on interpreter 0xc65b20 pid: 3258 (default app)</code>
<code>*** uWSGI is running </code><code>in</code> <code>multiple interpreter mode ***</code>
<code>spawned uWSGI master process (pid: 3258)</code>
<code>spawned uWSGI worker 1 (pid: 3261, cores: 2)</code>
<code>spawned uWSGI worker 2 (pid: 3262, cores: 2)</code>
<code>10.1.10.236 [pid: 3262|app: 0|req: 1</code><code>/1</code><code>] 10.1.10.131 () {42 vars </code><code>in</code> <code>686 bytes} [Thu Nov 19 06:47:06 2015] GET / => generated 19 bytes </code><code>in</code> <code>20 msecs (HTTP</code><code>/1</code><code>.1 200) 2 headers </code><code>in</code> <code>88 bytes (1 switches on core 0)</code>
<code>10.1.10.236 [pid: 3262|app: 0|req: 2</code><code>/2</code><code>] 10.1.10.131 () {40 vars </code><code>in</code> <code>631 bytes} [Thu Nov 19 07:44:27 2015] GET / => generated 19 bytes </code><code>in</code> <code>192 msecs (HTTP</code><code>/1</code><code>.1 200) 2 headers </code><code>in</code> <code>88 bytes (1 switches on core 1)</code>
<code>11、配置说明 </code>
<code>socket:指定uwsgi的客户端将要连接的socket的路径</code>
<code>processes:开启的进程数量</code>
<code>workers:开启的进程数量,等同于processes(官网的说法是spawn the specified number of workers / processes)</code>
<code>chdir:指定运行目录(chdir to specified directory before apps loading)</code>
<code>wsgi-</code><code>file</code><code>:加载指定的WSGI文件(与Graham的mod_wsgi形式兼容)</code>
<code>stats:在指定的地址上,开启状态服务(</code><code>enable</code> <code>the stats server on the specified address)</code>
<code>threads:开启线程操作模式。你必须指定每个工作进程的线程数</code>
<code>master:启动主进程</code>
<code>daemonize:使进程在后台运行,并将日志打到指定的日志文件或者udp服务器</code>
<code>pidfile:指定pid文件的位置,记录主进程的pid号</code>
<code>vacuum:当服务器退出的时候自动删除unix socket文件和pid文件</code>
<code>vhost:开启虚拟主机模式</code>
<code>module:加载指定的python WSGI模块(模块路径必须在PYTHONPATH里)</code>
<code>max-requests:为每个工作进程设置请求数的上限</code>
<code>limit-as:通过使用POSIX</code><code>/UNIX</code><code>的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数</code>
<code>chmod</code><code>-socket:unix socket是个文件,所以会受到unix系统的权限限制。如果你的uwsgi客户端没有权限访问uWSGI socket,你可以用这个选项设置unix socket的权限</code>
<code>六、参考文章</code>
<code>https:</code><code>//docs</code><code>.djangoproject.com</code><code>/en/1</code><code>.8</code><code>/howto/deployment/wsgi/</code>
<code>https:</code><code>//docs</code><code>.djangoproject.com</code><code>/en/1</code><code>.8</code><code>/topics/http/urls/</code>
<code>https:</code><code>//docs</code><code>.djangoproject.com</code><code>/en/1</code><code>.8</code><code>/topics/settings/</code>
<code>http:</code><code>//uwsgi-docs</code><code>.readthedocs.org</code><code>/en/latest/WSGIquickstart</code><code>.html </code>
<code>http:</code><code>//projects</code><code>.unbit.it</code><code>/uwsgi/wiki/Example</code>
本文转自 xdoujiang 51CTO博客,原文链接:http://blog.51cto.com/7938217/1714816,如需转载请自行联系原作者