django+nginx+uwsgi 項目部署

  Django雖然自帶一個Server,但只能做爲開發時測試使用,咱們須要一個能夠穩定而持續的服務器對網站進行部署,好比Apache, Nginx, lighttpd等,本篇將利用nginx和uWSGI部署Django網站項目。html

前言

nginx簡介

  nginx是一個HTTP服務器,也是一個反向代理服務器,由基礎模塊、核心模塊、第三方模塊構成,與Apache相比更輕量級,佔用更少的內存及資源。前端

WSGI/uWSGI/uwsgi區別

WSGI(Python Web Server GateWay Interface): WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx)與應用服務器(如uWSGI服務器)通訊的一種規範。因爲WSGI的通用性,出現了獨立的WSGI程序,例如uWSGI和Apacke的mod_wsgi。python

uWSGI: 是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。用於接收前端服務器轉發的動態請求並處理後發給 web 應用程序。nginx

uwsgi: 是uWSGI服務器實現的獨有的協議。git

nginx/uWSGI/Django項目工做流程

  1. 用戶經過瀏覽器發出http請求到服務器。
  2. nginx負責接受外部http請求並進行解包,若請求是靜態文件則根據設置好的靜態文件路徑返回對應內容。若請求是動態內容則將請求交給uWSGI服務器(nginx和uWSGI使用端口或socket通訊)。
  3. uWSGI服務器收到請求後,根據wsgi協議解析並回調Django應用。
  4. Django應用則根據請求進行數據庫增刪查改和模版渲染等工做,而後再逆方向返回nginx。
  5. nginx將響應交付用戶瀏覽器。

服務器Django+uWSGI+nginx配置(上)

  前面4.1小結,咱們利用在/var/www/下git clone了一個空倉庫,假設名爲」com.test.blog「,其實是一個進行了git初始化的空文件夾。web

建立項目虛環境

$ sudo -s                       // 得到root權限 $ cd /var/www/com.test.blog     // 進入項目文件夾 $ virtualenv env --python=python2.7 \ --no-site-packages  // 建立名爲env的python空環境

  若是產生以下報錯,說明服務器語言未設置。數據庫

locale.Error: unsupported locale settingdjango

  則先執行vim

$ export LC_ALL=C

  後再次執行上述命令。瀏覽器

Django部分

安裝Django

  啓用env環境。

$ source env/bin/activate       // 啓用環境

  安裝支持python2.7的Django 1.11。

$ pip install Django==1.11
    $ django-admin --version

建立一個Django默認項目用於測試

$ django-admin startproject test_nginx
                    // 建立名爲「test_nginx」的Django項目

  Django會用模板建立一個名爲「test_nginx」的默認項目。

Django 測試項目

測試Django服務器

  利用Django自帶的測試服務器來直接處理客戶端的http訪問請求,測試Django可否正常工做。

Django Server

  注意,首先要修改settings.py配置文件,添加ALLOWED_HOSTS,不然會報錯。
  進入./test_nginx/test_nginx,利用vim修改settings.py中的「ALLOWED_HOSTS」。

...

        ALLOWED_HOSTS = ['*']   // 容許全部地址

    ...

  這樣能夠在本地直接利用服務器ip和端口訪問網頁了。
  
  運行Django Server(Ctrl + C 結束運行)。

$ pwd           // 當前路徑 /var/www/com.test.blog/test_nginx $ python manage.py runserver 0.0.0.0:8000
                    // 8000端口,啓用Django服務器

  本地瀏覽器輸入」服務器IP:8000」,顯示

Django welcome頁面

uWSGI部分

安裝uWSGI

  在env虛擬環境下使用pip安裝。

$ pip install uwsgi
    $ uwsgi --version       // 顯示uwsgi安裝版本

測試uWSGI服務器

  新建test.py文件,內容以下:

def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World from uWSGI"

 

  終端運行:

$ uwsgi --http :8000 --wsgi-file test.py
  • 1

  本地瀏覽器刷新頁面,顯示

uWSGI welcome頁面

uWSGI+Django測試

  利用uWSGI做爲服務器處理http請求,並經過wsgi傳遞給Django模塊。

uWSGI+Django
  終端運行:

$ pwd
        /var/www/com.test.blog/test_nginx
    $ uwsgi --http :8000 --module test_nginx.wsgi

  本地瀏覽器刷新頁面,顯示

Django welcome頁面

nginx部分

安裝nginx

$ sudo apt install nginx

nginx經常使用命令

啓動nginx服務器

$ sudo service nginx start

中止nginx服務器

$ sudo service nginx stop

查看nginx服務的狀態

$ sudo service nginx status

重啓nginx服務器

$ service nginx restart

測試nginx服務器狀態

  啓動nginx服務器後,本地瀏覽器輸入」服務器IP:80」,以下圖顯示說明nginx工做正常。
  
nginx welcome頁面

結語

  服務器端nginx,uWSGI和Django彼此之間已經能夠獨立工做,下半篇將修改配置文件,真正使nginx做爲Django網站項目的代理服務器。

參考文獻

  1. WSGI,uwsgi和uWSGI的區別
  2. 使用uWSGI和nginx來設置Django和你的web服務器
相關文章
相關標籤/搜索