Django + Uwsgi + Nginx 的生產環境部署


使用runserver可以使我們的django項目很便捷的在本地運行起來,但這只能在局域網內訪問,如果在生產環境部署django,就要多考慮一些問題了。比如靜態文件處理,安全,效率等等,本篇文章總結歸納了一下基於uwsgi+Nginx下django項目生產環境的部署

准備條件:

1.確保有一個能夠用runserver正常啟動的django項目
2.項目已上傳到linux 
3.linux上已部署好python環境,且已安裝好項目所需的模塊

安裝uwsgi

  uwsgi是python的一個模塊,安裝uwsgi只需簡單的pip命令就可以了

pip3 install uwsgi

基於uwsgi+django的實現

 1.使用命令啟動uwsgi

  第一步:進入django項目

  第二步:命令測試啟動

uwsgi --http 192.168.31.123:8080 --file teacher/wsgi.py --static-map=/static=static

  

  參數說明:

--http 這個就和runserver一樣指定IP 端口
--file 這個文件就里有一個反射,如果你在調用他的時候沒有指定Web Server就使用默認的
-- static 做一個映射,指定靜態文件

  此時,訪問http://192.168.2.108:8080/,如圖所示,表示項目啟動成功

2.使用uwsgi配置文件啟動django項目

第一步:在django項目同級目錄創建script目錄,用於存放配置腳本等等

第二步:進入/script目錄,創建一個uwsgi.ini文件

  編輯uwsgi.ini文件內容如下:

# uwsig使用配置文件啟動
[uwsgi]
# 項目目錄
chdir=/opt/proj/teacher/
# 指定項目的application
module=teacher.wsgi:application
# 指定sock的文件路徑        
socket=/opt/proj/script/uwsgi.sock
# 進程個數        
workers=5
pidfile=/opt/proj/script/uwsgi.pid
# 指定IP端口        
http=192.168.2.108:8080
# 指定靜態文件
static-map=/static=/opt/proj/teacher/static
# 啟動uwsgi的用戶名和用戶組
uid=root
gid=root
# 啟用主進程
master=true
# 自動移除unix Socket和pid文件當服務停止的時候
vacuum=true
# 序列化接受的內容,如果可能的話
thunder-lock=true
# 啟用線程
enable-threads=true
# 設置自中斷時間
harakiri=30
# 設置緩沖
post-buffering=4096
# 設置日志目錄
daemonize=/opt/proj/script/uwsgi.log

  啟動項目:

  訪問192.168.2.108:8080,啟動成功

 

 至此,uwsgi+django就完美結合了,但是,光有uwsgi還不夠,uwsgi處理動態請求能力高,但對於靜態請求(如static文件,css,js文件等)處理能力差,此時就要結合nginx一起使用

安裝nginx

第一步:配置yum源

vim /etc/yum.repos.d/nginx.repo

 文件內容如下,wq保存退出

第二步:安裝nginx

yum -y install nginx

   測試是否安裝完成,命令啟動nginx

/etc/init.d/nginx start

  

 打開瀏覽器,訪問192.168.2.108出現如下頁面即代表nginx安裝完成且可以正常啟動

第三步:Django + Uwsgi + Nginx

   首先創建配置文件,nginx的默認配置目錄為/etc/nginx/conf.d

cd /etc/nginx/conf.d/

  

  創建teacher.conf文件

配置內容如下:

server { # 這個server標識我要配置了
listen 80; # 我要監聽那個端口
server_name 192.168.2.108 ; # 你訪問的路徑前面的url名稱
access_log /var/log/nginx/access.log main; # Nginx日志配置
charset utf-8; # Nginx編碼
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持壓縮的類型

error_page 404 /404.html; # 錯誤頁面
error_page 500 502 503 504 /50x.html; # 錯誤頁面

# 指定項目路徑uwsgi
location / { # 這個location就和咱們Django的url(r'^admin/', admin.site.urls),
include uwsgi_params; # 導入一個Nginx模塊他是用來和uWSGI進行通訊的
uwsgi_connect_timeout 30; # 設置連接uWSGI超時時間
uwsgi_pass unix:/opt/proj/script/uwsgi.sock; # 指定uwsgi的sock文件所有動態請求就會直接丟給他
}

# 指定靜態文件路徑
location /static/ {
alias /opt/proj/teacher/static/;
index index.html index.htm;
}

}

 最后一步,重啟nginx

/etc/init.d/nginx restart

 

  瀏覽器訪問192.168.2.108,出現如下頁面表示啟動成功

  nginx相關命令

	# 啟動Nginx通過Nginx訪問
		/etc/init.d/nginx start
		/etc/init.d/nginx stop

		# 這里有個命令configtest,Nginx配置是重啟生效的,如果你修改完了,不知道對    不對又擔心影響其他人可以使用它測試
		/etc/init.d/nginx configtest

		# 如果是生產環境的話Nginx正在運行,就不要直接stop start 或者 restart  直接reload就行了
		# 對線上影響最低
		/etc/init.d/nginx reload  

  

   至此,Django + Uwsgi + Nginx 的生產環境部署就完成了

 

 

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM