1. 程式人生 > >Nginx+uWsgi生產部署Django

Nginx+uWsgi生產部署Django

web服務器 上傳 完成 分享圖片 ram onf utf targe 還需

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

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

Nginx+uWsgi生產部署Django