天天看點

Django Web部署平台

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/ &amp;&amp; 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/ &amp;&amp; </code><code>nohup</code> <code>python manage.py runserver 0.0.0.0:8888 &amp;</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>&amp;&amp; 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>&lt;     </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>&amp;&amp; </code><code>nohup</code> <code>python manage.py runserver 0.0.0.0:8888 &amp;</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 &amp;</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 / =&gt; 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 / =&gt; 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,如需轉載請自行聯系原作者

繼續閱讀