如何在 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?

部署在 Google App Engine 上的应用的 /healthz 路由返回 404

将 GCP App Engine 限制为仅使用 1 个单元的 app engine flex core