结合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