在Google Cloud Platform上部署和定时运行Python项目

php中文网
发布: 2025-12-13 12:12:30
原创
417人浏览过

在google cloud platform上部署和定时运行python项目

本教程旨在指导用户如何在Google Cloud Platform (GCP) 上部署和自动化运行Python项目,特别适用于包含本地文件(如SQLite数据库)、外部依赖和需要定时执行的场景。文章将重点介绍如何利用GCP Compute Engine虚拟机实例来承载项目,并通过Linux系统的Crontab服务实现脚本的周期性调度,确保项目能够“设置一次,自动运行”,从而摆脱手动执行的繁琐。

1. 为什么选择Google Cloud Platform Compute Engine?

对于包含本地文件(如SQLite数据库)、自定义Python包和多个外部依赖的Python项目,GCP Compute Engine (CE) 提供了一个灵活且强大的解决方案。与Google Cloud Functions等无服务器服务相比,CE虚拟机实例提供了一个完整的Linux环境,允许您:

  • 完全控制运行时环境: 您可以自由安装任何Python版本、系统级依赖以及自定义库。
  • 本地文件系统支持: 项目中使用的SQLite数据库、配置文件、图片等本地文件可以直接存储在VM实例上,无需复杂的存储服务集成。
  • 持久化存储: 虚拟机实例的磁盘可以保存您的数据和代码,确保每次运行时都能访问到最新的状态。
  • 传统调度方式: 可以利用Linux自带的crontab工具进行简单而高效的任务调度。

虽然Cloud Functions在某些场景下更具成本效益和扩展性,但对于需要管理本地状态或拥有复杂依赖树的项目,Compute Engine往往是更直接和易于上手的选择。

2. 准备GCP Compute Engine实例

首先,您需要在GCP上创建一个Compute Engine虚拟机实例。

立即学习Python免费学习笔记(深入)”;

2.1 创建虚拟机实例

  1. 登录GCP控制台: 使用您的Google账号登录GCP。
  2. 导航至Compute Engine: 在左侧导航栏中找到“Compute Engine” -> “VM 实例”。
  3. 创建实例: 点击“创建实例”。
    • 名称: 为您的实例命名(例如:python-bot-vm)。
    • 区域和可用区: 选择离您或目标用户最近的区域,以减少延迟。
    • 机器配置: 对于大多数个人项目,选择一个经济实惠的机器类型,如e2-micro或e2-small,通常足以满足需求。
    • 启动磁盘: 选择一个基于Debian或Ubuntu的操作系统(例如:Debian GNU/Linux 11 (bullseye)),它们对Python和crontab的支持良好。磁盘大小默认为10-20GB通常足够。
    • 防火墙 勾选“允许 HTTP 流量”和“允许 HTTPS 流量”(如果您的项目需要对外提供Web服务,否则通常不需要)。
    • SSH密钥(可选但推荐): 如果您习惯使用SSH客户端,可以添加您的SSH公钥,以便直接通过终端连接,而不是通过GCP控制台。
  4. 创建实例: 点击“创建”。等待几分钟,实例就会启动。

2.2 连接到VM实例

实例启动后,您可以通过以下两种方式连接:

  • GCP控制台: 在VM实例列表中,找到您的实例,点击“SSH”按钮,选择“在浏览器窗口中打开”。
  • 本地SSH客户端: 如果您配置了SSH密钥,可以使用类似以下命令连接:
    ssh -i ~/.ssh/your_ssh_key your-username@your-vm-external-ip
    登录后复制

    其中your-ssh-key是您的私钥文件路径,your-username是GCP账户名或默认的用户(如ubuntu),your-vm-external-ip是VM实例的外部IP地址。

3. 部署Python项目

连接到VM实例后,需要将您的Python项目部署到服务器上,并安装必要的依赖。

3.1 传输项目文件

您可以选择多种方式将项目文件传输到VM实例:

  • Git 克隆: 如果您的项目托管在Git仓库中(GitHub, GitLab等),这是最推荐的方式。
    sudo apt update
    sudo apt install git -y
    git clone https://github.com/your-username/your-project.git
    cd your-project
    登录后复制
  • SCP (Secure Copy Protocol): 如果您通过本地SSH客户端连接,可以使用scp命令。
    # 在本地终端执行
    scp -r /path/to/local/project/cloudTest your-username@your-vm-external-ip:/home/your-username/
    登录后复制

    这将把本地的cloudTest目录复制到VM实例的/home/your-username/目录下。

3.2 安装Python及依赖

确保VM实例上安装了Python以及项目所需的依赖。

  1. 安装Python 3 (如果未安装): 大多数Debian/Ubuntu镜像默认已安装Python 3。
    sudo apt update
    sudo apt install python3 python3-pip -y
    登录后复制
  2. 创建虚拟环境 (推荐): 使用虚拟环境可以隔离项目依赖,避免与系统Python环境冲突。
    cd /home/your-username/cloudTest # 进入项目根目录
    python3 -m venv venv
    source venv/bin/activate # 激活虚拟环境
    登录后复制
  3. 安装项目依赖: 确保您的项目有一个requirements.txt文件,列出所有外部库。
    # 在项目根目录,虚拟环境已激活
    pip install -r requirements.txt
    登录后复制

    如果缺少requirements.txt,您需要手动安装:

    pip install tweepy # 示例:安装tweepy库
    登录后复制

    对于示例项目,可能需要tweepy。

3.3 配置敏感信息

项目中的config.py文件通常包含API密钥等敏感信息。直接上传这些文件不安全。推荐使用环境变量或GCP Secret Manager。

Health AI健康云开放平台
Health AI健康云开放平台

专注于健康医疗垂直领域的AI技术开放平台

Health AI健康云开放平台 113
查看详情 Health AI健康云开放平台
  • 环境变量:
    # 在VM实例上设置环境变量
    export CONSUMER_KEY="your_consumer_key"
    export CONSUMER_SECRET="your_consumer_secret"
    # ... 其他API密钥
    登录后复制

    为了让这些变量在每次脚本运行时都可用,可以将其添加到~/.bashrc或~/.profile文件中,并在crontab任务中加载。 或者,直接在Python脚本中读取环境变量:

    import os
    CONSUMER_KEY = os.getenv("CONSUMER_KEY")
    CONSUMER_SECRET = os.getenv("CONSUMER_SECRET")
    # ...
    登录后复制

    注意: 对于crontab任务,环境变量的加载方式可能不同。最可靠的方法是在crontab条目中直接设置或通过一个wrapper脚本来加载。

3.4 确保脚本可执行性

为了方便crontab直接调用脚本,可以给主执行脚本添加可执行权限。

chmod +x /home/your-username/cloudTest/test.py
登录后复制

如果您的脚本顶部有Shebang(例如 #!/usr/bin/env python3),则可以直接执行。否则,您需要在crontab命令中显式指定Python解释器。

4. 使用Crontab调度任务

crontab是Linux系统下用于设置周期性执行任务的工具。

4.1 编辑Crontab任务

  1. 打开Crontab编辑器:

    EDITOR=nano crontab -e
    登录后复制

    (您也可以将nano替换为vi或其他您熟悉的编辑器)。

  2. 添加任务行: 在打开的文件末尾添加一行,定义您的调度任务。 假设您希望每天早上6:30运行脚本,并且您的脚本位于/home/your-username/cloudTest/test.py。 如果脚本有Shebang且已添加可执行权限:

    30 6 * * * /home/your-username/cloudTest/test.py
    登录后复制

    推荐方式(显式指定Python解释器和虚拟环境):

    30 6 * * * /home/your-username/cloudTest/venv/bin/python /home/your-username/cloudTest/test.py >> /home/your-username/cloudTest/cron.log 2>&1
    登录后复制
    • 30 6 * * *:表示每天的6点30分执行(分钟 小时 日 月 周)。
    • /home/your-username/cloudTest/venv/bin/python:指定虚拟环境中的Python解释器路径。
    • /home/your-username/cloudTest/test.py:您的Python脚本的完整路径。
    • >> /home/your-username/cloudTest/cron.log 2>&1:将脚本的所有标准输出和错误输出重定向到一个日志文件,这对于调试非常重要。
  3. 保存并退出:

    • 如果使用nano:按Ctrl+O保存,然后按Ctrl+X退出。
    • 如果使用vi:按Esc,输入:wq,然后按Enter。

Crontab任务会在指定时间自动执行。

4.2 Crontab语法速查

Crontab任务行由五个时间字段和一个命令组成:

分 时 日 月 周 命令
登录后复制
  • 分 (Minute): 0-59
  • 时 (Hour): 0-23
  • 日 (Day of Month): 1-31
  • 月 (Month): 1-12
  • 周 (Day of Week): 0-7 (0和7都代表星期日)

特殊字符:

  • *:匹配所有值。
  • ,:列举多个值(例如:1,15表示每月1号和15号)。
  • -:指定范围(例如:9-17表示9点到17点)。
  • /:指定步长(例如:*/10表示每10分钟)。

5. 注意事项与最佳实践

  • 日志记录: 务必将Crontab任务的输出重定向到日志文件。这对于检查脚本是否成功运行以及调试错误至关重要。
  • 数据库管理: 示例项目使用了SQLite。对于小型个人项目,将其存储在VM实例上是可行的。但对于生产环境或需要高可用性的应用,强烈建议使用GCP提供的托管数据库服务,如Cloud SQL (MySQL/PostgreSQL) 或 Firestore,它们提供备份、扩展和高可用性功能。
  • 安全性:
    • API密钥: 避免将敏感信息硬编码在代码中。优先使用GCP Secret Manager或环境变量。
    • VM访问: 限制SSH访问,只允许必要的IP地址或使用Identity-Aware Proxy (IAP)。
  • 错误处理: 在Python脚本中实现健壮的错误处理机制,例如使用try-except块捕获异常,并记录详细的错误信息。
  • 资源管理: 定期检查VM实例的CPU、内存和磁盘使用情况。如果项目资源需求增长,考虑升级实例类型或优化代码。对于长期不运行的实例,可以停止它以节省成本。
  • 时区: Crontab任务的时间基于VM实例的时区。确保VM实例的时区设置符合您的预期。

6. 总结

通过GCP Compute Engine虚拟机实例和Linux的crontab服务,您可以高效地部署和自动化运行Python项目。这种方法提供了极大的灵活性和控制力,特别适合那些需要本地文件系统、复杂依赖管理或特定运行时环境的个人自动化项目。遵循上述步骤和最佳实践,您将能够成功地将您的Python脚本从手动执行转变为“设置一次,自动运行”的云端解决方案。

以上就是在Google Cloud Platform上部署和定时运行Python项目的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号