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)環境。
建議您在儲存庫中維護兩個分支:staging 和 production。每當您將程式碼推送到這些分支時,系統就會自動將其部署到對應的 Stackhero 實例。
擁有 staging 實例並非強制,但強烈建議同時使用 staging 和 production 實例,以確保部署流程順暢,並提升部署到生產環境時的信心。這是業界標準做法,有助於預防潛在問題。
開始之前,您需要一個 GitHub 帳號,並將您的 PHP 程式碼託管於儲存庫中。
建立 PHP 服務
首先,請登入您的 Stackhero 控制台,建立兩個 PHP 服務,一個用於 staging,一個用於 production。為了方便辨識,您可以將這兩個服務分別重新命名為「Production」和「Staging」。
如果您尚未擁有 Stackhero 帳號,您可以在兩分鐘內免費註冊,並透過幾個步驟快速建立您的 PHP 雲端服務。
Production 與 Staging 服務範例
設定 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。
新增 Secret
執行下列指令取得您先前產生的私鑰:
cat /tmp/ssh_key
在 GitHub 環境設定中:
-
Name輸入STACKHERO_SSH_PRIVATE_KEY,並將您的私鑰貼到Value欄位。
設定 SSH 私鑰 Secret -
在
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:
# 這裡列出哪些分支在 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 已部署至 production
恭喜!您的專案現在已設定為透過 GitHub Actions 自動部署到 production。
建立 staging 環境
您可以用與 production 相同的方式設定 staging 環境。只需重複上述步驟,並在相關欄位將 production 替換為 staging。
設定完成後,您可以這樣建立 staging 分支:
git checkout -b staging
然後推送到 GitHub:
git push --set-upstream origin staging
GitHub Actions 會自動將 staging 分支的程式碼部署到您設定的 staging PHP 服務。
進階建議
為了確保您的應用程式穩定且安全,建議您保護 production 和 staging 分支,避免直接 push。您可以設定必須透過 pull request 進行變更,例如只允許有部署權限的人審核並合併 staging 分支。當您的變更在 staging 驗證無誤後,授權使用者即可將其合併到 production 分支。
這種做法可確保只有經過審核的程式碼才能進入 production,並能在上線前於 staging 測試新功能,讓您和團隊更安心。