Nginx+gunicorn項目部署

  當寫完項目以後,常常須要將項目部署到網絡服務器上,以便於能夠隨時進行訪問(注意:項目部署以前要將debug改爲false)。前端

  通常來講,部署項目到服務器須要使用中間代理服務器,通常咱們使用Nginx。做爲We服務器:相比Apache,Nginx使用資源更少,支持更多的併發鏈接,體現更高的效率,使Nginx倍受歡迎,可以支持高達50000個併發鏈接數的響應。做爲負載均衡服務器:Nginx既能夠在內部直接支持Redis和PHP,也能夠支持做爲HTTP代理服務器對外進行服務,Nginx使用C編寫,不管是系統資源開銷仍是CPU使用效率都處理的很是優秀。Nginx安裝很是簡單,配置文件很是簡潔,Bug很是少:Nginx啓動很是容易,而且幾乎能夠作到24小時不間斷運行,即便運行數個月也不須要從新啓動。python

  gunicorn是一個被普遍使用的高性能的Python WSGI UNIX HTTP服務器,,使用pre-fork worker模式,具備使用很是簡單,輕量級的資源消耗,以及高性能等特色。linux

爲何要同時使用nginx和gunicorn?nginx

  gunicorn 能夠單獨提供服務,但生產環境通常不這樣作。首先靜態資源會佔用很多的請求資源,而對於 gunicorn 來說它自己更應該關注實際業務的請求與處理而不該該把資源浪費在靜態資源請求上;此外,單獨運行 gunicorn 是沒有辦法起多個進程多個端口來負載均衡的。nginx 的做用就是彌補以上問題,首先做爲前端服務器它能夠處理一切靜態文件請求,此時 gunicorn 做爲後端服務器,nginx 將會把動態請求轉發給後端服務器,所以咱們能夠起多個 gunicorn 進程,而後讓 nginx 做均衡負載轉發請求給多個 gunicorn 進程從而提高服務器處理效率與處理能力。最後,nginx 還能夠配置不少安全相關、認證相關等不少處理,可讓你的網站更專一業務的編寫,把一些轉發規則等其它業務無關的事情交給 nginx 作。django

  supervisor這東西,其實就是用來管理進程的。相對於咱們linux傳統的進程管理方式來講,它有不少的優點,如簡單、精確、可擴展,集中式管理等等。後端

 

1、配置Nginx:

一、首先須要安裝Nginx:sudo apt install nginx安全

二、在/etc/nginx/conf.d 目錄下新建一個你的配置文件,如nignx.conf服務器

三、在建立的配置文件中加入如下配置網絡

server{
    listen 80;
    server_name 47.94.225.12;    #寫你的域名或者IP
    location / {
      proxy_pass http://127.0.0.1:12345;    #Django服務使用的端口
      proxy_set_header Host $host;    #捕獲客戶端真實IP
      proxy_set_header X-Real-IP $remote_addr;     #$remote_addr 表明客戶端IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /static {
    alias  /home/wusir/hz_python/django_test/axf_1806/static;  #靜態文件路徑
    }
}
Nginx配置文件

四、配置完成後,重啓Nginx,執行 :sudo nginx -s reload 併發

 

2、配置gunicorn

一、首先須要安裝gunicorn:pip3 install gunicorn

二、在你的工程下新建一個gunicorn的配置文件目錄,如server_confs目錄,在server_confs下新建一個gunicorn的配置文件,如叫gunicorn.conf。

三、在建立的配置文件中加入如下配置

cmmand = '/home/wusir/.local/bin/gunicorn'  #gunicorn命令的絕對路徑
pythonpath = '/home/wusir/hz_python/django_test/axf_1806'   #項目路徑
bind = '127.0.0.1:12345'   #運行服務的IP和端口
workers = 3   #開幾個線程來執行請求
gunicorn配置文件

四、在包含manage.py的同級目錄下執行下面命令來運行項目。

gunicorn 工程名.wsgi -c gunicorn配置文件夾/配置文件

 

3、配置supervisor

一、首先須要安裝supervisor,命令爲:安裝:sudo apt install supervisor。

二、在/etc/supervisor/conf.d 目錄下新建你的配置文件,如叫axf.conf。

三、在配置文件中加入如下配置:

[program:axf_1806]
directory=/home/wusir/hz_python/django_test/axf_1806     #項目路徑
command=/home/wusir/.local/bin/gunicorn axf_1806.wsgi -c server_confs/axf_gunicorn.conf    #須要執行的命令
autostart=true         #在supervisord啓動的時候也自動啓動
startsecs=10           #啓動10秒後沒有異常退出,就表示進程正常啓動了,默認爲1秒
autorestart=true       #程序退出自動重啓,默認unexpected,表示進程意外殺死才重啓
startretries=3        #啓動失敗自動重試次數,默認是3
user=wusir           #哪一個用戶啓動進程,默認是root
priority=999          #進程啓動優先級,默認999,值小的優先啓動
redirect_stderr=true       #把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=100MB     #stdout 日誌文件大小,默認50MB
stdout_logfile_backups = 20     #stdout 日誌文件備份數,默認是10
stdout_logfile=/var/log/supervisor_logs/axf.log     #日誌文件路徑,當指定目錄不存在        
                                                                #時沒法正常啓動,因此須要手動建立目錄
stopasgroup=false   #默認false,進程被殺死時,是否向該進程組發stop信號,包括子進程
killasgroup=false   #默認false,進程被殺死時,是否向該進程組發送kill信號,包括子進程
    
supervisor配置文件

PS:一、當咱們修改了原碼的時候就要重啓咱們的supervisor。

   二、supervisor 不支持python3 也就是默認python對應版本是python2。

   三、若是啓動問題 先去看看log有沒有問題,log的位置 stdout_logfile=/var/log/supervisor_logs/axf.log

   四、最好不要在配置文件裏面加漢語註釋。

   五、若是在程序配置中加入了環境變量,如

須要在配置文件中加入下面這行

gunicorn的經常使用命令:

supervisord                     #啓動supervisor
supervisorctl reload            #修改完配置文件後從新啓動supervisor
supervisorctl status            #查看supervisor監管的進程狀態
supervisorctl start 進程名       #啓動XXX進程
supervisorctl stop 進程名        #中止XXX進程
supervisorctl stop all          #中止所有進程,注:start、restart、stop都不會載入最新的配置文件。
supervisorctl update            #根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓

 

PS:作負載均衡的配置

在Nginx的配置文件中加入upstream的如下配置:

upstream axf_1806{
    server 127.0.0.1:12345;
}
server{
    listen 80;
    server_name 47.94.225.12;

    location / {
      proxy_pass http://axf_1806;     #配置好了之後IP能夠換成上面取的項目名稱
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /static {
    alias  /home/wusir/hz_python/django_test/axf_1806/static;
    }
}
負載均衡配置

補充:能夠配置多個機器,便可以配置多個server,後面還能夠加上每臺機器配置的權重,達到負載均衡的效果。

例:server 127.0.0.1:12355 weight=3

相關文章
相關標籤/搜索