PHP: 使用 GitHub Actions 部署

如何使用 GitHub Actions 部署您的 PHP 程式碼

👋 歡迎來到 Stackhero 文檔!

Stackhero 提供一個即用型的 PHP cloud 解決方案,帶來多項優勢,包括:

  • 只需一個簡單的 git push,即可在幾秒鐘內部署您的應用程式。
  • 使用您自己的域名,並享受 HTTPS 證書的自動配置,以增強安全性。
  • 享受自動備份一鍵更新,以及簡單、透明且可預測的定價,讓您高枕無憂。
  • 通過專用的私人 VM獲得最佳的性能和強大的安全性

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 PHP cloud hosting 解決方案!

GitHub Actions 是一個強大的工具,可讓您自動化工作流程,包括將您的 PHP 程式碼直接部署到生產伺服器。在本指南中,我們將說明如何使用 GitHub Actions,安全地將您的 PHP 應用程式部署到測試(staging)和生產(production)環境。

建議您在儲存庫中維護兩個分支:stagingproduction。每當您將程式碼推送到這些分支時,系統就會自動將其部署到對應的 Stackhero 實例。

擁有 staging 實例並非強制,但強烈建議同時使用 staging 和 production 實例,以確保部署流程順暢,並提升部署到生產環境時的信心。這是業界標準做法,有助於預防潛在問題。

開始之前,您需要一個 GitHub 帳號,並將您的 PHP 程式碼託管於儲存庫中。

首先,請登入您的 Stackhero 控制台,建立兩個 PHP 服務,一個用於 staging,一個用於 production。為了方便辨識,您可以將這兩個服務分別重新命名為「Production」和「Staging」。

如果您尚未擁有 Stackhero 帳號,您可以在兩分鐘內免費註冊,並透過幾個步驟快速建立您的 PHP 雲端服務

Production 與 Staging 服務範例Production 與 Staging 服務範例

建議使用 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

    新增 Secret新增 Secret

執行下列指令取得您先前產生的私鑰:

cat /tmp/ssh_key

在 GitHub 環境設定中:

  • Name 輸入 STACKHERO_SSH_PRIVATE_KEY,並將您的私鑰貼到 Value 欄位。

    設定 SSH 私鑰 Secret設定 SSH 私鑰 Secret

  • 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:
    # 這裡列出哪些分支在 git push 時會觸發部署動作
    # 請務必為每個分支在 GitHub(「Settings」->「Environments」)建立對應的環境
    # 並在該環境中新增 Secret "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:
        # Secret "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 已部署至 productionGitHub Actions 已部署至 production

恭喜!您的專案現在已設定為透過 GitHub Actions 自動部署到 production。

您可以用與 production 相同的方式設定 staging 環境。只需重複上述步驟,並在相關欄位將 production 替換為 staging

設定完成後,您可以這樣建立 staging 分支:

git checkout -b staging

然後推送到 GitHub:

git push --set-upstream origin staging

GitHub Actions 會自動將 staging 分支的程式碼部署到您設定的 staging PHP 服務。

為了確保您的應用程式穩定且安全,建議您保護 productionstaging 分支,避免直接 push。您可以設定必須透過 pull request 進行變更,例如只允許有部署權限的人審核並合併 staging 分支。當您的變更在 staging 驗證無誤後,授權使用者即可將其合併到 production 分支。

這種做法可確保只有經過審核的程式碼才能進入 production,並能在上線前於 staging 測試新功能,讓您和團隊更安心。