使用uwsi部署flask服务

1. 准备一个flask服务

在研究如何使用uwsgi部署flask服务前,我们先要实现一个简单的flask服务为测试做准备

from flask import Flask


app = Flask(__name__)

@app.route('/')
def index():
    return 'ok'

if __name__ == '__main__':
    app.run('0.0.0.0', 5500)

这是一个极简单的flask服务,只实现了一个视图函数处理请求。

2. 安装uwsi,构建程序目录

uwsi可以使用pip进行安装

pip install uwsgi

安装好以后,uwsgi可执行文件在python的bin目录下,可以创建一个软链

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

web服务放在/root/www下,结构如下

www
├── app.ini
├── app.py
└── logs

logs用于存放日志,app.ini是uwsgi的配置文件

3. 直接将uwsgi作为http服务器进行部署

uwsgi既可以做http服务器,也可以部署在nginx和flask服务之间,这两种不同的部署方式,先来实验第一种,编写app.ini文件

[uwsgi]
http=127.0.0.1:8000
chdir=/home/www
wsgi-file=app.py
callable=app
#指定工作进程
processes=4
#主进程
master=true
#指的后台启动 日志输出的地方
daemonize=/home/www/logs/uwsgi.log
#保存主进程的进程号
pidfile=/home/www/logs/uwsgi.pid

启动uwsgi

uwsgi --ini app.ini

如果没有报错,就说明启动正常,在logs目录下,会有两个文件,uwsgi.log记录的是uwsgi的工作日志,uwsgi.pid记录的是uwsgi的主进程id。

停止和重启的命令如下

uwsgi --stop /home/www/logs/uwsgi.pid
uwsgi --reload /home/www/logs/uwsgi.pid

4. 将uwsgi与nginx一起使用

uwsgi与nginx一起使用时,两者之间走的是socket协议,需要做一点特殊设置,首先是app.ini需要修改

socket=127.0.0.1:8000

接下来,需要配置nginx,在/etc/nginx/conf.d 目录下新增文件flask.conf

server { 
        listen       80;
        server_name  uwsgi-flask.com;
        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
        }
}

新增配置后,需要检查配置是否正确,正确后才能重新加载配置

nginx -t   # 检查配置是否正确
nginx -s relaod # 重新加载配置

这里我配置server_name 为uwsgi-flask.com, 是希望可以通过域名进行访问,你在做实验时,需要设置hosts文件

127.0.0.1   uwsgi-flask.com

现在,重新启动uwsgi

uwsgi --ini app.ini

使用curl访问服务

curl http://uwsgi-flask.com

服务正常响应。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案