nginx+Gunicorn部署Flask專案

CoderSunYu發表於2018-01-15

本文作為學習記錄,將本人覺得有用的文章和方法進行記錄,請訪問 原文

1、首先安裝Gunicorn

pip install gunicorn
複製程式碼

2、在入口檔案的app.run()加上以下內容

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
複製程式碼

例:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)
    app.run()
複製程式碼

3、啟動Gunicorn

最簡單的方式為

gunicorn 入口檔名:app
複製程式碼

預設是監聽127.0.0.1:8000

如果是要處理高併發則要開多個程式和修改監聽埠的畫

gunicorn -w 4 -b 127.0.0.1:8000 入口檔名:app
複製程式碼

這樣就可以啟動4個程式同時處理HTTP請求,提高系統的使用效率及效能。 還可以把埠8000改為其他

而在實際應用中,應使用後臺執行的方式啟動服務

nohup 啟動服務的命令 &
複製程式碼

nohup gunicorn -w 4 -b 127.0.0.1:8000 入口檔名:app &
複製程式碼

這時你可以在本機的瀏覽器上訪問127.0.0.1:8000,瀏覽器上就會出現Hello World!

注意:如果是想通過外網訪問的話就要把ip改為內網的ip

4、配置nginx

配置改為

server {
    listen 80;
    server_name example.org; # 這是HOST機器的外部域名,用地址也行

    location / {
        proxy_pass http://127.0.0.1:8000; # 這裡是指向 gunicorn host 的服務地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 }
複製程式碼

這樣啟動之後80埠就可以轉發到8000埠了

5、檢查配置

nginx -t
複製程式碼

若出現一下內容,則表示配置成功

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
複製程式碼

6、更新nginx配置

nginx -s reload
複製程式碼

在已經執行了Gunicorn的前提下,在瀏覽器訪問127.0.0.1就會出現Hello World!了

7、重啟Gunicorn

輸入命令

pstree -ap|grep gunicorn
複製程式碼

nginx+Gunicorn部署Flask專案
出現以上內容,可以看到,其中30693為主程式號,使用以下命令,重啟Gunicorn

kill -HUP 30693
複製程式碼

相關文章