Python: 使用 GitHub Actions 部署

如何使用 GitHub Actions 部署您的 Python 代码

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 Python 云 解决方案,具有众多优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受 自动备份一键更新,以及简单、透明和可预测的定价,让您高枕无忧。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 Python 云托管 解决方案!

GitHub Actions 让自动化任务变得简单,包括将您的 Python 代码直接部署到生产服务器。

在本指南中,您将了解如何安全可靠地配置 GitHub Actions,将您的 Python 代码部署到预发布(staging)和生产(production)环境。

为了便于管理,您将使用两个分支:stagingproduction。每当您向这些分支推送代码时,代码会自动部署到对应的 Stackhero 实例。

拥有 staging 实例并非强制要求。您可以按照本指南操作,仅使用一个生产实例。 但为了确保部署流程顺畅,并在生产环境部署时更有信心,强烈建议同时维护 staging 和 production 两个实例。 这种做法是业界标准,也是值得信赖的方法,可以帮助您避免许多潜在问题。

在开始之前,请确保您已经拥有一个 GitHub 账号,并且代码已托管在一个仓库中。

请前往您的 Stackhero 控制台,创建两个 Stackhero 服务,一个用于 staging,一个用于 production。为方便区分,建议将它们命名为“Production”和“Staging”。

还没有 Stackhero 账号? 您只需两分钟即可免费注册,然后通过几次点击即可创建您的 Python 云服务

生产和预发布服务示例生产和预发布服务示例

SSH 密钥允许 GitHub Actions 安全地连接到您的 Python 服务进行代码部署。这一步对于保护您的 Stackhero 服务至关重要。

在您的电脑上,您可以通过以下命令生成新的 SSH 密钥:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

首先,显示您刚刚生成的公钥:

cat /tmp/ssh_key.pub

接下来,在 Stackhero 控制台中,选择您的“production” Python 服务,点击“Configure”按钮。

获取服务设置获取服务设置

请按照以下步骤操作:

  1. SSH public keys 下,点击 Add a public key
  2. Description 中输入 GitHub Action
  3. Key 中粘贴您刚刚复制的公钥。

添加公钥添加公钥

进入您的 GitHub 项目页面,点击 Settings,然后选择 Environments。点击 New environment

配置 GitHub 环境配置 GitHub 环境

Name 字段中输入“production”,并确认。

设置环境设置环境

点击 No restriction 按钮,选择 Selected branches and tags

设置环境限制设置环境限制

然后,点击 Add deployment branch or tag rule,在 Name pattern 字段输入“production”,点击 Add rule

设置环境分支设置环境分支 设置环境分支设置环境分支

Environment secrets 部分,点击 Add secret

添加密钥添加密钥

现在,显示您之前生成的私钥:

cat /tmp/ssh_key

在密钥设置中,将 STACKHERO_SSH_PRIVATE_KEY 作为 Name,粘贴私钥作为 Value。

设置 SSH 私钥密钥设置 SSH 私钥密钥

接下来,在 Environment variables 部分,点击 Add variable

设置变量设置变量

输入 STACKHERO_ENDPOINT 作为 Name,将您的 Python 服务 endpoint 粘贴为 Value。您可以在 Stackhero 控制台中找到该 endpoint。

设置 endpoint 变量设置 endpoint 变量

如果您自定义了服务的域名,请使用自定义域名,而不是 <XXXXXX>.stackhero-network.com。

出于安全考虑,建议现在就从您的电脑中删除 SSH 密钥,因为后续不再需要:

rm /tmp/ssh_key /tmp/ssh_key.pub

在您的 Git 仓库中,如果还没有 .github/workflows 目录,请新建一个。然后在该目录下添加名为 deploy-to-stackhero.yml 的文件。

# 文件:.github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # 下面的分支列表会在 git push 时触发部署操作。
    # 请确保在 GitHub("Settings"/"Environments")中为每个分支创建对应的环境。
    # 然后在该环境中添加对应的密钥 "STACKHERO_SSH_PRIVATE_KEY" 和变量 "STACKHERO_ENDPOINT"。
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # 密钥 "STACKHERO_SSH_PRIVATE_KEY" 和变量 "STACKHERO_ENDPOINT" 需要在 GitHub 的对应分支环境("Settings"/"Environments")中定义。
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

添加工作流文件后,您可以提交更改:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

您可以通过以下命令创建 production 分支:

git checkout -b production

然后将更改推送到 GitHub:

git push --set-upstream origin production

这样,您的代码就会被推送到 GitHub 的 production 分支,并触发 GitHub Actions,将代码部署到您的 Stackhero 实例。

要查看部署状态,只需访问您的 GitHub 项目页面并点击 Actions

已部署到生产环境的 GitHub Actions已部署到生产环境的 GitHub Actions

就是这样。现在您已经通过 GitHub Actions 实现了自动化生产环境部署。

配置 staging 环境与 production 几乎完全相同。您只需重复上述步骤,将所有出现的 production 替换为 staging

环境配置完成后,可以这样创建 staging 分支:

git checkout -b staging

然后将 staging 分支推送到 GitHub:

git push --set-upstream origin staging

您的 staging 分支现在会自动部署到您为预发布指定的 Python 实例。

建议保护 productionstaging 分支,防止直接推送。这样,团队成员需要先向 staging 分支创建 Pull Request,由有权限的用户进行审核和合并。待变更在 staging 平台验证无误后,再由授权人员将 Pull Request 合并到 production 分支。

这种工作流有助于确保只有经过审核的变更才能进入生产环境,同时通过在 staging 上测试新功能,提高了上线的可靠性。