本篇所使用的環境為 Ubuntu 16.04 LTS 云提供商為 cloud.google.com
1.生命周期
首先理解一下整個 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
- Tips:如果覺得主機名很長且名字不好看可用
hostname 主機名
來修改, 再輸入su
刷新一下即可看到修改后的主機名 - 如果登錄用戶為非
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
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