使用 uWSGI 和 Nginx 部署 Flask 应用程序

本文介绍了如何使用uWSGI和Nginx在Linux服务器上部署Flask应用程序,包括安装uWSGI Python 3.8插件、配置uWSGI以运行Flask应用、设置Nginx进行反向代理。通过详细步骤和解决常见问题,帮助开发者成功部署Python Web应用。
摘要由CSDN通过智能技术生成

使用 uWSGI 和 Nginx 部署 Flask 应用程序

 

自从我第一次浪漫地接触 Python 已经过去了大约十年。这部特别的浪漫喜剧不知何故完全错过了“一见钟情”的比喻——我发现学习 Python 的过程令人愤怒。我担心的不是语言本身,而是地球上每个活着的软件开发人员。

从我的角度来看,“软件”中的人似乎只有两种原型,两者都不是特别可口。光谱的一端被我的新手占据,他们似乎很高兴地被限制在可爱的 REPL 环境中编程,无论哪个训练营为他们提供了阻止他们提问的蓝色药丸。在光谱的另一端是其他人:有能力的工程师在我眼中也可能是天才。我知道这些人有知识回答我能提出的每一个问题,但不知何故被证明完全无能以任何身份有用。当时我并不清楚经验丰富的工程师是否是故意的精英混蛋,或者新人是否真的无助。我唯一清楚的是,这两个人口都不会为我的近期目标提供价值。回想起来,这种挫败感可能是推动这个博客存在的原因)。

我确信没有什么值得构建的,除非它运行在 Linux 服务器上,在一个真实的域后面,全世界都可以访问。这在 2020 年听起来可能是一个合理的观点,但这是 2010 年:没有 Docker,没有 Heroku,没有 DigitalOcean。Nginx 主要是由“俄罗斯的一些家伙”创建的边缘网络服务器,为互联网上 10% 的网站提供动力,而 Apache 则为 90%。基于 Web 的 Python 以前依赖于一个名为mod-python 的 Apache 模块。Mod-python 突然(并且任意地?)被认为是“死的”,取而代之的是一个名为mod-wsgi 的未记录的 Apache 模块。这是 Graham Dumpleton 的创意,除了我自己之外,他也可能是世界上唯一一个试图运行该死的 Python 网络应用程序的人. 我能成功地做到这一点真是一个奇迹。

输入 uWSGI

首字母缩略词“WSGI”代表Web 服务器网关接口,这是一种深奥的说法,即“网络服务器如何与 Python 通信”。uWSGI 及其前身是一种中间件形式,供 Nginx 等网络服务器为 Python 应用程序提供服务。

在 2020 年,有很多选择可以为 Python Web 应用程序提供服务,但 uWSGI 在客观上比 Gunicorn 等替代方案要好。如果你对我们为什么要使用 uWSGI有任何疑问,我从这个人的博客中偷来的这些精心挑选的图表肯定会解决问题:

正在上传…重新上传取消​

网关接口的性能比较。

在我们开始之前,我要对你说实话:这些东西有时会让人觉得很深奥。当有一键式解决方案可以完全避免所有这些时,看着这个过程并说“去他的”是很诱人的,但我要告诉你一个秘密:这些解决方案很糟糕。Heroku 是一个糟糕的 AWS 经销商,它销售具有更友好界面的垃圾 EC2 实例。Docker 是开发人员躲避 Linux 细微差别的一种手段,以至于我们会安装整个虚拟机,而不是学习。我已经准备好对这些言论嗤之以鼻,但我的观点仍然存在:如果您有兴趣超越供应商锁定并构建运行速度更快的应用程序,那么您来对地方了。

开始设置

我们需要在 Ubuntu(或其他)上安装一堆 Python 开发包才能使 uWSGI 工作。即使这条线看起来很熟悉,也不要跳过这部分(就像我一样)。几乎可以肯定,您缺少以下至少一个包:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>$ apt update
$ apt upgrade -y
$ sudo apt install python3.8 python3.8-dev python3-distutils uwsgi uwsgi-src uuid-dev libcap-dev libpcre3-dev python3-pip python3.8-venv
</code></span></span>

安装所有 Python 开发依赖项。

安装uwsgi-plugin-python3是一个重要的步骤,值得特别注意。uWSGI 传统上是一个Python 包,因此您可能希望我们运行它pip install uWSGI。如果我们要通过 pip 安装 uWSGI,uWSGI 将是一个 Python 包,属于我们机器上碰巧安装的 Python3 的系统默认版本。我们的项目可能会使用Python 3.6.9以外的 Python 版本(Ubuntu 18.04 默认),因此我们需要一个超越 Python 版本的 uWSGI 版本。这就是uwsgi-plugin-python3 的用武之地:

安装uwsgi-plugin-python3是一个重要的步骤,值得特别注意。uWSGI 传统上是一个Python 包,因此您可能希望我们pip install uWSGI在某个时候运行。相反,如果我们通过 pip 安装 uWSGI&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uWSGINginx是一种常见的Flask应用程序部署组合。uWSGI是一种Web服务器,它可以在后台运行Python应用程序,并提供了许多高级功能,如负载均衡、缓存、网关接口等。Nginx是一种反向代理服务器,它可以将传入的请求转发给uWSGI服务器,并负责处理静态文件、SSL加密等。 下面是一些简单的步骤,可以帮助你使用uWSGINginx部署Flask应用程序: 1. 安装uWSGINginx 在Linux系统上,你可以使用包管理器来安装uWSGINginx。例如,在Ubuntu上,你可以运行以下命令: ``` sudo apt-get update sudo apt-get install nginx uwsgi uwsgi-plugin-python3 ``` 2. 创建Flask应用程序 在你的项目目录中创建一个名为`app.py`的文件,并编写Flask应用程序代码。例如: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, World!' ``` 3. 创建uWSGI配置文件 在你的项目目录中创建一个名为`uwsgi.ini`的文件,并编写uWSGI配置。例如: ```ini [uwsgi] module = app callable = app master = true processes = 4 socket = /tmp/uwsgi.sock chmod-socket = 666 vacuum = true die-on-term = true ``` 其中,`module`参数指定了Flask应用程序Python模块名,`callable`参数指定了Flask应用程序的实例名。`socket`参数指定了uWSGI服务器监听的Unix套接字路径,`processes`参数指定了uWSGI服务器的工作进程数。 4. 测试uWSGI服务器 在命令行中,进入你的项目目录,并运行以下命令启动uWSGI服务器: ``` uwsgi --ini uwsgi.ini ``` 如果一切正常,你应该能够通过访问Unix套接字路径来测试uWSGI服务器: ``` curl http://localhost/tmp/uwsgi.sock ``` 你应该看到Flask应用程序的输出。 5. 创建Nginx配置文件 在Nginx配置文件中添加以下内容: ``` server { listen 80; server_name yourdomain.com; location / { include uwsgi_params; uwsgi_pass unix:///tmp/uwsgi.sock; } } ``` 其中,`listen`参数指定了Nginx服务器监听的端口和IP地址,`server_name`参数指定了该虚拟主机的域名或IP地址。`location`块指定了请求转发规则,`uwsgi_pass`参数指定了uWSGI服务器监听的Unix套接字路径。 6. 启动Nginx服务器 在命令行中,运行以下命令启动Nginx服务器: ``` sudo service nginx start ``` 如果一切正常,你应该能够通过访问你的域名或IP地址来访问Flask应用程序。 注意:如果你使用的是Ubuntu 18.04或更高版本,你需要将Nginx配置文件中的`include uwsgi_params;`改为`include /etc/nginx/uwsgi_params;`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值