Nginx+uWsgi生產部署Django


部署得過程很簡單,部署得核心在於,為什么要這樣做,每一個參數代表什么意思,最終的目的是得了解,一些基概念性的東西。

uWsgi簡介

說Uwsgi之前,先說一下Wsgi。

什么是Wsgi?  

WSGI: 是一種Web服務器網關接口,它是一個Web服務器(如Nginx) 與應用服務器(如uWSGI服務器)通信的一種規范。

uWSGI是一個Web服務器,它實現了WSGI協議,uwsgi,http等協議,Nginx中HttpUwsgiModul的作用是與uWSGI服務器進行交換

那么那些框架自帶了Wsgi Server呢?

很多框架都自帶了WSGI Server, 比如: Flask、 Webpy、 Dajngo、 CherryPy等等。當然性能都不好,自帶的Web Server更多的是本地測試用途,發布時則使用生產環境的WSGI Server或者是聯合Nginx做Uwsgi。

簡單的來講Wsgi就是,標准,

比如:  一個德國人跟一個法國人聊天,他們要想聊天可以通過一個標准的國際語言: 英語來進行交互。

要注意 WSGI/uWSGI/uwsgi 這三個概念的區分。

WSGI是一種通訊協議

uwsgi同WSGI一樣是一種通信協議

而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。

為什么uWSGI還需要nginx,應為Nginx具備了優秀的靜態內容處理能力,然后將動態內容轉發給uWSGI服務器,這樣就實現了,動靜分離。 也可以更好的達到客戶端的效果。

 

常見的Python Http服務器

早期的Web Server

早期的時候,只能訪問靜態的內容, 在那時Web開發還很簡單,開發這經常會去操作Web服務器,並且寫一些HTML頁面放到服務器指定的文件夾下(www)下,這些Html頁面,就在瀏覽器請求頁面時使用,

隨着時間的發展,問題就出現了,你只能獲取到靜態的內容,如果想訪問者看到有多少其他訪問者訪問了這個網站,或者想讓訪問者提交一些包含郵箱姓名,地址的表單,這個就比較麻煩了。

中期的WebServer

到了中期,就可以訪問一些動態的數據了,  當瀏覽器訪問Webserver的時候, 就可以調用后台的一些數據了, 寫小程序的人很多,各種人都有,然后統一了一個標准,CGI,隨着時間的演變,到了05年左右,進入了Web應用時代,

現在的Web Server

實際部署過程

安裝nginx

yum install nginx

Nginx安裝完成之后安裝uWsgi。

pip install uwsgi

以上兩項安裝完成之后,現在開始配置uwsgi,  進入項目的根目錄,注意:項目不要放在root目錄下。 

執行一下命令,來測試項目是否可以被uwsgi啟動。

uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static

192.168.31.123: 你的ip地址  

啟動成功之后

進入項目跟目錄之后,在同級目錄創建一個空的文件夾:

mkdir script

創建完成之后,在目錄中創建uwsgi.ini文件。

vim uwsgi.ini

 創建ini文件完成之后,將一下內容放進文件夾中。

   [uwsgi]
   # 項目目錄
    chdir=/opt/project_teacher/teacher/
    # 啟動uwsgi的用戶名和用戶組
    uid=root
    gid=root
    # 指定項目的application
    module=teacher.wsgi:application
    # 指定sock的文件路徑
    socket=/opt/project_teacher/script/uwsgi.sock      # sock文件是由uwsgi.ini文件啟動之后自動生成
    # 啟用主進程
    master=true
    # 進程個數
    workers=5
    pidfile=/opt/project_teacher/script/uwsgi.pid
    # 自動移除unix Socket和pid文件當服務停止的時候
    vacuum=true
    # 序列化接受的內容,如果可能的話
    thunder-lock=true
    # 啟用線程
    enable-threads=true
    # 設置自中斷時間
    harakiri=30
    # 設置緩沖
    post-buffering=4096
    # 設置日志目錄
    daemonize=/opt/project_teacher/script/uwsgi.log 

以上配置完成之后,啟動uwsgi.ini文件,並查看進程。

uwsgi到此為止,那么恭喜你,uwsgi已經配置完成了, 現在開始配置nginx, 進入以下目錄修改default.conf文件:

cd /etc/nginx/conf.d/


vim default.conf

進入文件之后講一下,代碼,貼近文件中:

    server {
                    listen 80;
                    server_name 10.129.205.183 ;       # 域名
                    access_log  /var/log/nginx/access.log  main;
                    charset  utf-8;
                    gzip on;
                    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;

                    error_page  404           /404.html;
                    error_page   500 502 503 504  /50x.html;
                    # 指定項目路徑uwsgi
                    location / {
                        include uwsgi_params;
                        uwsgi_connect_timeout 30;
                        uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock;
                    }
                    # 指定靜態文件路徑
                    location /static/ {
                        alias  /opt/project_teacher/teacher/static/;
                        index  index.html index.htm;
                    }

    }

啟動ngxin

啟動nginx之后,在啟動uwsgi,此時你打開瀏覽器,輸入你設置的server_name,是不是就可以訪問出你的項目了,

項目截圖,最近本人想搭建自己的一個簡單的博客,基本頁面,和功能已經完成,后期還會加一些,高級一點的東西,畢竟現在里邊還什me都沒有,博客截圖如下:

上傳博客內容,是集成百度的,Ueditor, 之前是在Django的admin中來集成的Django-Ueditor, 想了想,還是自己寫了一個添加文章的地方。  

git源碼地址: 

https://github.com/Mrwyc/DjangoBlog

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM