结合uWSGI和Nginx部署flask项目

结合uWSGI和Nginx部署flask项目

在开发环境,我们一般使用python起一个web服务即可访问,但是对于生产环境来说,我们一般使用nginx+uWSGI的方式进行部署。

使用Nginx优点:

  • 安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器

  • 负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能

  • 提高web服务器的IO性能:对于一些静态文件,可以直接由反向代理处理,不经过web服务器

相关概念:

  • wsgi web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。

  • uwsgi 是一种传输协议,用于定义传输信息的类型。

  • uWSGI 是实现了uwsgi协议WSGI的web服务器。

1. 添加测试项目

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return 'flask project'


@app.route("/user/")
def user_profile(uid):
    return f'user id:{uid}'


if __name__ == '__main__':
    app.run()

本项目是基于虚拟环境进行搭建,具体安装查看virtualenv相关博客

2.创建新的虚拟环境,并安装uwsgi

3. 在本项目下创建uwsgi配置文件,添加内容如下:

完整配置项:

4.启动服务

5.配置nginx代理转发

其他命令:

命令下的 服务启动:

添加日志分割:

uwsgi没有提供按天的日志切割配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便。 这里可以用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志记录,不过需要配合sh+crontab

配置文件添加:

在当前项目下新建一个 touchforlogrotate.sh,并新建日志文件备份的日志,这里就放在项目中的logs文件夹

  • 注意点:

请务必把 ​​app.run()​​​ 放在 ​​if name == 'main':​​ 内部或者放在单独 的文件中,这样可以保证它不会被调用。 因为,每调用一次就会开启一个本地 WSGI 服务器。当我们使用 uWSGI 部署应用时,不需要使用本地服务器。

结合NGXIN

  • http 方式

  • socket 方式

Last updated