我正在寻找一种易于理解的方法来配置 Flask 应用程序以在 Azure Web Apps 上运行。我希望能够让环境尽可能接近原始环境,尽管我知道使用现成的服务会带来一些要求。
我对本地设置的欣赏之处是:
- 只需运行
.py
脚本即可通过 Waitress 运行服务器的简单方法 - 将我的文件作为可导入的“开发”包,提供一种没有路径操作但位于文件系统中任意位置的情况 (
pip install -e ./
)
使用 Flask 设置并启动应用程序非常容易。这是我最简单的app.py
。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def main():
return 'Hi.'
if __name__ == '__main__':
app.run('0.0.0.0', 5000)
现在是这个guide关于如何在 Azure 中建立 Python 网站。我认为它有很多不必要的步骤,从单独的服务器下载轮子,修改 os.path 来导入库并使用 virtualenv。不要误会我的意思:virtualenv
很有用,但我只是尝试将流程精简到最低限度。此外,至少对我来说,virtualenv
激活脚本不起作用。
另一个guide ,这次微软自己表示 Windows 开发人员应该转向适用于 Linux 的 Azure Web App。但目前,我只能使用 Windows 应用程序。他们提供一些配置帮助。
提供了 Python 安装。它奇怪地位于 D:\home
中,并且它的解释器无法使用简单的 python
命令启动。安装库是可行的:python -m pip install lib
。配置文件应该从一些 Visual Studio 模板构建,至少我的 Visual Studio 找不到。所以我现在填写的第一个指南是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="D:\home\Python364x64\python.exe|D:\home\Python364x64\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>
</configuration>
应根据文档在某处添加另一行。不过,目前还不清楚具体在哪里。
<add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
所以我想知道的是:
- 运行这个最小的应用程序需要执行哪些最少步骤?
- 我可以运行自己的服务器吗?几个使用不同的端口怎么样?
最佳答案
对于你的第一个问题,你可以引用我对其他现有SO线程的回答Hosting Flask(Python) app throws CGI error运行最小的 Flask 应用程序。您的代码中有一个问题,由 wfastcgi.py
启动使用app.run()
,不要使用app.run('<ip or host for listening>', '<a port you want>')
。在 Azure 上,IIS 作为 Python 的 HTTP 服务器,通过 FastCGI 运行 Flask 应用程序。
因此,对于第二个问题,您可以在 IIS 反向代理后面运行自己的服务器,但 Azure 网站上的唯一端口是 80
在 IIS 上通过 FastCGI 提供 Python Web 应用程序。
关于python - 在 Azure Web Apps 中设置 Python 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56123582/