項目工程目錄如下:
第一步,測試runserver
cd django3demo1/mysite
python manage.py runserver 0.0.0.0:8002
http://127.0.0.1:8002/polls/ 訪問正常
第二步, 配置uwsgi啓動
配置文件uwsgi.ini
[uwsgi1]
ini=:base
uwsgi-socket=0.0.0.0:8101
stats=0.0.0.0:8201
pidfile=/mnt/run/django3demo1.pid
;使用supervisor管理進程時不能設置daemonize模式
daemonize = /mnt/logs/uwsgi.log
;logger=file:$(LOG_ROOT)uwsgi1.log
;env=LOG_FILE_SUFFIX=default_01
;代碼更改自動鏈式重啓,也可手動touch /mnt/run/reload_lobby1
;touch-chain-reload=/mnt/run/reload_lobby1
enable-threads=true
single-interpreter=true
[base]
;加載指定的python WSGI模塊
module=mysite.wsgi
;開啓主進程模式
master=true
;設置socket的監聽隊列大小(默認:100)
listen=100
;設置工作進程的數量,默認可以設置為cpu核數*2
processes=2
;定義日誌格式
;logformat=%(addr) - [%(ctime)] %(method) %(uri) %(proto) %(status) %(size) [%(msecs) msecs] [pid:%(pid)] [rss:%(rssM)M] [vsz:%(vszM)M] "%(uagent)"
logformat=%(addr) - [%(ctime)] %(method) %(uri) %(proto) %(status) %(size) %(msecs) msecs "%(referer)" "%(uagent)"
;經過N秒不活躍狀態後銷燬所有工作進程(這時就進入了cheap模式),只會剩下主進程
;idle=30
;為每個工作進程設置請求數的上限,超過上限後工作進程就會被回收
max-requests=50000
;順序重載每個工作進程,優先加載完的工作進程立即開始工作,需要配合touch-chain-reload參數使用才能生效
lazy-apps=true
;開啓內存使用情況報告
memory-report=true
;每個工作進程的線程數
threads=1
;請求超過harakiri指定的秒數之後,會丟棄這個請求,且當前woker會被回收(即重啓woker)
harakiri=45
;當一個請求是“harakiri”殺死的,會記錄信息到uwsgi日誌裏。打開這個選項會輸出額外的信息
harakiri-verbose=true
啓動uwsgi
uwsgi --ini mysite/uwsgi.ini:uwsgi1
uwsgi --stop /mnt/run/django3demo1.pid
uwsgi --reload /mnt/run/django3demo1.pid
第三步, nginx配置反向代理到uwsgi
upstream mysite_app {
server 127.0.0.1:7101 weight=5;
}
server {
listen 8000;
server_name _;
charset utf-8;
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml application/json;
#gzip_vary on;
location / {
include uwsgi_params;
uwsgi_pass mysite_app;
}
}
http://127.0.0.1:8000/polls/ 訪問正常
第四步, uwsgi啓動配置gevent(可選)
uwsgi --gevent 100 --gevent-monkey-patch --ini mysite/uwsgi.ini:uwsgi1
第五步, shell方法啓動uwsgi
改成以人類能直觀看懂的方式,配置文件bin/h~~~~ttp_server.sh
#!/bin/bash
function usage()
{
cat <<EOF
Usage: bin/http_server.sh {start|reload|stop|gevent-start|restart}
Options:
[-h|--help] : show this help
EOF
}
SCRIPT_PATH=$0
echo $SCRIPT_PATH
WORK_PATH=$(dirname $(dirname $SCRIPT_PATH))
echo $WORK_PATH
while [ "$#" -gt 0 ]
do
case "$1" in
-h|--help)
usage
exit 1
;;
start)
count=ps auxf|grep uwsgi.ini|grep -v grep |wc -l`
if [ $count -gt 0 ]; then
echo "http server already start ......"
exit 1
fi
uwsgi --ini mysite/uwsgi.ini:uwsgi1
exit 1
;;
restart)
echo "killing servers ... "
ps auxf|grep uwsgi.ini|grep -v grep|awk {'print $2'}|sudo xargs kill -9
echo "wait for http server to exit...."
sleep 3
uwsgi --ini mysite/uwsgi.ini:uwsgi1
exit 1
;;
gevent-start)
uwsgi --ini mysite/uwsgi.ini:uwsgi1
exit 1
;;
stop)
uwsgi --stop /mnt/run/django3demo1.pid
exit 1
;;
reload)
uwsgi --reload /mnt/run/django3demo1.pid
exit 1
;;
esac
shift
done
啓動uwsgi
sh bin/http_server.sh start
第六步, 配置supervisor啓動uwsgi
配置文件: mysite_supervisor.conf
[program:uwsgi1]
directory = /mnt/hgfs/vmshare/study/python/django3demo1/mysite
environment = PYTHONPATH=./
command = /mnt/venv/python38/bin/uwsgi --ini mysite/supervisor_uwsgi.ini:uwsgi
autostart = true
;startsecs = 30
autorestart = true
startretries = 3
user = zyb
redirect_stderr = True
stdout_logfile = /mnt/logs/supervisor.log
stdout_logfile_maxbytes = 0
stdout_logfile_backups = 0
stdout_capture_maxbytes = 10MB
priority = 31
stopsignal=QUIT
pip3 install supervisor
sudo supervisorctl update
sudo supervisorctl restart all
supervisor的具體使用方式就不具體介紹了