當咱們在用django開發的web項目時,開發測試過程當中用到的是django自帶的測試服務器,因爲其安全及穩定等性能方面的侷限性,django官方並不建議將測試服務器用在實際生產。前端
nginx+uwsgi+django是咱們經常使用的django部署方式。nginx做爲最前端的服務器,他負責接收全部的客戶端請求,對於請求的靜態文件,由nginx服務器本身完成,由於它具備很好處理靜態文件的能力,性能進行過優化,支持高併發量;uWSGI服務器做爲支持服務器,是用來服務nginx的,nginx將請求的動態文件交給uWSGI進行處理。uWSGI實現了uwsgi、wsgi和http協議,uwsgi協議是uWSGI自定義的協議,定義的是框架(django)和服務器對接的接口。python
下面以阿里雲ubuntu部署爲例:nginx
1、 安裝python虛擬環境及項目所需python包:web
1.安裝virtualenv和virtualenvwrapperdjango
pip install virtualenvubuntu
pip install virtualenvwrappervim
2.建立虛擬環境安全
命令: mkvirtualenv [env_name]服務器
$: mkvirtualenv -p python3 django_env_py3 (可指定用python3)併發
虛擬環境相關命令: workon 進入虛擬環境 deactivate 退出虛擬環境 rmvirtualenv 刪除虛擬環境
3. 安裝項目所需python包:
按包名單個安裝: $: pip install 包名
批量安裝:
$: pip freeze > env_requirement.txt
$: pip install -r renv_requirement.txt
2、uWSGI服務器部署:
已經安裝好uwsgi後(pip install uwsgi),只須要增長配置, 告訴uWSGI-server的框架入口函數在哪,就能讓django和uWSGI服務器對接上。
1. 在django項目的setting.py文件的同級目錄下,增長一個配置文件 uwsgi.ini
2. 對配置文件進行配置
[uwsgi]
# 配置服務器的監聽ip和端口,讓uWSGI做爲nginx的支持服務器的話,設置socke就行;若是要讓uWSGI做爲單獨的web-server,用http
# http = 127.0.0.1:3309
socket = 127.0.0.1:3309
# 配置項目目錄(此處設置爲項目的根目錄)
chdir = /home/python/Desktop/my_pro
# 配置入口模塊 (django的入口函數的模塊,即setting同級目錄下的wsgi.py)
wsgi-file = my_pro/wsgi.py
# 開啓master, 將會多開一個管理進程, 管理其餘服務進程
master = True
# 服務器開啓的進程數量
processes = 2
# 以守護進程方式提供服, 輸出信息將會打印到log中
daemonize = wsgi.log
# 服務器進程開啓的線程數量
threads = 4
# 退出的時候清空環境變量
vacuum = true
# 進程pid
pidfile = uwsgi.pid
# 配uWSGI搜索靜態文件目錄(及django項目下咱們存放static文件的目錄,用uWSGI做爲單獨服務器時才須要設置,此時咱們是用nginx處理靜態文件)
# check-static = /home/python/Desktop/ttsx
3. 啓動uWSGI服務器
在配置文件uwsgi.ini所在目錄下,用咱們剛纔配置好的配置文件啓動uWSGI:
$: uwsgi --ini uwsgi.ini
3、nginx服務器部署:
uWSGI服務器已經部署好了,咱們只須要安裝並啓動nginx,而後將nginx服務器的動態文件請求轉發給uWSGI服務器,將靜態文件請求交給本身來處理。
1. 安裝nginx:
需下載準備好nginx的包文件, 以及nginx安裝依賴庫的包文件OPENSSL:
a. 首先安裝nginx所依賴的庫: PCRE
$: sudo apt-get install libpcre3 libpcre3-dev
b. 安裝OPENSSL庫,下載地址https://www.openssl.org/source/
下載將其解壓文件放到/usr/local/lib/openssl-1.0.2l目錄下
$: /usr/local/lib/openssl-1.0.2l
c. 在這裏咱們使用編譯的安裝nginx,指定將nginx的安裝到/ust/opt/目錄下。
解壓包文件,進入nginx包文件目錄:
配置:
$: ./configure --prefix=/opt/nginx --with-openssl=/usr/local/lib/openssl-1.0.21
(--prefix指定nginx的安裝目錄, --with-openssl指定咱們要使用的openssl版本,也就是咱們剛纔安裝的路徑)
編譯: $: make
安裝: $: make install
d. 啓動nginx:
$: cd /opt/nginx/sbin/
$: ./nginx
相關命令:./nginx -s stop 強制中止 ./nginx -s quit 處理完當前全部鏈接後中止
./nginx -s reload 從新加載配置文件進行重啓 查看進程: ps -ajx | grep nginx
2. 配置nginx:
1. 修改nginx的配置文件
$: vim /opt/nginx/conf/nginx.conf
修改其收到請求處理的兩條配置:
location /
{
include uwsgi_params; # 設置將全部請求轉發給uwsgi服務器處理
uwsgi_pass: 127.0.0.1:3309; # 指定uwsgi服務器url
}
location /static
{
alias /hom/xxx/xxx/pro_name/static/; # 設置將/static的靜態請求交給nginx,並指定靜態文件的目錄
}
4、admin後臺管理界面靜態文件配置:
以上,nginx+uWSGI+django已經能夠正常運行了,可是登錄django的admin後臺管理界面,網頁的靜態文件沒法找到。
那是由於咱們在前面設置nginx的靜態文件目錄時,static目錄下通常只是咱們項目應用開發中本身的靜態文件,
可是django後臺admin用到的靜態文件並不在這,因此找不到。因此咱們須要把全部的靜態文件打包放在一個目錄下。
1. 在項目的根目錄下新建一個目錄,能夠取名爲all_static。
2. 在setting.py文件下增長一行配置,指定全部靜態文件的根目錄:
STATIC_ROOT = os.path.join(BASE_DIR, 'all_static')
3.執行django管理器命令,會自動將咱們項目全部的靜態文件放到上面設置的靜態文件根目錄下:
./managy.pu collectstatic