Python: 使用 GitHub Actions 部署
如何使用 GitHub Actions 部署您的 Python 代码
👋 欢迎来到 Stackhero 文档!
Stackhero 提供现成的 Python 云 解决方案,具有众多优势,包括:
- 通过简单的
git push在几秒钟内 部署您的应用程序。- 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
- 享受 自动备份、一键更新,以及简单、透明和可预测的定价,让您高枕无忧。
- 通过私有和专用的 VM获得最佳的性能和强大的安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 Python 云托管 解决方案!
GitHub Actions 让自动化任务变得简单,包括将您的 Python 代码直接部署到生产服务器。
在本指南中,您将了解如何安全可靠地配置 GitHub Actions,将您的 Python 代码部署到预发布(staging)和生产(production)环境。
为了便于管理,您将使用两个分支:staging 和 production。每当您向这些分支推送代码时,代码会自动部署到对应的 Stackhero 实例。
拥有 staging 实例并非强制要求。您可以按照本指南操作,仅使用一个生产实例。 但为了确保部署流程顺畅,并在生产环境部署时更有信心,强烈建议同时维护 staging 和 production 两个实例。 这种做法是业界标准,也是值得信赖的方法,可以帮助您避免许多潜在问题。
在开始之前,请确保您已经拥有一个 GitHub 账号,并且代码已托管在一个仓库中。
创建 Python 服务
请前往您的 Stackhero 控制台,创建两个 Stackhero 服务,一个用于 staging,一个用于 production。为方便区分,建议将它们命名为“Production”和“Staging”。
还没有 Stackhero 账号? 您只需两分钟即可免费注册,然后通过几次点击即可创建您的 Python 云服务。
生产和预发布服务示例
配置 SSH 密钥
SSH 密钥允许 GitHub Actions 安全地连接到您的 Python 服务进行代码部署。这一步对于保护您的 Stackhero 服务至关重要。
在您的电脑上,您可以通过以下命令生成新的 SSH 密钥:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
设置公钥
首先,显示您刚刚生成的公钥:
cat /tmp/ssh_key.pub
接下来,在 Stackhero 控制台中,选择您的“production” Python 服务,点击“Configure”按钮。
获取服务设置
请按照以下步骤操作:
- 在
SSH public keys下,点击Add a public key。 - 在
Description中输入GitHub Action。 - 在
Key中粘贴您刚刚复制的公钥。
添加公钥
设置私钥
进入您的 GitHub 项目页面,点击 Settings,然后选择 Environments。点击 New environment。
配置 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 私钥密钥
接下来,在 Environment variables 部分,点击 Add variable。
设置变量
输入 STACKHERO_ENDPOINT 作为 Name,将您的 Python 服务 endpoint 粘贴为 Value。您可以在 Stackhero 控制台中找到该 endpoint。
设置 endpoint 变量
如果您自定义了服务的域名,请使用自定义域名,而不是 <XXXXXX>.stackhero-network.com。
删除生成的密钥
出于安全考虑,建议现在就从您的电脑中删除 SSH 密钥,因为后续不再需要:
rm /tmp/ssh_key /tmp/ssh_key.pub
配置 GitHub Actions 工作流
在您的 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 实现了自动化生产环境部署。
创建预发布(staging)环境
配置 staging 环境与 production 几乎完全相同。您只需重复上述步骤,将所有出现的 production 替换为 staging。
环境配置完成后,可以这样创建 staging 分支:
git checkout -b staging
然后将 staging 分支推送到 GitHub:
git push --set-upstream origin staging
您的 staging 分支现在会自动部署到您为预发布指定的 Python 实例。
深入实践
建议保护 production 和 staging 分支,防止直接推送。这样,团队成员需要先向 staging 分支创建 Pull Request,由有权限的用户进行审核和合并。待变更在 staging 平台验证无误后,再由授权人员将 Pull Request 合并到 production 分支。
这种工作流有助于确保只有经过审核的变更才能进入生产环境,同时通过在 staging 上测试新功能,提高了上线的可靠性。