有用 Python 編寫的流行服務器來容納 WSGI 應用並提供 HTTP 服務。這些服務器在運行時是獨立的:你能夠從你的 web 服務器設置到它的代理。 Gunicorn ‘Green Unicorn’ 是一個給 UNIX 用的 WSGI HTTP 服務器。python
sudo apt-get install python-pip python-virtualenv
複製代碼
sudo apt-get install nginx
複製代碼
在 '/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
複製代碼
這裏推薦使用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
而後,如下安裝的全部框架、工具都是隻針對這個項目,與其餘項目無關。框架
pip install flask
複製代碼
pip install gunicorn
複製代碼
pip install -r requirements.txt
複製代碼
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',不然外部沒法訪問到項目!
有時咱們須要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
複製代碼