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
Nginx+uWsgi生產部署Django