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

  在django框架中,用runserver啓動的服務只適合於測試環境。在正式的生產環境中咱們須要考慮到靜態文件的處理,安全性、效率等問題,本文以uwsgi+Nginx+django爲例和你們分享,DJango生產環境的一種部署方式。前端

   1、基本原理:python

  nginx做爲服務器最前端,它將接收WEB的全部請求,統一管理請求。nginx把全部靜態請求本身來處理(這是NGINX的強項)。而後,NGINX將全部非靜態請求經過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。nginx

  uwsgi的做用就相似一個橋接器。起到橋樑的做用。web

  準備和環境:django

1. 本次部署環境使用的Centos7,python3和pip3環境
2. 本地可使用runserver正常啓動django項目

2、安裝uwsgi:

  uwsgi是python的一個模塊,安裝uwsgi只需簡單的pip命令就能夠了瀏覽器

    pip3 install uwsgi安全

  uwsgi 有兩種啓動django的方式:1.用命令直接啓動,2.用配置文件啓動服務器

  1.用命令直接啓動框架

    uwsgi --http :8090 --wsgi-file future/wsgi.py --chdir /data/operational_background/background/future/socket

    參數詳解:

      1. --http: 和runserver相似能夠指定監聽端口

      2. --wsgi-file:  指定uwsgi的加載的文件

      3. --chdir: 指定uwsgi的運行目錄

    當訪問服務器的8090端口,返回以下結果時表示已經啓動成功了。下圖由於將django的DEBUG 設置成了 False纔出現的結果,若是出現外網端IP沒法訪問該端口的狀況,請將django中的settings.py文件中的ALLOWED_HOSTS = [] 改爲ALLOWED_HOSTS = ['*']


    

  2.手動添加配置文件啓動django:

    咱們能夠在django的同級目錄上新建script目錄,在script目錄下面新建uwsgi.ini文件

    

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# uwsig使用配置文件啓動
[uwsgi]
# 項目目錄
chdir=/data/operational_background/background/future
# 指定項目的加載文件
module=future.wsgi
# 指定socket的監聽端口    
socket=127.0.0.1:8100
# 設置進程個數       
processes = 2
pidfile=/data/operational_background/log/uwsgi.pid
# 指定IP端口(在使用nginx作代理時要註銷)       
http=192.168.2.108:8090
# 啓動uwsgi的用戶名和用戶組
uid=www
gid=www
# 啓用主進程
master= true
# 自動移除unix Socket和pid文件當服務中止的時候
vacuum= true
#最大響應數
max-requests = 5000
# 設置日誌目錄
daemonize=/data/operational_background/log/uwsgi.log
#uwsgi自動重載
py-autoreload=1

     使用命令/usr/local/python3/bin/uwsgi --ini uwsgi.ini。

    當頁面能夠正常訪問則說明啓動完成,用命令啓停服務並非很方便,這時咱們能夠編寫配置文件用以控制。在/etc/init.d/目錄下新建uwsgi文件,文件具體信息以下:

#! /bin/sh


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="uwsgi daemon"
NAME=uwsgi
DAEMON=/usr/local/python3/bin/uwsgi
CONFIGFILE=/data/operational_background/background/script/uwsgi.ini
PIDFILE=/data/operational_background/log/uwsgi.pid
SCRIPTNAME=/etc/init.d/$NAME


set -e
[ -x "$DAEMON" ] || exit 0

do_start() {
    $DAEMON $CONFIGFILE || echo -n "uwsgi already running"
}

do_stop() {
    $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
    rm -f $PIDFILE
    echo "$DAEMON STOPED."
}

do_reload() {
    $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
}

do_status() {
    ps aux|grep $DAEMON
}

case "$1" in
 status)
    echo -en "Status $NAME: \n"
    do_status
 ;;
 start)
    echo -en "Starting $NAME: \n"
    do_start
 ;;
 stop)
    echo -en "Stopping $NAME: \n"
    do_stop
 ;;
 reload|graceful)
    echo -en "Reloading $NAME: \n"
    do_reload
 ;;
 *)
    echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
    exit 3
 ;;
esac

exit 0

     這時咱們即可以使用 service uwsgi start/stop 來啓停uwsgi了 (注:在/etc/init.d/uwsgi須要可自行權限

3、nginx + uwsgi+django 相結合:

  1.安裝nginx

1
yum -y install nginx

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

1
/etc/init.d/nginx start

  

 打開瀏覽器,訪問115.159.40.122出現以下頁面即表明nginx安裝完成且能夠正常啓動

  2.添加nginx虛擬主機 

     1.建立配置文件,nginx的默認配置目錄爲/etc/nginx/conf.d

1
cd /etc/nginx/conf.d/

  

  建立website.conf文件,website的具體信息以下:

    

server {
        listen 80;
        server_name operation.liumang.xyz;
        proxy_buffer_size 64k;
        proxy_buffers   32 32k;
        proxy_busy_buffers_size 128k;

        location /static {
            alias /data/operational_background/background/future/static;  #設置django的靜態文件路徑
        }
        location /static/admin {
          alias /usr/local/python3/lib/python3.6/site-packages/django/contrib/admin/static/admin; #設置django、admin的靜態文件路徑
        }
        location / {
                include uwsgi_params;#導入一個nginx的模塊,用來處理與uwsgi通信
                uwsgi_connect_timeout 30; # 設置鏈接uWSGI超時時間
                uwsgi_pass 127.0.0.1:8100;#指定uwsgi的sock,將全部請求都交給他處理
        }
}

    重啓nginx,經過域名operation.liumang.xyz能夠訪問到django中的內容了,這樣咱們的nginx + uwsgi+django就已經搭建完成了

相關文章
相關標籤/搜索