如何在Google Cloud部署需调用多脚本的Python Dash应用
部署Dash应用到Google Cloud并实现脚本触发+CSV读取方案
核心前提说明
云端环境的本地文件系统是临时且不可靠的,不能像本地那样用目录存储CSV文件,必须改用Google Cloud Storage(GCS)存储生成的文件,所有脚本和app.py都要通过GCS完成数据读写。
方案一:Cloud Run部署(推荐,无服务器轻量)
Cloud Run适合容器化部署,支持自动扩缩容,运维成本低。
1. 代码与依赖准备
- 将
app.py和3个脚本放在同一目录,创建requirements.txt列出所有依赖(包括dash、google-cloud-storage等) - 修改脚本和
app.py的文件读写逻辑:- 脚本生成CSV后,上传到GCS指定存储桶(比如
my-dash-csv-bucket) app.py从GCS对应路径读取CSV,而非本地目录- 示例代码片段(上传GCS):
from google.cloud import storage def upload_to_gcs(bucket_name, source_file_name, destination_blob_name): storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(destination_blob_name) blob.upload_from_filename(source_file_name) - 读取GCS的代码:
def download_from_gcs(bucket_name, source_blob_name, destination_file_name): storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(source_blob_name) blob.download_to_filename(destination_file_name)
- 脚本生成CSV后,上传到GCS指定存储桶(比如
2. 容器化打包
创建Dockerfile,内容示例:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["gunicorn", "--bind", ":8080", "--workers", "1", "--threads", "8", "app:server"]
(注:Dash应用需在app.py中添加server = app.server,供gunicorn调用)
3. 脚本触发逻辑
在app.py需要触发脚本的位置,用subprocess调用,示例:
import subprocess import os # 触发脚本1 subprocess.run(["python", "script1.py"], check=True, cwd=os.getcwd()) # 同理触发脚本2、3
4. 部署步骤
- 先创建GCS存储桶:用Google Cloud控制台或执行
gsutil mb gs://my-dash-csv-bucket命令 - 给Cloud Run服务分配GCS读写权限:部署时选择“允许全访问Cloud API”,或创建自定义服务账号并绑定
roles/storage.objectAdmin权限 - 执行部署命令:
gcloud run deploy my-dash-app --source . --region us-central1 --allow-unauthenticated
方案二:App Engine部署(适合快速托管Web应用)
App Engine是PaaS服务,无需自行管理容器,部署流程简单。
1. 代码与依赖调整
和Cloud Run一致,将所有文件读写逻辑切换到GCS,创建requirements.txt。
2. 创建app.yaml配置文件
内容示例:
runtime: python39 entrypoint: gunicorn --bind :$PORT --workers 1 --threads 8 app:server env_variables: GCS_BUCKET_NAME: "my-dash-csv-bucket" instance_class: F2
3. 权限与脚本触发
- 同样在
app.py中用subprocess调用脚本 - 给App Engine服务账号添加GCS读写权限:在IAM控制台找到
[项目ID]@appspot.gserviceaccount.com,绑定roles/storage.objectAdmin角色
4. 部署命令
gcloud app deploy
方案三:Compute Engine部署(与本地环境最接近)
如果想完全复刻本地运行逻辑,可使用虚拟机,适合有基础运维经验的场景。
1. 创建虚拟机实例
在Google Cloud控制台创建Compute Engine虚拟机,选择合适的机器类型,启动后通过SSH连接实例。
2. 部署应用
- 在虚拟机上安装Python、Git等工具
- 克隆或上传代码到虚拟机
- 安装依赖:
pip install -r requirements.txt - 用systemd配置服务,让
app.py开机自启
3. 文件存储与脚本触发
- 可使用虚拟机本地磁盘存储CSV,但重启后数据会丢失,建议用
gcsfuse工具将GCS存储桶挂载到本地目录,实现本地目录式的GCS读写 - 脚本触发逻辑与本地完全一致,用
subprocess调用即可
关键注意事项
- 所有文件读写必须依赖GCS,不能使用云端本地临时目录
- 确保服务账号拥有足够的GCS权限,避免读写失败
- 若脚本运行时间较长,建议改用Cloud Tasks或Cloud Functions异步触发,避免阻塞Dash应用的请求处理
内容的提问来源于stack exchange,提问作者smith
相关产品推荐
相关产品推荐

