关于 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项目