1. 程式人生 > >項目部署到服務器

項目部署到服務器

exp 優先級 網絡服務器 即使 load 集中式 fork 均衡 根據

  當寫完項目之後,經常需要將項目部署到網絡服務器上,以便於可以隨時進行訪問(註意:項目部署之前要將debug改成false)。

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

  gunicorn是一個被廣泛使用的高性能的Python WSGI UNIX HTTP服務器,,使用pre-fork worker模式,具有使用非常簡單,輕量級的資源消耗,以及高性能等特點。

為什麽要同時使用nginx和gunicorn?

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

  supervisor這東西,其實就是用來管理進程的。相對於我們linux傳統的進程管理方式來說,它有很多的優勢,如簡單、精確、可擴展,集中式管理等等。

一、配置Nginx:

1、首先需要安裝Nginx:sudo apt install nginx

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

3、在創建的配置文件中加入以下配置

技術分享圖片
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配置文件

4、配置完成後,重啟Nginx,執行 :sudo nginx -s reload

二、配置gunicorn

1、首先需要安裝gunicorn:pip3 install gunicorn

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

3、在創建的配置文件中加入以下配置

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

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

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

三、配置supervisor

1、首先需要安裝supervisor,命令為:安裝:sudo apt install supervisor。

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

3、在配置文件中加入以下配置:

技術分享圖片
[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:1、當我們修改了原碼的時候就要重啟我們的supervisor。

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

   3、如果啟動問題 先去看看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

項目部署到服務器