django+uwsgi+nginx部署網站

django+uwsgi+nginx部署網站


靜態:nginx直接處理
動態:wsgi或者uwsgi給python處理

uwsgi

web協議,發佈python網站。
uwsgi是服務器和服務端應⽤程序的通信協議,規定了怎麼把請求轉發給應⽤程序和返回
uWSGI實現WSGI協議(應用程序網關接口)

安裝uwsgi

pip3 install uwsgi

安裝報錯:

 In file included from plugins/python/pyutils.c:1:0:
    plugins/python/uwsgi_python.h:2:20: 致命錯誤:Python.h:沒有那個文件或目錄
     #include <Python.h>

安裝python-devel 如果是python3則安裝python3-devel
yum install python3-devel -y

配置uwsgi

mkdir /etc/uwsgi
vim /etc/uwsgi/uwsgi.ini  

配置信息如下

[uwsgi]
uid = root
gid = root
socket = 127.0.0.1:9090
master = true //啓動主進程
vhost = true //多站模式
no-site = true //多站模式時不設置⼊⼝模塊和⽂件
workers = 2 //⼦進程數
reload-mercy = 10 //平滑的重啓
vacuum = true //退出、重啓時清理⽂件
max-requests = 1000 //開啓10000個進程後, ⾃動respawn下
limit-as = 512 // 將進程的總內存量控制在512M 
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid //pid⽂件,⽤於下⾯的腳本啓動、停⽌該進程
daemonize = /var/log/uwsgi9090.log  
pythonpath = /root/web/lib/python3.6/site-packages/

啓動uwsgi

uwsgi --ini /etc/uwsgi/uwsgi.ini

關閉uwsgi

cat /var/run/uwsgi9090.pid   查看uwsgi的pid
kill -9 101445  殺掉uwsgi

編寫uwsgi啓動腳本

設置uwsgi服務文件,讓uwsgi歸systemctl管
創建腳本文件

vim /etc/init.d/uwsgi
chmod 755 /etc/init.d/uwsgi

編寫腳本

#!/bin/sh
 DESC="uwsgi daemon"
 NAME=uwsgi
 DAEMON=/usr/local/bin/uwsgi
 CONFIGFILE=/etc/uwsgi/$NAME.ini
 PIDFILE=/var/run/${NAME}9090.pid
 SCRIPTNAME=/etc/init.d/$NAME
 FIFOFILE=/tmp/uwsgififo
 set -e
 [ -x "$DAEMON" ] || exit 0
 do_start() {
 if [ ! -f $PIDFILE ];then
 $DAEMON $CONFIGFILE || echo -n "uwsgi running"
 else
 echo "The PID is exist..."
 fi
 }
 do_stop() {
 if [ -f $PIDFILE ];then
 $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
 rm -f $PIDFILE
 echo "$DAEMON STOPED."
 else
 echo "The $PIDFILE doesn't found"
 fi
 }
 do_reload() {
 if [ -p $FIFOFILE ];then
 echo w > $FIFOFILE
 else
 $DAEMON --touch-workers-reload $PIDFILE || echo -n "uwsgi
can't reload"
 fi
 }
 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

使用腳本

/etc/init.d/uwsgi status  查看uwsgi服務狀態  
/etc/init.d/uwsgi start   啓動uwsgi服務
/etc/init.d/uwsgi stop    關閉uwsgi服務
/etc/init.d/uwsgi restart  重啓uwsgi服務

nginx配置

vim /usr/local/nginx/conf/nginx.conf
即可優化uwsgi服務

server {
      include uwsgi_params;
      access_log   logs/abc.log main;
      uwsgi_cache_valid 1m;
      uwsgi_temp_file_write_size 64k;
      uwsgi_busy_buffers_size 64k;
      uwsgi_buffers 8 64k;
      uwsgi_buffer_size 64k;
      uwsgi_read_timeout 300;
      uwsgi_send_timeout 300;
      uwsgi_connect_timeout 300;
      listen       80;
      server_name  localhost;
      location / {
          include  uwsgi_params;
          uwsgi_pass  127.0.0.1:9090;         
          uwsgi_param UWSGI_SCRIPT baism_web.wsgi;
          uwsgi_param UWSGI_CHDIR  /usr/local/nginx/html/baism_web;
          index  index.html index.htm;
          client_max_body_size 35m;
           }
}

代表django web項目,myweb.wsgi代表myweb/myweb/wsgi.py地址
uwsgi_param UWSGI_SCRIPT baism_web.wsgi;

代表網站位置
uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/baism_web;

django配置

將django文件放到nginx的html目錄下
mv myweb /usr/local/nginx/html/

啓動

啓動nginx   /usr/local/nginx/sbin/nginx
啓動uwsgi    /etc/init.d/uwsgi start
netstat -ntpl  檢查端口是否開啓

注意:
修改nginx配置文件後要重啓nginx
修改django,uwsgi配置文件後要重啓uwsgi

systemctl restart nginx  重啓nginx 
systemctl restart uwsgi  重啓uwsgi
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章