如何在 App Engine (GCP) 上部署 Streamlit 应用程序?
Posted
技术标签:
【中文标题】如何在 App Engine (GCP) 上部署 Streamlit 应用程序?【英文标题】:How do you deploy a Streamlit app on App Engine (GCP)? 【发布时间】:2020-03-21 22:35:38 【问题描述】:我的目标是部署一个用 Sreamlit 编写的简单网络应用,例如
app.py
import streamlit as st
st.title('Hello World!')
我可以通过在命令行中运行 streamlit run app.py
在本地计算机上运行它。
但是,我不确定如何修改 GCP 的 App Engine 中的 app.yaml 文件来部署它。
有什么建议吗?
【问题讨论】:
【参考方案1】:您可以为此使用 App Engine 柔性环境,因为您可以指定 custom runtime。要遵循的步骤是:
创建 Dockerfile:
FROM python:3.7
EXPOSE 8080
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD streamlit run app.py --server.port 8080
我已更新 Dockerfile,因为 App Engine flex 要求服务器侦听端口 8080。
创建包含所需依赖项的 requirements.txt 文件:
streamlit
创建 app.yaml 文件:
runtime: custom
env: flex
app.yaml 和 Dockerfile 必须在同一个文件夹中。上面的app.yaml设置很基础,更多信息可以在documentation找到。
然后部署你需要使用以下 gcloud 命令:gcloud app deploy
【讨论】:
您好。快速跟进;你会对 Cloud Run 做同样的事情吗?在大多数用例中,Cloud Run 是不是更好的 App Engine 版本? 使用 Dockerfile 您也可以部署到 Cloud Run,您可以看到所有需要的步骤here。关于 Cloud Run 与 App Engine 哪个更好,这两种产品都是无服务器的,并且有其独特的功能。 Cloud Run 基于开源的 Knative,并提供按使用付费的计费模式。它还支持无服务器 VPC 连接器,因此您可以拥有与使用 App Engine Flex 时相同的存储产品连接性。 与 GAE flex 相比,如果没有负载,Cloud Run 将缩放到 0,因此需要考虑这一点,因为如果所有服务实例都已关闭,您将收到预热请求闲置一段时间。 很好的答案,谢谢!我还有一个小问题:有没有使用“标准”环境的选项?因为使用 flex 环境要麻烦得多 @Shgidi 我认为您现在应该可以使用它了,和以前一样,限制因素是您可以安装的库数量。使用 python 3+,您可以安装所需的任何库,如文档 state。然后你可以在所需的依赖项中包含 gunicorn 并在 port 8080 上运行它我自己没有尝试过,但我认为它可以工作。以上是关于如何在 App Engine (GCP) 上部署 Streamlit 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
在 GCP App Engine 上部署 Django、Django REST Framework 后端和 VueJS + webpack 前端(标准)
部署到 GCP App Engine,但不提供服务器端渲染页面
Spring Boot GCP:将 PubSub 应用程序部署到 App Engine 标准环境时出现“Google 凭据”异常
连接到 GCP App Engine 上的 SocketIO 服务器时如何使用域而不是公共 IP?