Django雖然自帶一個Server,但只能做爲開發時測試使用,咱們須要一個能夠穩定而持續的服務器對網站進行部署,好比Apache, Nginx, lighttpd等,本篇將利用nginx和uWSGI部署Django網站項目。html
nginx是一個HTTP服務器,也是一個反向代理服務器,由基礎模塊、核心模塊、第三方模塊構成,與Apache相比更輕量級,佔用更少的內存及資源。前端
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
前面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
後再次執行上述命令。瀏覽器
啓用env環境。
$ source env/bin/activate // 啓用環境
安裝支持python2.7的Django 1.11。
$ pip install Django==1.11 $ django-admin --version
$ django-admin startproject test_nginx // 建立名爲「test_nginx」的Django項目
Django會用模板建立一個名爲「test_nginx」的默認項目。
利用Django自帶的測試服務器來直接處理客戶端的http訪問請求,測試Django可否正常工做。
注意,首先要修改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」,顯示
在env虛擬環境下使用pip安裝。
$ pip install uwsgi $ uwsgi --version // 顯示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
本地瀏覽器刷新頁面,顯示
利用uWSGI做爲服務器處理http請求,並經過wsgi傳遞給Django模塊。
終端運行:
$ pwd /var/www/com.test.blog/test_nginx $ uwsgi --http :8000 --module test_nginx.wsgi
本地瀏覽器刷新頁面,顯示
$ sudo apt install nginx
啓動nginx服務器
$ sudo service nginx start
中止nginx服務器
$ sudo service nginx stop
查看nginx服務的狀態
$ sudo service nginx status
重啓nginx服務器
$ service nginx restart
啓動nginx服務器後,本地瀏覽器輸入」服務器IP:80」,以下圖顯示說明nginx工做正常。
服務器端nginx,uWSGI和Django彼此之間已經能夠獨立工做,下半篇將修改配置文件,真正使nginx做爲Django網站項目的代理服務器。