利用 Nginx 與 uwsgi 搭建 Django 框架WEB 應用

本篇所使用的環境為 Ubuntu 16.04 LTS 云提供商為 cloud.google.com

1.生命周期

首先理解一下整個 WEB 應用的

WEB 應用的生命周期
WEB 應用的生命周期
1.Ubuntu 為操作系統運行環境
2.高性能 Nginx
3.虛擬的 Python 運行環境(原因為這樣不會影響系統內其他服務)
4.是基于 Django 封裝的更高的WEB 框架
5.uWSGI 用來橋接 Nginx 與 Django 的通道
6.配置 Nginx 
7.配置 uWSGI

2.配置服務器( Ubuntu 16.04 LTS)

如果不差錢,隨意選擇一個運營商即可,如果只是想體會一下,推薦使用 Google Cloud ,免費,且擁有臺灣節點,對大陸友好度很高,缺點是申請需要翻墻

1.準備純凈的系統(建議初始化的時候配置 SSH 密鑰會很方便)
2.利用 SSH 連接服務器,更新必要的系統軟件(可選,建議)
#獲取更新列表
sudo apt-get update

#更新系統
sudo apt-get dist-upgrade
  1. Tips:如果覺得主機名很長且名字不好看可用 hostname 主機名 來修改, 再輸入su 刷新一下即可看到修改后的主機名
  2. 如果登錄用戶為非root用戶,可通過 sudo -i 來進行提權操作
3.安裝 Nginx

1.安裝

#安裝 Nginx
apt install Nginx

2.測試
測試 Nginx 服務器可用性
用瀏覽器打開服務器 IP 地址就可以看到 Nginx 歡迎頁面即表示安裝成功

Tips:
Nginx 的啟動/停止/重啟 命令

/etc/init.d/nginx start(& stop/ restart)
4.虛擬Python 環境與系統的關系
2
2
5.安裝虛擬環境
#如果想使用 Python3.x 的環境 來部署你的 WEB 應用,可將下面的pip 更改為 pip3

#安裝虛擬環境
pip install virtualenv

#如果出現以下錯誤,請嘗試使用 export LC_ALL=C 這個命令來解決此問題
#root@instance-5:~# pip3 install virtualenv
#Traceback (most recent call last):
 # File "/usr/bin/pip3", line 11, in <module>
#    sys.exit(main())
#  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 215, in main
#    locale.setlocale(locale.LC_ALL, '')
#  File "/usr/lib/python3.5/locale.py", line 594, in setlocale
#    return _setlocale(category, locale)
#locale.Error: unsupported locale setting


#如果提示 pip 版本過低,可通過下面的命令來升級
pip install --upgrade pip

#創建虛擬環境(選擇合適的目錄,本文選用的目錄為 /var/www/
#前進到相關目錄
cd /var/www

#創建虛擬環境
virtualenv env27

#進入虛擬環境
source env27/bin/activate

#如果你的 終端命令前顯示 (env27) root@name:/var/www# 就代表你已經進入虛擬環境

#查看當前 Python 版本
Python -V

6.安裝 Django 與 Mezzanine
#安裝 Django
pip install Django

#安裝 Mezzanine (直接安裝這個也可以,該框架依賴 Django, 會自動將 安裝Django)
pip install Mezzanine

#創建項目
mezzanine-project mySite

#前進到 mySite
cd mySite

#目錄下應該會有以下文件
deploy (部署相關模版)
fabfile.py (不知道有啥用,沒細看)
__init__.py 
mySite  (網站目錄)
manage.py   (管理文件)
requirement.txt (依賴)

#創建數據庫
python manage.py createdb

#根據提示輸入相關信息即可

#收集相關靜態資源
python manage.py collectstatic

#提示后輸入 YES 即可

#測試當前項目
python manage.py runserver 0.0.0.0:8000

打開瀏覽器測試的時候你會發現這個錯誤


原因是我們需要更改一下配置文件的 ALLOWED_HOSTS

#Ctrl + C 停止你的服務

#編輯文件
vi mySite/setting.py
找到 ALLOWED_HOSTS 字段
#修改為
ALLOWED_HOSTS = ["這里填寫你的服務器 IP 地址"]
#保存即可

#測試當前項目
python manage.py runserver 0.0.0.0:8000

這時用瀏覽器打開 你的服務器IP:8000 就會看到項目已經跑起來

到這里說明虛擬環境內部的項目配置問題已經搞定了,接下來要配置 Nginx 與 uwsgi 相關文件

7.安裝 uwsgi
#安裝 uwsgi
pip install uswgi

#查看當前所在路徑,是否為 /var/www/mySite
pwd

#通過 uwsgi 來跑起來網站
uwsgi --http :8000 --module mySite.uwsgi.ini

打開網站以后會發現和直接 runserver 方式有些不同,沒有加載出相關 css 樣式,不用擔心,只是靜態文件沒有配置,接下來會配置,跟著教程繼續往下走吧

8.配置 Nginx 與 uwsgi 聯系

先來張介紹圖


提供三個必要文件

#Nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    #監聽端口
    listen 80;
    #網站的域名,
    server_name localhost;
    #符號表
    charset utf-8;
    # 最大上傳文件
    client_max_body_size 75M;
    #靜態文件路徑
    location /static {
        alias /var/www/mySite/static;
    }
    #網站路徑
    location / {
        uwsgi_pass django;
        include /var/www/uwsgi_params;
    }
}
# uwsgi.ini

[uwsgi]
#網站目錄
chdir = /var/www/mySite
#配置文件
module =  mySite.wsgi
#家目錄
home = /var/www/env27
#不知道干啥用的
master = true
# 開十個線程
processes = 10
# 端口與上個 Nginx 的配置文件相同
socket = :8001
chmod-socket = 666
vacuum = true
#uwsgi_params 
#nginx 與 uswgi 的對應集合
    
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

開始建立 Nginx 與網站目錄做關聯

cd /etc/nginx/sites-enabled

#會發現有一個 default 軟連接到 /etc/nginx/sites-available/default
ll default 

#先刪除 
rm -rf default

#建立軟連接
ln -s /var/www/nginx.conf mySite

#重新啟動 Nginx 服務
/etc/init.d/nginx restart

#提示 ok 代表已啟動成功

#前進到網站目錄下
cd /var/www/

#再次啟動 uwsgi
uwsgi --ini uwsgi.init

到目前為止 網站已經可以部署了.

接下來配置 uswgi 自啟動(不知道是不是正統的做法,但是可以解決此問題)

接下來的命令要退出虛擬環境

#真實環境要安裝 uwsgi(依舊為 Python3要將 pip 更換為 pip3)
pip install uwsgi

#編輯啟動文件
vim /etc/rc.local

#添加以下語句
/usr/local/bin/uwsgi --ini /var/www/uwsgi.ini

#重啟服務器就可以打開域名或者 IP 地址看到網站已經正常工作了

'''
2017年11月27日更新
部署改為supervisor

'''

參考文獻:
uWSGI官方文檔
自由小徑
pip-install-locale-error-unsupported-locale-setting

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容