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:
# 触发部署操作的分支列表
# 请确保为每个分支在 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 替换为 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 环境中测试新功能,帮助您和团队更安心地上线新版本。