1. 程式人生 > >django項目的生產環境部署,利用nginx+uwsgi

django項目的生產環境部署,利用nginx+uwsgi

python linux下 light location 準備 class thunder 連接 thread

1.壞境準備

  1. centos6.5
  2. django項目
  3. python壞境(python3.6,)
  4. 所需的各種模塊(django,uwsgi,sqlite3)具體看壞境

我的測試django項目的數據庫用的是sqlite,這裏只是做部署,

重點是nginx的關於Django項目+uwsgi配置文件

本次的項目:teacher.zip

安裝各種壞境

1.安裝sqlite3

https://sqlite.org/2017/sqlite-autoconf-3180000.tar.gz

tar sqlite-autoconf-3180000.tar.gz 

cd sqlite-autoconf-3180000 

./configure --prefix=/usr/local/sqlite3 && make && make install

export LD_LIBRARY_PATH=/usr/local/lib

  

2.安裝python3.6

安裝Python依賴包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

linux下載python包
wget  https://www.python.org/downloads/release/python-361/


解壓和安裝軟件包
tar -xzvf /opt/Python-3.6.1.tgz -C /usr/local/src/  # src目錄是存放源碼的目錄解壓到src目錄
cd /usr/local/src/Python-3.6.1
./configure --prefix=/usr/local/python3
make && make install


添加環境變量
cd /etc/profile.d/
新建一個文件python3.sh內容如下
export PATH="$PATH:/usr/local/python3/bin"
source ../profile  # 重載文件,使其生效
echo $PATH  # 查看當前環境變量是否添加

  

安裝django和uwsgi模塊

pip3 install -i http://pypi.douban.com/simple/   django   --trusted-host pypi.douban.com
pip3 install -i http://pypi.douban.com/simple/   uwsgi   --trusted-host pypi.douban.com
默認的是用的國外的pip源比較慢,這裏指定用豆瓣源

  

2.基於django和uwsgi實現訪問請求

在opt下面新建一個目錄,存放django項目名字叫django-project

技術分享

把django項目(teacher.zip,記得解壓)上傳到/opt/django-project下面

使用uwsgi命令啟動項目

進入的django項目裏面
cd /opt/django-project/teacher/

命令測試啟動
uwsgi --http 192.168.14.41:8080 --file teacher/wsgi.py --static-map=/static=static

  

參數說明:

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

效果如下:

技術分享

使用配置文件啟動django項目

在存放django項目同級目錄創建一個script目錄,用來存發uwsgi配置文件

技術分享

創建uwsgi.ini文件,內容如下:

# uwsig使用配置文件啟動
[uwsgi]
# 項目目錄
chdir=/opt/django-project/teacher/
# 指定項目的application
module=teacher.wsgi:application
# 指定sock的文件路徑
socket=/opt/django-project/script/uwsgi.sock
# 進程個數
workers=5
pidfile=/opt/django-project/script/uwsgi.pid
# 指定IP端口
http=192.168.14.41:8080
# 指定靜態文件
static-map=/static=/opt/django-project/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/django-project/script/uwsgi.log

啟動項目:

uwsgi --ini /opt/django-project/script/uwsgi.ini

  

技術分享

再次訪問:

技術分享

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

3.利用nginx+uwsgi來實現動靜分離請求

安裝nginx就不用說了

在nginx的/etc/nginx/conf.d目錄下新建一個啟動關於配置文件teacher.conf,內容如下:

技術分享

server { # 這個server標識我要配置了
listen 80; # 我要監聽那個端口
server_name 192.168.14.41 ; # 你訪問的路徑前面的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/django-project/script/uwsgi.sock; # 指定uwsgi的sock文件所有動態請求就會直接丟給他
}

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

  

重啟nginx,再次訪問

技術分享

uwsgi和nginx都要啟動

django項目的生產環境部署,利用nginx+uwsgi