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 環境。
建議您在 Git 儲存庫中維護兩個分支: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 workflow 檔案來自動化部署。在您的 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」)建立對應的環境
# 並在該環境中新增 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 測試新功能,進一步提升部署的信心與安心感。