經過Gunicorn部署flask應用(阿里雲服務器:Ubuntu 16.04)

有用 Python 編寫的流行服務器來容納 WSGI 應用並提供 HTTP 服務。這些服務器在運行時是獨立的:你能夠從你的 web 服務器設置到它的代理。 Gunicorn ‘Green Unicorn’ 是一個給 UNIX 用的 WSGI HTTP 服務器。python

1. 安裝pip、virtualenv

sudo apt-get install python-pip python-virtualenv
複製代碼

2. 安裝nginx

sudo apt-get install nginx
複製代碼

3. 新建測試項目

在 '/var/www/' 下新建測試項目文件夾:nginx

cd /var/www
sudo mkdir test
複製代碼

使用scp上傳本地項目文件至遠程服務器:web

scp -r test.py root@your.ip.address:/var/www/test  //@後填服務器的公網IP
複製代碼

這裏,咱們用一個最小項目來測試,test.py:flask

# file_name='test.py'
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(host='0.0.0.0',port=5000)   # 設置外部訪問限制,本例表示全部ip都可訪問,端口爲5000
複製代碼

4. 配置項目環境

這裏推薦使用virtualenv和pip工具來配置咱們項目的環境,pip能夠方便的安裝Python有關的工具、框架等,virtualenv能夠爲咱們每一個項目都配置一個獨立的工做環境,使不一樣項目的依賴相互隔離,更方便管理,互相不影響。安全

在項目路徑 '/var/www/test' 下建立virtualenv環境:bash

virtualenv -p /usr/bin/python3.6 venv   //這裏我使用了python3.6的版本,若是使用的是系統默認的python版本,則只需輸入:virtualenv venv
複製代碼

而後激活環境:服務器

source venv/bin/activate
複製代碼

若是命令行前面多出來一個: '(venv)' 則表示環境激活成功。app

而後,如下安裝的全部框架、工具都是隻針對這個項目,與其餘項目無關。框架

  • 安裝flask:
pip install flask
複製代碼
  • 安裝Gunicorn
pip install gunicorn
複製代碼
  • 根據requirements.txt安裝項目依賴
pip install -r requirements.txt
複製代碼

5. 啓動項目

  • 簡單快速啓動:
gunicorn test:app
複製代碼

這裏的test是咱們的入口模塊名,app是flask實例名稱。工具

  • 參數啓動:
gunicorn -w 4 -b 127.0.0.1:5000 test:app
複製代碼
  • 後臺啓動
nohup gunicorn -w 4 -b 127.0.0.1:5000 test:app&     //關閉遠程鏈接時程序在後臺繼續運行
複製代碼

用四個 worker 進程來運行一個 Flask 應用( -w 4 ),綁定到 localhost 的5000 端口( -b 127.0.0.1:5000 )

注意: 若是是部署在服務器上,除了須要設置相關端口(如5000)的安全組,還須要將上面的啓動代碼中的地址:'127.0.0.1' 改成你的服務器的私有IP,或者'0.0.0.0',不然外部沒法訪問到項目!

6. 配置

有時咱們須要nginx代理請求,接下來咱們配置nginx以實現經過請求80端口獲取flask項目的服務:

首先備份nginx的配置文件:

sudo cp /etc/nginx/sites-available/default default.bak
複製代碼

而後修改nginx的配置文件:

sudo nano /etc/nginx/sites-available/default
複製代碼

將其改成:

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

    location / {
        proxy_pass http://your.私有IP:5000; # 指向 gunicorn host 的服務地址,注意,這裏填咱們服務器的私有IP
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
複製代碼

其中的location塊代碼表示將80端口的請求傳送到proxy_pass表示的地址,這裏咱們要填入咱們的私有IP和項目所在的端口!

如今,咱們對公網IP的http請求就能夠映射到咱們的部署在Gunicorn的flask項目上了。

完成

退出虛擬環境:

deactivate
複製代碼

關閉gunicorn:

pkill gunicorn  //關閉gunicorn
複製代碼

查看gunicorn進程:

pstree -ap|grep gunicorn
複製代碼
相關文章
相關標籤/搜索