在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項目 |
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就已經搭建完成了