PHP: 使用 GitHub Actions 部署

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

👋 欢迎使用 Stackhero 文档!

Stackhero 提供了一种即用型 PHP 云 解决方案,具有众多优势,包括:

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

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

GitHub Actions 是一款强大的工具,可帮助您自动化工作流程,包括将 PHP 代码直接部署到生产服务器。在本指南中,我们将介绍如何通过 GitHub Actions 安全地将您的 PHP 应用部署到预发布(staging)和生产(production)环境。

推荐的做法是在您的代码仓库中维护两个分支:stagingproduction。每当您向这些分支推送代码时,代码会自动部署到对应的 Stackhero 实例。

拥有 staging 实例并非强制要求。但强烈建议同时使用 staging 和 production 实例,以确保部署流程顺畅,并在生产环境部署时更有信心。这一做法符合行业标准,有助于预防潜在问题。

开始之前,您需要一个 GitHub 账号,并将您的 PHP 代码托管在仓库中。

首先,登录您的 Stackhero 控制台,创建两个 PHP 服务,分别用于 staging 和 production。为便于管理,您可以将这两个服务分别重命名为“Production”和“Staging”。

如果您还没有 Stackhero 账号,只需两分钟即可免费注册,并通过几次点击快速部署您的 PHP 云服务

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

SSH 密钥是让 GitHub Actions 在部署过程中安全连接到您的 PHP 服务的推荐方式。本指南将指导您为此目的专门生成一对 SSH 密钥。

在您的电脑上运行以下命令以生成新的 SSH 密钥:

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

接下来,通过以下命令获取公钥:

cat /tmp/ssh_key.pub

前往 Stackhero 控制台,选择您的“Production” PHP 服务。点击“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

在 GitHub 环境设置中:

  • Name 填写 STACKHERO_SSH_PRIVATE_KEY,并将您的私钥粘贴到 Value 字段。

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

  • Environment variables 部分,点击 Add variable

    设置变量设置变量

  • Name 填写 STACKHERO_ENDPOINT,并将您的 PHP 服务 endpoint 粘贴到 Value 字段。您可以在 Stackhero 控制台找到该 endpoint。

    设置 endpoint 变量设置 endpoint 变量

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

出于安全考虑,建议在配置完成后从您的电脑中删除生成的 SSH 密钥:

rm /tmp/ssh_key /tmp/ssh_key.pub

接下来,您需要创建一个 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 部署到生产环境

恭喜!您的项目现已配置为通过 GitHub Actions 自动部署到生产环境。

您可以按照与生产环境相同的方式配置 staging 环境。只需在相关步骤中将 production 替换为 staging 即可。

设置完成后,您可以这样创建 staging 分支:

git checkout -b staging

然后推送到 GitHub:

git push --set-upstream origin staging

GitHub Actions 会自动将 staging 分支的代码部署到您为 staging 配置的 PHP 服务。

为了确保您的应用持续可靠和安全,建议保护 productionstaging 分支,禁止直接推送。您可以设置为所有更改必须通过 Pull Request 合并,例如只允许有部署权限的成员审核并合并到 staging 分支。待 staging 环境验证通过后,授权用户再将更改合并到 production 分支。

采用这种方式可以确保只有经过审核的代码才能进入生产环境,并且可以在 staging 环境中测试新功能,帮助您和团队更安心地上线新版本。