如何在 Google 应用引擎上部署 Streamlit 应用程序 (GCP)?

5

我打算部署一个使用Streamlit编写的简单Web应用程序,例如:

app.py

import streamlit as st
st.title('Hello World!')

我可以在本地机器上运行此应用程序,只需在命令行中运行streamlit run app.py

然而,我不知道如何修改GCP的App Engine中的app.yaml文件以部署此应用程序。

有什么建议吗?

1个回答

11

您可以使用App Engine灵活环境,因为您可以指定自定义运行时。要遵循的步骤如下:

  1. 创建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 的设置非常基本,更多信息可以在文档中找到。

    然后,要部署应用程序,您需要使用以下 gcloud 命令:gcloud app deploy


    你好。快速跟进一下,您是否可以在Cloud Run上做同样的事情?在大多数使用情况下,Cloud Run是否是App Engine的更好版本? - Myccha
    使用Dockerfile,您也可以将其部署到Cloud Run,您可以在此处查看所有必要的步骤(https://cloud.google.com/run/docs/quickstarts/build-and-deploy)。关于Cloud Run与App Engine之间哪个更好,两种产品都是无服务器的,并且具有其独特的功能。Cloud Run基于开源Knative,并提供按使用量计费模型。它还支持Serverless VPC连接器,因此您可以在使用App Engine Flex时拥有与存储产品相同的连接性。 - bhito
    与GAE Flex相比,Cloud Run在没有负载时会自动缩容至0,因此需要考虑这一点,因为如果所有服务实例在空闲一定时间后已关闭,则需要进行预热请求。 - bhito
    非常好的答案,谢谢!我还有一个小问题:是否有使用“标准”环境的选项?因为使用flex环境更加麻烦。 - Shgidi
    1
    @Shgidi 我认为你现在应该能够使用它了,因为以前的限制因素是你可以安装的库的数量。使用Python 3+,你可以安装任何需要的库,如文档所述。然后你可以将gunicorn包含在所需的依赖项中,并在8080端口上运行它。我自己没有尝试过,但我认为应该可以工作。 - bhito
    在GAE flex上无法运行,我从gcloud app deploy中收到了一个错误: ERROR: (gcloud.app.deploy) Error Response: [4] 在处理任务/app-engine-flex/flex_await_healthy/flex_await_healthy>2022-11-29T07:55:05.850Z21335.wa.2时发生内部错误:您的部署未能在规定时间内变为健康状态,因此已回滚。如果您认为这是一个错误,请尝试调整“readiness_check”部分中的“app_start_timeout_sec”设置。 - Shrike

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接