有用 Python 編寫的流行伺服器來容納 WSGI 應用並提供 HTTP 服務。這些伺服器在執行時是獨立的:你可以從你的 web 伺服器設定到它的代理。 Gunicorn ‘Green Unicorn’ 是一個給 UNIX 用的 WSGI HTTP 伺服器。
1. 安裝pip、virtualenv
sudo apt-get install python-pip python-virtualenv
複製程式碼
2. 安裝nginx
sudo apt-get install nginx
複製程式碼
3. 新建測試專案
在 '/var/www/' 下新建測試專案資料夾:
cd /var/www
sudo mkdir test
複製程式碼
使用scp上傳本地專案檔案至遠端伺服器:
scp -r test.py root@your.ip.address:/var/www/test //@後填伺服器的公網IP
複製程式碼
這裡,我們用一個最小專案來測試,test.py:
# 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環境:
virtualenv -p /usr/bin/python3.6 venv //這裡我使用了python3.6的版本,如果使用的是系統預設的python版本,則只需輸入:virtualenv venv
複製程式碼
然後啟用環境:
source venv/bin/activate
複製程式碼
如果命令列前面多出來一個: '(venv)' 則表示環境啟用成功。
然後,以下安裝的所有框架、工具都是隻針對這個專案,與其他專案無關。
- 安裝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
複製程式碼