Django 的部署

一、什麼是WSGI(WSGI是一種python專用的web協議  和http相似):

  1. WSGI是一種規範,它定義了使用python編寫的web app(django)與web server(uWSGI)之間接口格式,實現web app與web server間的解耦。node

  2. WSGI 沒有官方的實現, 由於WSGI更像一個協議. 只要遵守這些協議,WSGI應用(Application)均可以在任何服務器(Server)上運行python

  3. WSGI實質:WSGI是一種描述web服務器(如nginx,uWSGI等服務器)如何與web應用程序(如用Django、Flask框架寫的程序)通訊的規範、協議。 linux

  爲何須要web協議:nginx

    1)不一樣的框架有不一樣的開發方式,可是不管如何,開發出的應用程序都要和服務器程序配合,才能爲用戶提供服務。web

    2) 這樣,服務器程序就須要爲不一樣的框架提供不一樣的支持,只有支持它的服務器才能被開發出的應用使用,顯然這是不可行的。算法

    3)web協議本質:就是定義了Web服務器和Web應用程序或框架之間的一種簡單而通用的接口規範。django

  Web協議介紹vim

    Web協議出現順序: CGI -> FCGI -> WSGI -> uwsgi後端

    1. CGI:  最先的協議瀏覽器

    2. FCGI:  比CGI快

    3. WSGI: Python專用的協議    

    4. uwsgi: 比FCGI和WSGI都快,是uWSGI項目自有的協議,主要特徵是採用二進制來存儲數據,

     以前的協議都是使用字符串,因此在存儲空間和解析速度上,都優於字符串型協議.

二、uWSGI(web服務器   和nginx相似):

  1. 什麼是uWSGI: uWSGI是一個全功能的HTTP服務器,實現了WSGI協議、uwsgi協議、http協議等。

  2. uWSGI做用:它要作的就是把HTTP協議轉化成語言支持的網絡協議,好比把HTTP協議轉化成WSGI協議,讓Python能夠直接使用。

  3. uWSGI特色:輕量級,易部署,性能比nginx差不少

  注:

    若是架構是Nginx+uWSGI+APP,uWSGI是一箇中間件
    若是架構是uWSGI+APP,uWSGI是一個服務器

三、Nginx:

  1. Nginx是一個Web服務器,其中的HTTP服務器功能和uWSGI功能很相似

  2. 可是Nginx還能夠用做更多用途,好比最經常使用的反向代理、負載均衡、攔截攻擊等,並且性能極高

四、Django:

  1. Django是一個Web框架,框架的做用在於處理request和 reponse,其餘的不是框架所關心的內容。

  2. 因此如何部署Django不是Django所須要關心的。

 

五、Django + Uwsgi + Nginx方案:

       

    1)請求處理總體流程     

        nginx接收到瀏覽器發送過來的http請求,將包進行解析,分析url

        靜態文件請求:就直接訪問用戶給nginx配置的靜態文件目錄,直接返回用戶請求的靜態文件

        動態接口請求:那麼nginx就將請求轉發給uWSGI,最後到達django處理

    2)各模塊做用

        1. nginx:是對外的服務器,外部瀏覽器經過url訪問nginx,nginx主要處理靜態請求

        2. uWSGI:是對內的服務器,主要用來處理動態請求

        3. uwsgi:是一種web協議,接收到請求以後將包進行處理,處理成wsgi能夠接受的格式,併發給wsgi

        4. wsgi:是python專用的web協議,根據請求調用應用程序(django)的某個文件,某個文件的某個函數

        5. django:是真正幹活的,查詢數據等資源,把處理的結果再次返回給WSGI, WSGI 將返回值進行打包,打包成uwsgi可以接收的格式

        6. uwsgi接收wsgi發送的請求,並轉發給nginx,nginx最終將返回值返回給瀏覽器

六、Django+uwsgi方案:

      1. 沒有nginx而只有uwsgi的服務器,則是Internet請求直接由uwsgi處理,並反饋到web項目中。

      2. nginx能夠實現安全過濾,防DDOS等保護安全的操做,而且若是配置了多臺服務器,nginx能夠保證服務器的負載相對均衡。

      3. 而uwsgi則是一個web服務器,實現了WSGI協議(Web Server Gateway Interface),http協議等,它能夠接收和處理請求,發出響應等。
          因此只用uwsgi也是能夠的。

七、Nginx和uWSGI特色:

    1)nginx的做用

        1.反向代理,能夠攔截一些web攻擊,保護後端的web服務器

        2.負載均衡,根據輪詢算法,分配請求到多節點web服務器

        3.緩存靜態資源,加快訪問速度,釋放web服務器的內存佔用,專項專用

    2)uWSGI的適用

        1.單節點服務器的簡易部署

        2.輕量級,好部署

八、安裝uwsgi並使用uWSGI啓動服務:

[root@linux-node2 demo2]# vim /code/mmcsite/uwsgi.ini # uwsgi.ini文件 [uwsgi] socket = 0.0.0.0:3031 # 指定socket監聽的地址和端口 chdir = /code/mmcsite # 項目路徑 wsgi-file = /code/mmcsite/wsgi.py # django的wsgi文件路徑 processes = 5 # 啓動五個進程 threads = 30 # 每一個進程啓動30個線程 master = true daemonize = /code/mmcsite/uwsgi.log # 日誌存放路徑 module=mmcsite.wsgi # 使用mmcsite.wsgi模塊 pidfile = /code/mmcsite/uwsgi.pid # uwsgi啓動進程id存放路徑 chmod-socket=666 # socket權限 enable-threads = true                  # 容許用內嵌的語言啓動線程,這將容許你在app程序中產生一個子線程

九、啓動項目:

[root@linux-node1 demo2]# systemctl restart nginx # 開啓nginx [root@linux-node1 demo2]# uwsgi --ini uwsgi.ini # 啓動uwsgi的django項目 # http://192.168.56.11:8888/ 訪問項目
[root@linux-node1 demo2]# uwsgi --stop uwsgi.pid    # 關閉uwsgi
相關文章
相關標籤/搜索