本篇章主要講解uwsgi和nginx的做用,並利用二者對django項目進行部署css
1、概述python
在開發過程當中,咱們通常是在該項目的虛擬環境中啓用django自帶的web服務:python manage.py runserver 0.0.0.0:8000nginx
自帶的web服務僅僅是單線程運行,沒法處理較高的訪問數據git
項目須要部署最好仍是利用uwsgi搭建,它具備高性能,低內存,多app管理,多線程等功能,搭配nginx實現部署github
2、uwsgi和nginx的做用和區別web
參考博客:https://blog.csdn.net/dqchouyang/article/details/81639788django
1.nginx是對外的服務器,客戶請求url經過nginx處理(反向代理)服務器
2. uwsgi對內的服務器,主要處理靜態文件和動態請求
多線程
3.uwsgi處理動態請求能力高,但對於靜態請求(如static文件,css,js文件等)處理能力差app
3、uwsgi配置
3.一、安裝uwsgi服務
在確保該項目能夠跑動:python manage.py runserver 0.0.0.0:8000
uwsgi是python的一個模塊
pip install uwsgi
3.2 、相關配置
3.2.一、經過命令行啓動
假設項目自帶虛擬環境,須要到虛擬環境下啓動:
uwsgi --http 172.21.0.2:8000 --file teacher/wsgi.py --static-map=/static=static
--http 這個就和runserver同樣指定IP 端口
--file 這個文件就裏有一個反射,若是你在調用他的時候沒有指定Web Server就使用默認的
-- static 作一個映射,指定靜態文件
訪問:wget 192.168.31.123:8080
3.2.二、經過配置文件實現
目錄結構以下
本項目名爲:LibrarySystem 結構以下: ----web-item ---LibrarySystem --LibrarySystem -settings.py -wsgi.py --manage.py --static --venv ---script --uwsgi.ini
在某個目錄下建立配置文件 xxx.ini(最好在項目的同目錄下建立,便於管理)
注意點:在socket和http二者中,在單獨配置uwsgi只須要配置http,須要uwsgi+nginx使用須要配置socket
[uwsgi] # 項目目錄 chdir=web-item/LibrarySystem/ #指定虛擬環境目錄 #假設在不在虛擬環境下啓動uwsgi,須要配置虛擬環境目錄 home=web-item/LibrarySystem/venv # 指定項目的application module=LibrarySystem.wsgi:application # 指定sock的文件路徑 #socket=127.0.0.1:8001 #sock或http只能指定其中一個,其中在和nginx配合使用須要指定socket #須要指定的地址是內網地址eth0 http=172.21.0.2:8000 # 進程個數 workers=5 pidfile=web-item/script/uwsgi.pid #指定wsgi文件 wsgi-file=LibrarySystem/wsgi.py # 指定靜態文件 static-map=/static=web-item/LibrarySystem/static # 啓動uwsgi的用戶名和用戶組 uid=root gid=root # 啓用主進程 master=true # 自動移除unix Socket和pid文件當服務中止的時候 vacuum=true # 序列化接受的內容,若是可能的話 thunder-lock=true # 啓用主進程 master=true # 自動移除unix Socket和pid文件當服務中止的時候 vacuum=true # 序列化接受的內容,若是可能的話 thunder-lock=true # 啓用線程 enable-threads=true # 設置自中斷時間 harakiri=30 # 設置緩衝 post-buffering=4096 # 設置日誌目錄 daemonize=web-item/script/uwsgi.log
3.3.三、啓動uwsgi
在uwsgi.ini目錄下執行命令:
/usr/local/python3/bin/uwsgi --ini uwsgi.ini
3.3.四、Django項目中靜態文件的處理
將Django的靜態文件集中起來,Django爲此有專門的工具
如今Django的Settings文件中加上StATIC_ROOT,把靜態文件都集中到這個路徑下
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
執行命令
python3 ./manage.py collectstatic
3.3.5 訪問django項目
wget 172.21.0.2:8000
成功則實現uwsgi的部署,失敗則查看是否配置出錯或是否在虛擬環境下執行
3.3.6 管理uwsgi
執行: uwsgi --ini uwsgi.ini
中止(須要添加相關配置):
uwsgi --reload uwsgi/uwsgi.pid
查看狀態(須要添加相關配置):
uwsgi --connect-and-read uwsgi.status
中止方法二:
查看uwsgi的pid
ps aux | grep uwsgi
中止相關pid
kill -9 pid
4、nginx配置
1.安裝nginx
yum install uginx
2.準備工做
2.1 確保存在uwsgi_params
確保nginx.conf的同目錄下有uwsgi_params文件(/etc/nginx/conf/uwsgi_params),沒有的話根據連接獲取
2.2 nginx的默認配置文件目錄(nginx.conf)的路徑
nginx -t 默認顯示內容: nginx: the configuration file /etc/nginx/conf/nginx.conf syntax is ok nginx: configuration file /etc/nginx/conf/nginx.conf test is successful
裏面說明了nginx默認配置文件的路徑是:/etc/nginx/conf/nginx.conf;
3. 在項目下新建目錄nginx_cof(看你需求是否須要集中管理)
3.1 修改nginx配置
把/etc/nginx/nginx.cof複製到該目錄下並把相關內容做以下修改
server { listen 80; server_name localhost; charset utf-8; access_log 目錄/nginx_cof/nginx_access.log; # error_log 目錄/nginx_cof/nginx_error.log; client_max_body_size 75M; location /static { alias 你的項目路徑/static; } location / { include /etc/nginx/conf/uwsgi_params; uwsgi_pass 127.0.0.1:8001; #必須確保和uwsgi中的socket一致 } }
3.2 加載nginx文件
nginx -c /wwwroot/destiny/destiny.conf經過 nginx -t查看是否加載成功