用Azure应用服务部署Streamlit应用程序的实例

676 阅读4分钟

Streamlit是一个面向机器学习和数据科学团队的开源应用框架。streamlit的目的是帮助数据科学从业人员,他们可能没有太多的前端框架或使用JavaScript的经验,创建有吸引力的、互动的和直观的应用程序来展示他们的分析。

Azure应用服务是Azure提供的一个完全管理的平台即服务(PaaS),帮助你在云中构建和托管网络应用。

默认情况下,Azure App Services for python被设置为使用Gunicorn来部署Flask或Django应用程序,事实上,大多数的文档和/或教程都解释了如何部署Flask或Django应用程序

Gunicorn是一个WSGI的HTTP网络服务器,但如果我们想部署一个Streamlit应用程序,它不使用WSGI而使用Tornado作为其网络服务器呢?

在这篇博文中,我们将探讨如何使用一键式部署将Streamlit应用部署到Azure App Services。

本博文的资源库和一键部署可以在这里找到

快速免责声明:在写作时,我目前是一名微软员工。

Streamlit应用程序

我们将使用的应用程序是Streamlit中的 "时间序列注释 "例子,因为它是一个简单的单脚本演示。

streamlit screenshot

这个应用程序的实时演示可以在这里找到。

运行这个Streamlit应用程序的相同脚本可以在本博客文章的资源库的app 目录中找到。

如果你想在本地运行这个应用程序。

部署到Azure

如果你想在生产中运行你的Streamlit应用程序,最好的做法是设置一个反向代理,如Nginx,但如果你只是想快速启动和运行以达到演示目的,你可以直接从Streamlit中提供内容,这就是我们要做的。

我们可以从配置python应用程序的App Services文档中看到,Apps默认使用Gunicorn WSGI HTTP服务器运行,使用附加参数--bind=0.0.0.0 --timeout 600

我们还可以看到,运行一个python应用程序的优先级是。

  1. 使用一个自定义的启动命令,如果提供的话。
  2. 检查是否存在Django应用程序,如果检测到则为其启动Gunicorn。
  3. 检查是否存在Flask应用程序,如果检测到则为其启动Gunicorn。
  4. 如果没有发现其他应用,则启动容器中内置的默认应用。

因此,我们将在部署模板中使用一个自定义的启动命令。

我们还需要考虑的是,requirements.txt 文件必须在项目根目录下,因此我们把需求文件放在我们的 repo 根目录下。

使用ARM模板部署到Azure

我们将使用Azure资源管理器(ARM)模板将我们的应用程序部署到Azure。ARM模板是一种基础设施即代码的形式,在这个概念中,你可以定义需要部署的基础设施。有关 ARM 模板的更多信息,请参阅这里的文档

ARM模板是一个JSON文件,我们将用它来部署我们的应用程序。我们将直接从我们的公共git repo部署我们的应用程序。

这个ARM模板可以在这里找到,它包含一些参数,所有这些参数都有默认定义。

  • 网络应用程序名称
  • 地点
  • SKU
  • 运行时堆栈
  • Git Repo URL
  • Git Repo分支

请注意,在我们的ARM模板中,我们包括一个Microsoft.Web/sites/config 资源,有一个appCommandLine 属性,这是我们的自定义启动命令,也就是。

这将运行我们的Streamlit应用,并绑定到8000端口的0.0.0.0。

我们可以用一键部署的方式将其直接部署到Azure,它被引导到我们的ARM模板。

Deploy To Azure

如果你点击上面的按钮,你会被带到一个页面,在那里你可以部署你的应用程序,并根据你的需要改变上面定义的参数。

ARM Custom Deployment Screenshot

另外,你也可以使用Azure CLI来部署ARM模板

这可能需要一些时间来部署,因为需求的安装和Streamlit应用的启动和运行需要一些时间,但是一旦完成,你就可以导航到你的应用的URL,看到你的Streamlit网络应用已经启动和运行了!