步驟一:準備伺服器環境生成SSH Key
bash
ssh-keygen -t rsa -b 4096 -C "github-actions" -f ~/.ssh/id_rsa -N ""
將公鑰寫入授權清單:
bash
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
查看公鑰(Public Key)
公鑰是可以公開分享的,通常用於添加到 GitHub、GitLab 或伺服器的授權列表中。
執行以下命令即可查看:
bash
cat ~/.ssh/id_rsa.pub
查看私鑰(Private Key)
私鑰是絕對保密的,相當於你的「密碼」,千萬不要泄露給任何人。它通常保存在本地,用於證明你的身份。
執行以下命令即可查看:
bash
cat ~/.ssh/id_rsa
步驟二:配置 GitHub Repository Secrets(安全密鑰)
為了不讓伺服器 IP 和 SSH 私鑰曝光在程式碼中,我們將敏感資訊放在 GitHub 的 Secrets 裡:
-
開啟你的 GitHub 專案倉庫,進入 Settings -> Secrets and variables -> Actions。
-
點擊 New repository secret,依序新增以下變數:
| Secret 名稱 | 填入內容 |
|---|---|
SERVER_HOST |
你的伺服器 IP 位址 |
SERVER_USER |
伺服器登入帳號(通常為 root) |
SERVER_SSH_KEY |
上一步生成的私鑰 內容(~/.ssh/id_rsa 的完整文字,包含 BEGIN/END header) |
SERVER_PORT |
伺服器的 SSH 埠號(預設為 22,若寶塔有改過請填修改後的埠號) |
步驟三:在專案中編寫 Docker 設定檔
在專案根目錄下準備好你的 Dockerfile 與 docker-compose.yml:
docker-compose.yml 範例:
bash
version: '3.8'
services:
web_app:
build: .
container_name: my_bt_app
restart: always
ports:
- "8080:8080" # 將容器埠號映射到伺服器的 8080
environment:
- NODE_ENV=production
步驟四:編寫 GitHub Actions Workflow(自動化腳本)
在專案根目錄下建立資料夾與檔案:.github/workflows/deploy.yml,內容如下:
bash
name: Auto Deploy to BT Panel Docker
# 當 main 分支有 git push 時觸發
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
uses: actions/checkout@v4
- name: SSH and Deploy to Server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
# 1. 切換到寶塔上的專案目錄
cd /www/wwwroot/my-app
# 2. 拉取 GitHub 最新程式碼
git pull origin main
# 3. 重新構建並啟動 Docker 容器 (背景執行)
docker-compose up -d --build
# 4. 清理無用的舊鏡像 (避免伺服器硬碟被塞爆)
docker image prune -f
測試與驗證
完成了上述設定後,只要你在本地修改程式碼並執行:
bash
git add .
git commit -m "update app"
git push origin main