wsgi 全稱web server gateway interface,wsgi不是服務器,也不是python模塊,只是一種協議,描述web server如何和web application通信的規則。 運行在wsgi上的web框架有bottle,flask,django
uwsgi 和wsgi一樣是通信協議,是uWSGI服務器的單獨協議,用於定義傳輸信息的類型
uWSGI 是一個web服務器,實現了WSGI協議,uwsgi協議。a
Uwsgi ye是一個web服務器
項目部署:基本原理
利用nginx 反向代理到Uwsgi的端口 通過socket協議, nginx 可以快速的處理靜態資源,uwsgi不行 動態資源給uwsgi處理
啟動 python manage.py runserver 0.0.0.0:8000 也是通過wsgi協議 只不過是一個
單機啟動django項目,性能低,默認使用wsgiref模塊,性能低的wsgi協議
1 下載uwsgi 准備好項目的虛擬環境 前面有提到 , 在環境下 下載uWSGI pip3 install uwsgi 2 就可以啟動uwsgi了 uwsgi --http :8000 --wsgi-file test/wsgi.py --py-autoreload=1 參數解析 --http 啟動在8000端口, --wsgi-file 指定項目文件夾路徑 或者用 --module test.wsgi 參數就要這樣 --py-autoreload是熱加載程序 項目改動就可以自己加載了 3 每次都這樣啟動就很麻煩 可以通過配置文件來啟動 vim /etc/uwsgi/uwsgi.ini 配置內容如下: uwsgi支持ini、xml等多種配置方式,本文以 ini 為例, 在/etc/目錄下新建uwsgi_nginx.ini,添加如下配置: # mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /opt/mysite # 項目的第一層路徑 # Django's wsgi file module = mysite.wsgi # wsgi的文件包 # the virtualenv (full path) home = /opt/venv 項目的虛擬環境 # process-related settings # master master = true # maximum number of worker processes processes = 1 開啟進程數 一般是cup個數 也有說是cpu3倍的 # the socket (use the full path to be safe socket = 0.0.0.0:8000 socket 協議開啟 或者改成http協議開啟(http是在測試時啟用) socket 是配合nginx啟動的 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true #daemonize = /opt/logs/uwsgi.log # 守護進程的方式 這要是用supervisor啟動時 不要寫他 跟supervisor里面的日志沖突
設置完配置之后啟動方法
uwsgi --ini /etc/uwsgi/uwsgi.ini
supervisor
1 下載(在全局下載就好) pip3 install supervisor 2 echo_supervisord_conf > /etc/supervisord.conf 生成配置文件 3 配置配置文件 supervisord.conf配置文件參數解釋 [program:xx]是被管理的進程配置參數,xx是進程的名稱 [program:xx] command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序啟動命令 autostart=true ; 在supervisord啟動的時候也自動啟動 startsecs=10 ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒 autorestart=true ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟 startretries=3 ; 啟動失敗自動重試次數,默認是3 user=tomcat ; 用哪個用戶啟動進程,默認是root priority=999 ; 進程啟動優先級,默認999,值小的優先啟動 redirect_stderr=true ; 把stderr重定向到stdout,默認false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默認50MB stdout_logfile_backups = 20 ; stdout 日志文件備份數,默認是10 ; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件) stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out # 這要是開啟了就不要開啟uwsgi保護進程開啟 沖突 stopasgroup=false ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程 killasgroup=false ;默認為false,向進程組發送kill信號,包括子進程
4 最后啟動supervisor,完成uWSGI啟動django,nginx反向代理
supervisord -c /etc/supervisord.conf #啟動supervisor
supervisorctl -c /etxc/supervisord.conf #重啟my項目
supervisorctl 進入 supervisor shell
5
一、添加好配置文件后 二、更新新的配置到supervisord supervisorctl update 更新了配置文件后要update 啟動 三、重新啟動配置中的所有程序 supervisorctl reload 四、啟動某個進程(program_name=你配置中寫的程序名稱) supervisorctl start program_name 五、查看正在守候的進程 supervisorctl 六、停止某一進程 (program_name=你配置中寫的程序名稱) pervisorctl stop program_name 七、重啟某一進程 (program_name=你配置中寫的程序名稱) supervisorctl restart program_name 八、停止全部進程 supervisorctl stop all 注意:顯示用stop停止掉的進程,用reload或者update都不會自動重啟。