前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 uWSGI + Nginx 部署 Flask 应用

使用 uWSGI + Nginx 部署 Flask 应用

作者头像
keinYe
发布2019-12-19 17:01:11
3.4K0
发布2019-12-19 17:01:11
举报
文章被收录于专栏:keinYekeinYe

在这篇文章之前,所有的应用都是在命令行使用 Python 直接运行的,但是这种方式只适合在开发过程中使用,并不适合在生产环境中使用,在生产环境中可以使用 uWSGI + Nginx 来部署程序。

uWSGI 是一个软件应用程序,“旨在开发用于构建托管服务的完整堆栈”。它以 Web 服务器网关接口的名称命名,这是该项目支持的第一个插件。uWSGI 通常用于与诸如 Cherokee 和 Nginx 之类的 Web 服务器一起为 Python Web 应用程序提供服务,后者直接支持 uWSGI 的本机 uwsgi 协议。 Nginx(发音同 engine x )是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。Nginx 是免费的开源软件,根据类 BSD 许可证的条款发布。一大部分 Web 服务器使用 Nginx ,通常作为负载均衡器。

以上是维基百科中对 uWSGI 和 Nginx 的解释。

Flask 应用本质上是一个 WSGI 应用,在官方文档中推荐使用 Gunicorn、uWSGI、Gevent、Twisted Web 等 WSGI 服务器来部署 Flask 应用,Gunicorn 据说配置很简单,可惜一直没有成功过,这里还是使用 uWSGI + Nginx 来部署。

安装

uWSGI 可以直接使用 pip 来安装

代码语言:javascript
复制
pip install uwsgi

这里需要注意的是,如果程序运行在 Python3,uwsgi 需要使用 pip3 来进行安装,否则会出现各种意外。

Nginx 可以使用系统中自带的软件包管理工具进行安装,本人使用的是 Debian 系统系统,以下是安装命令。

代码语言:javascript
复制
apt-get updateapt-get install nginx

安装过程可能需要 root 权限,请加上 sudo。

配置

首先,你需要一个 Flask 程序运行的入口文件,形式大致如下:

代码语言:javascript
复制
# -*- coding:utf-8 -*-
from server import create_app
app = create_app()
if __name__ == '__main__':    app.run()

在该文件中你需要暴露出 Flask 的对象,以提供给 uWSGI 使用。

其次,你需要完成名为 uwsgi.ini 的 uWSGI 的配置文件,文件内容大致如下:

代码语言:javascript
复制
[uwsgi]socket          = 127.0.0.1:5000chdir           = /facemodule          = main:appprocesses       = 2threads         = 2master          = truedaemonize       = /logs/uwsgi.logpidfile         = uwsgi.pidvirtualenv      = /face/.venv

文件中各参数含义如下:

  • socket: 设定 Flask 的地址和端口号。
  • chdir: 设定 Flask 应用的根目录。
  • module: 设定应用的入口文件及 Flask 对象。
  • processes: 设定应用进程的数量。
  • threads: 设定每个进程的线程数量。
  • master: 设定是否启动主线程。
  • daemonize: 设定日志的打印文件。
  • pidfile: 设定主进程 pid 的写入文件。
  • virtualenv: 设定虚拟环境的路径。

在 uwsgi.ini 文件中要特别注意 socket 参数一定要与 Flask 中设置的相同,Flask 默认的地址和端口号是 127.0.0.1:5000,如果你修改了默认值请记得修改这里。

最后,我们还需要配置 Nginx 反向代理,否则无法在外网进行访问。Nginx 的配置内容如下:

代码语言:javascript
复制
    server {        # 监听端口        listen 80;        # 监听ip 换成服务器公网IP        server_name ***.***.***.***;        #动态请求        location / {            include uwsgi_params;            uwsgi_pass 127.0.0.1:5000;        }        #静态请求        location /static {            alias /root/face/server/static/;        }    }

将以上内容添加到 /etc/nginx/nginx.conf 文件中,以上内容配置了 nginx 的监听端口以及公网 IP 地址,这里注意 uwsgi_pass 参数的值一定要保持与 uwsgi.ini 文件中一致。

在静态请求的配置中,一定要注意静态文件目录的用户权限,一般情况下 nginx.conf 文件首行会是 nginx 的用户组,如果该用户组无法访问你的静态文件目录,就会一直出现 502 错误,如果你有静态文件访问需求,请确认一下。

启动

启动分 uwsgi 的启动和 nginx 的启动。uswgi 的启动可使用命令

代码语言:javascript
复制
uwsgi --ini uwsgi.ini

如果你已经启动过 uwsgi 服务,先使用以下命令停止 uwsgi 在进行启动。

代码语言:javascript
复制
uwsgi --stop uwsgi.pid

或使用以下命令对 uwsgi 进行重启

代码语言:javascript
复制
uwsgi --reload uwsgi.pid

如果你使用 python 虚拟环境,尽可能在虚拟环境下启动 uwsgi。

Nginx 启动使用以下命令

代码语言:javascript
复制
/etc/init.d/nginx start

Nginx 停止使用以下命令

代码语言:javascript
复制
/etc/init.d/nginx stop

或使用以下命令重启 Nginx

代码语言:javascript
复制
/etc/init.d/nginx restart

当你正常启动 uWSGI 和 Nginx 以后,你就可以在浏览器中通过你服务器的 ip 地址来访问你自己的 Flask 应用了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 keinYe 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 配置
  • 启动
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档