關於 uWSGI,WSGI 是一個 Python 協議,定義了應用程序(我們寫的軟件)如何與 Web 服務器(如 Nginx )通信,WSGI 只是一個接口。而 uWSGI 是一個支持多種語言的服務器容器,使用 WSGI 定義的標準實現與多種 Web 服務器的通信,並將 Web 服務器發來的請求“翻譯”成應用程序所能理解形式。
安裝(下邊所有安裝儘量在root權限下執行,其他用戶在虛擬環境中存在權限問題)
Python 3:
apt-get update
apt-get install python3-pip
安裝依賴:
apt-get install build-essential libssl-dev libffi-dev python-dev
安裝python虛擬環境:
pip3 install virtualenv //安裝虛擬環境
運行虛擬環境(虛擬環境中不要使用sudo,sudo會將python包安裝到虛擬環境外,進入虛擬環境中,只存在pip):
mkdir -p /opt/deploy/flask //創建工程目錄
cd /opt/deploy/flask
virtualenv venv //創建虛擬環境
. venv/bin/activate //運行虛擬環境,出現(venv)代表進入虛擬環境 ps: deactivate (退出)
pip install flask //安裝flask
pip install uwsgi //安裝uwsgi
創建一個單頁面應用:
index.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "test success!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
run.py
from index import app
if __name__ == "__main__":
app.run()
編寫uwsgi配置文件:
run.ini
[uwsgi]
module = run:app
master = true
processes = 3
chdir = /opt/deploy/flask
socket = /opt/deploy/flask/flask.sock
logto = /opt/deploy/flask/log/run.log
chmod-socket = 755
vacuum = true
uid=www-data
gid=www-data
#http-socket=0.0.0.0:5000 //需要直接訪問時打開,使用nginx做代理訪問時關閉
uwsgi --ini run.ini //啓動uwsgi
安裝nginx:
apt-get install nginx
配置nginx:
cd /etc/nginx/sites-available
touch falsk.com
server {
listen 80;
index index.html index.htm index.nginx-debian.html;
server_name flask.biihu.com.cn;
location / {
include uwsgi_params;
uwsgi_pass unix:/opt/deploy/flask/flask.sock;
try_files $uri $uri/ =404;
}
}
ps:falsk.sock 可能存在權限問題
打開瀏覽器,訪問 http://flask.biihu.com.cn,出現:
test success!
說明部署完成
後續會更新uwsgi系統啓動,jenkins自動化部署flask項目