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应用程序的相同脚本可以在本博客文章的资源库的app 目录中找到。
如果你想在本地运行这个应用程序。
部署到Azure
如果你想在生产中运行你的Streamlit应用程序,最好的做法是设置一个反向代理,如Nginx,但如果你只是想快速启动和运行以达到演示目的,你可以直接从Streamlit中提供内容,这就是我们要做的。
我们可以从配置python应用程序的App Services文档中看到,Apps默认使用Gunicorn WSGI HTTP服务器运行,使用附加参数--bind=0.0.0.0 --timeout 600 。
我们还可以看到,运行一个python应用程序的优先级是。
- 使用一个自定义的启动命令,如果提供的话。
- 检查是否存在Django应用程序,如果检测到则为其启动Gunicorn。
- 检查是否存在Flask应用程序,如果检测到则为其启动Gunicorn。
- 如果没有发现其他应用,则启动容器中内置的默认应用。
因此,我们将在部署模板中使用一个自定义的启动命令。
我们还需要考虑的是,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模板。
如果你点击上面的按钮,你会被带到一个页面,在那里你可以部署你的应用程序,并根据你的需要改变上面定义的参数。

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