uwsgi 與 supervisor


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都不會自動重啟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM