Python: 使用 GitHub Actions 部署
如何使用 GitHub Actions 部署您的 Python 程式碼
👋 歡迎來到 Stackhero 文件!
Stackhero 提供現成的 Python 雲端 解決方案,帶來多種好處,包括:
- 只需一個簡單的
git push,即可在幾秒鐘內 部署您的應用程式。- 使用您自己的域名,並享受 HTTPS 證書的自動配置以增強安全性。
- 享受自動備份、一鍵更新,以及簡單、透明且可預測的定價,讓您高枕無憂。
- 得益於專用的私人 VM,獲得最佳的性能和強大的安全性。
節省時間並簡化您的生活:只需 5 分鐘 即可嘗試 Stackhero 的 Python 雲端託管 解決方案!
GitHub Actions 讓您輕鬆自動化各種任務,包括將您的 Python 程式碼直接部署到生產伺服器。
在本指南中,您將學習如何安全且可靠地設定 GitHub Actions,將您的 Python 程式碼部署到測試(staging)與生產(production)環境。
為了方便管理,您將使用兩個分支:staging 與 production。每當您將程式碼推送到這些分支時,系統就會自動將其部署到對應的 Stackhero 實例。
擁有 staging 實例並非強制。您可以依照本指南僅設置一個 production 實例。 不過,為了確保部署流程順暢,並在部署到生產環境時更有信心,強烈建議同時維護 staging 與 production 兩個實例。 這是業界的標準做法,也是能幫助您避免許多問題的可靠方式。
在開始之前,請確保您已擁有 GitHub 帳號,以及一個託管您程式碼的 repository。
建立 Python 服務
請前往您的 Stackhero 控制台,建立兩個 Stackhero 服務,一個用於 staging,一個用於 production。為了方便辨識,建議您將它們命名為「Production」與「Staging」。
還沒有 Stackhero 帳號嗎? 您只需兩分鐘即可免費註冊,然後只需幾個步驟即可建立您的 Python 雲端服務。
Production 與 Staging 服務範例
設定 SSH 金鑰
SSH 金鑰可讓 GitHub Actions 安全地連線到您的 Python 服務進行程式碼部署。這個步驟對於保護您的 Stackhero 服務至關重要。
在您的電腦上,您可以執行以下指令來產生新的 SSH 金鑰:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
設定公開金鑰
首先,顯示您剛剛產生的公開金鑰:
cat /tmp/ssh_key.pub
接著,在 Stackhero 控制台中,選擇您的「production」Python 服務,然後點擊「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
在 secret 設定中,請將名稱設為 STACKHERO_SSH_PRIVATE_KEY,並將私密金鑰貼到 Value 欄位。
設定 SSH 私密金鑰 secret
接下來,在 Environment variables 區塊中,點擊 Add variable。
設定變數
將名稱設為 STACKHERO_ENDPOINT,並將您的 Python 服務 endpoint 貼到 Value 欄位。您可以在 Stackhero 控制台找到這個 endpoint。
設定 endpoint 變數
如果您自訂過服務的網域名稱,請使用自訂的版本,而非 <XXXXXX>.stackhero-network.com。
刪除產生的金鑰
為了安全起見,建議您現在就從電腦中刪除這些 SSH 金鑰,因為之後將不再需要:
rm /tmp/ssh_key /tmp/ssh_key.pub
設定 GitHub Actions 工作流程
在您的 Git repository 中,若尚未存在 .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 an environment corresponding to the branch name in GitHub (in "Settings"/"Environments").
# Then add the corresponding secret "STACKHERO_SSH_PRIVATE_KEY" and variable "STACKHERO_ENDPOINT" in this 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 branch environment on GitHub under "Settings"/"Environments".
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
新增 workflow 檔案後,您可以提交變更:
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 環境
設定 staging 環境的步驟與 production 幾乎完全相同。您只需重複上述步驟,將所有出現 production 的地方改為 staging 即可。
環境設定完成後,您可以這樣建立 staging 分支:
git checkout -b staging
然後將 staging 分支推送到 GitHub:
git push --set-upstream origin staging
您的 staging 分支現在會自動部署到您指定的 Python staging 實例。
進階建議
建議您保護 production 與 staging 這兩個分支,以避免直接推送。這樣一來,團隊成員必須先建立 pull request 到 staging 分支,並由具備權限的使用者進行審查與合併。當變更在 staging 平台驗證無誤後,授權人員即可將 pull request 合併到 production 分支。
這樣的工作流程能確保只有經過審核的變更才會進入生產環境,同時也能提升可靠性,讓新功能在上線前先於 staging 測試。