PHP: 使用 GitHub Actions 部署
如何使用 GitHub Actions 部署您的 PHP 代码
👋 欢迎来到 Stackhero 文档!
Stackhero 提供现成的 PHP 云 解决方案,具有多种优势,包括:
- 通过简单的
git push在几秒钟内 部署您的应用程序。- 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
- 享受自动备份、一键更新以及简单、透明和可预测的定价带来的安心。
- 通过私有和专用的 VM获得最佳的性能和强大的安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 PHP 云托管 解决方案!
GitHub Actions 是一款功能强大的工具,可让您自动化工作流程,包括将您的 PHP 代码直接部署到生产服务器。在本指南中,我们将逐步介绍如何通过 GitHub Actions 安全地将您的 PHP 应用部署到预发布(staging)和生产(production)环境。
推荐的做法是在您的代码仓库中维护两个分支:staging 和 production。每当您向这些分支推送代码时,代码将会自动部署到对应的 Stackhero 实例。
拥有 staging 实例并非强制要求。但强烈建议同时使用 staging 和 production 实例,以确保部署流程顺畅,并在上线生产环境时更有信心。这一做法符合行业标准,有助于预防潜在问题。
开始之前,您需要一个 GitHub 账号,并将您的 PHP 代码托管在一个仓库中。
创建 PHP 服务
首先,登录您的 Stackhero 控制台,创建两个 PHP 服务,分别用于 staging 和 production。为方便区分,您可以将这两个服务分别重命名为“Production”和“Staging”。
如果您还没有 Stackhero 账号,您可以在两分钟内免费注册一个,并通过几次点击即可设置您的 PHP 云服务。
生产和预发布服务示例
配置 SSH 密钥
SSH 密钥是让 GitHub Actions 在部署过程中安全连接到您的 PHP 服务的推荐方式。在本指南中,您将专门为此目的生成一对新的 SSH 密钥。
生成 SSH 密钥
在您的电脑上运行以下命令以生成新的 SSH 密钥:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
设置公钥
接下来,通过以下命令获取公钥:
cat /tmp/ssh_key.pub
前往您的 Stackhero 控制台,选择您的“Production” PHP 服务。点击“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
在 GitHub 环境设置中:
-
Name填写STACKHERO_SSH_PRIVATE_KEY,并将您的私钥粘贴到Value字段。
设置 SSH 私钥密钥 -
在
Environment variables部分,点击Add variable。
设置变量 -
Name填写STACKHERO_ENDPOINT,并将您的 PHP 服务 endpoint 粘贴到Value字段。您可以在 Stackhero 控制台找到该 endpoint。
设置 endpoint 变量
如果您自定义了服务的域名,请使用自定义域名替换 <XXXXXX>.stackhero-network.com。
删除生成的密钥
出于安全考虑,建议在设置完成后从您的电脑中删除生成的 SSH 密钥:
rm /tmp/ssh_key /tmp/ssh_key.pub
配置 GitHub Actions 工作流
接下来,您需要创建一个 GitHub Actions 工作流文件来自动化部署。在您的 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 a corresponding environment in GitHub (under "Settings" -> "Environments") for each branch
# Then add the secret "STACKHERO_SSH_PRIVATE_KEY" and variable "STACKHERO_ENDPOINT" in that 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 GitHub environment (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 部署到生产环境
恭喜!您的项目现已配置为通过 GitHub Actions 自动部署到生产环境。
创建预发布(staging)环境
您可以用与生产环境相同的方法配置 staging 环境。只需重复上述步骤,并在相关地方将 production 替换为 staging。
设置完成后,您可以这样创建 staging 分支:
git checkout -b staging
然后推送到 GitHub:
git push --set-upstream origin staging
GitHub Actions 会自动将 staging 分支的代码部署到您为 staging 配置的 PHP 服务。
深入实践
为了确保您的应用持续可靠和安全,建议保护您的 production 和 staging 分支,防止直接推送。您可以设置为仅允许通过 pull request 进行更改,例如让有部署权限的成员审核并合并 staging 分支的更改。待 staging 环境验证通过后,授权用户再将更改合并到 production 分支。
采用这种方式,只有经过审核的代码才能进入生产环境,您也可以在上线前先在 staging 环境测试新功能,这将为您和您的团队带来更多信心和保障。