Python: 使用 GitHub Actions 部署

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

👋 欢迎来到 Stackhero 文档!

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

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

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

GitHub Actions 让您能够轻松自动化任务,包括将 Python 代码直接部署到生产服务器。

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

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

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

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

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

还没有 Stackhero 账号? 您可以在两分钟内免费注册,然后只需几步即可创建您的 Python cloud 服务

Production 和 Staging 服务示例Production 和 Staging 服务示例

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

在密钥设置中,Name 填写 STACKHERO_SSH_PRIVATE_KEY,Value 粘贴私钥内容。

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

接下来,在 Environment variables 区域,点击 Add variable

设置变量设置变量

Name 填写 STACKHERO_ENDPOINT,Value 粘贴您的 Python 服务 endpoint。您可以在 Stackhero 控制台中找到该 endpoint。

设置 endpoint 变量设置 endpoint 变量

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

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

rm /tmp/ssh_key /tmp/ssh_key.pub

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

# File: .github/workflows/deploy-to-stackhero.yml

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

on:
  push:
    # List of branches that will trigger the deploy action following a git push.
    # Do not forget to create an environment corresponding to the branch name in GitHub (in "Settings"/"Environments").
    # Then add the corresponding secret "STACKHERO_SSH_PRIVATE_KEY" and variable "STACKHERO_ENDPOINT" in this environment.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # The secret "STACKHERO_SSH_PRIVATE_KEY" and the variable "STACKHERO_ENDPOINT" should be defined in the corresponding branch environment on GitHub under "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 已部署到 productionGitHub Actions 已部署到 production

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

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

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

git checkout -b staging

然后将 staging 分支推送到 GitHub:

git push --set-upstream origin staging

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

建议保护 productionstaging 分支,防止直接 push。这样,团队成员需要通过 pull request 向 staging 分支提交代码,由有权限的用户进行审核和合并。待 staging 平台验证通过后,授权人员可将 pull request 合并到 production 分支。

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