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:
    # 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 部署到生产环境

恭喜!您的项目现已配置为通过 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 环境测试新功能,这将为您和您的团队带来更多信心和保障。