gitHub.com Actions自动化发布

步驟一:準備伺服器環境生成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 裡:

  1. 開啟你的 GitHub 專案倉庫,進入 Settings -> Secrets and variables -> Actions。

  2. 點擊 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
相关推荐
YonyouHRSaaS23 分钟前
从安全、信创、运维三方面看,人力资源管理系统哪种部署方式更适合企业HR?
运维·安全·hr系统·人力资源管理系统·hr saas·人事管理系统
鬼手点金36 分钟前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
倔强的石头1061 小时前
【Linux指南】动静态库系列(十二):库工程发布与错误排查:从能跑到可维护
linux·运维·服务器
wdfk_prog1 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
掉进电商坑三年没爬出来的东叔1 小时前
云服务器搭建个人网站实战:从零到公网访问,含域名HTTPS
运维·服务器·https
IT大白鼠1 小时前
彭大帅的AI运维助手跨出 Linux:全面接管 Windows 服务器
运维·服务器·人工智能
来自于狂人1 小时前
GitHub 开源趋势日报 | 2026年10月7日用 AI Agent 逆向工程一切
人工智能·开源·github
reasonsummer1 小时前
【办公类-131-05】20261007中2班周计划制作(原资料Word单元格不统一 失败)
运维·服务器
Mikko72 小时前
JVM 线上排查实战(六):JFR 怎么用?JDK 8 要不要加 UnlockCommercialFeatures、jfr 命令在哪、录的文件为什么读不了
java·运维·jvm·后端
蚰蜒螟2 小时前
一次挂载的完整旅程:Linux 内核 VFS 到 ext4 的调用链剖析
linux·运维·服务器