告別手動 FTP 上傳地獄!用 GitHub Actions 打造 WordPress 自動化部署流程,優雅又高效!

2025/09/15 | WP 開發技巧

告別手動 FTP 上傳地獄!用 GitHub Actions 打造 WordPress 自動化部署流程,優雅又高效!

嗨,我是浪花科技的資深工程師 Eric。如果你跟我一樣,是從那個還得用 FTP 軟體,一個個檔案手動拖拉上傳到伺服器的遠古時代走過來的,那你一定懂那種半夜上線,心驚膽顫,深怕傳錯一個檔案整個網站就掛掉的恐懼。上傳完還要手動清快取、進資料庫跑指令… 一套流程下來,半小時就過去了,還滿身冷汗。

坦白說,在 2025 年的今天,如果還在用這種「純手工」的方式部署網站,那不僅是效率低落,更是將自己暴露在巨大的風險之中。今天,我想跟你聊聊一個能徹底改變你工作流程的現代化武器:CI/CD,以及如何利用地表最強大的程式碼託管平台 GitHub 內建的 GitHub Actions,為你的 WordPress 專案打造一個全自動、安全又可靠的部署流程。準備好了嗎?讓我們一起告別 FTP 的石器時代吧!

為什麼你的 WordPress 專案也該導入 CI/CD?

我知道,我知道,又是一個新的縮寫:CI/CD(Continuous Integration / Continuous Deployment),持續整合與持續部署。聽起來很高科技,感覺跟我們做 WordPress 網站的沒什麼關係?錯!大錯特錯!這東西簡直是為了解放我們這些開發者而生的。

簡單來說,CI/CD 就是把「測試、建置、部署」這些重複性的工作,全部交給機器自動化處理。你唯一要做的,就是把寫好的程式碼推送到你的 Git Repository(例如 GitHub),接下來泡杯咖啡,等著機器人幫你搞定一切。這聽起來是不是很夢幻?它帶來的好處可是實實在在的:

  • 減少人為失誤 (Reduce Human Error):機器不會累,不會看錯檔案,不會手滑點錯按鈕。只要你的腳本寫對了,每一次的部署都會是標準化、可預期的,大幅降低了出錯的機率。
  • 提升部署效率 (Increase Deployment Efficiency):從推送程式碼到網站上線,整個過程可能只需要幾分鐘。這意味著你可以更頻繁、更快速地發布新功能或修復錯誤,提升開發迭代速度。
  • 版本控制與追蹤 (Version Control and Tracking):每一次的自動部署都與 Git 的一個 commit 紀錄綁定。如果新版本出了問題,你可以輕易地知道是哪一次的修改造成的,甚至可以快速回滾到上一個穩定的版本。
  • 自動化測試 (Automated Testing):你可以在部署前自動運行程式碼風格檢查 (Linting)、單元測試 (Unit Tests) 等,確保推上去的程式碼品質,提前攔截潛在的 Bug。
  • 團隊協作更順暢 (Smoother Team Collaboration):當團隊有多人協作時,一個標準化的部署流程可以避免「在我電腦上可以跑」的經典難題,確保大家都在同一個基準上工作。

總之,導入 CI/CD 就像是從騎腳踏車升級到開特斯拉,不僅速度更快,還有自動駕駛幫你保駕護航,讓你更專注在真正有價值的開發工作上。

戰前準備:建構自動化部署流程的基石

在我們開始撰寫自動化腳本之前,有些基礎建設是必須先準備好的。這就像蓋房子前要先打好地基一樣,可不能馬虎。

1. Git 與 GitHub Repository

這應該不用我多說了吧?版本控制是現代化開發的基礎。你需要將你的 WordPress 專案(至少是你開發的主題或外掛)放到 Git 中進行管理,並在 GitHub(或 GitLab/Bitbucket)上建立一個 Repository 來存放你的程式碼。

2. 你的伺服器 (SSH 存取權限)

自動化部署需要讓 GitHub 的伺服器能夠「登入」到你的主機來上傳檔案、執行指令。這需要透過 SSH (Secure Shell) 來完成。你需要確保你有伺服器的 SSH 登入權限,並且能夠產生 SSH Key Pair(公鑰與私鑰)。

3. 神兵利器:WP-CLI

如果你還沒開始用 WP-CLI,那你真的錯過太多了!它是 WordPress 的命令列工具,讓我們可以透過指令來操作 WordPress 的一切,像是更新外掛、清理快取、操作資料庫等等。在自動化部署流程中,WP-CLI 是我們在部署後執行各種維護指令的超級好幫手。我們之前的文章有完整的實戰大全,務必去看看。

4. Composer (現代 PHP 的好夥伴)

對於比較複雜的專案,我們可能會使用 Composer 來管理 PHP 的相依套件。在 CI/CD 流程中,我們也可以透過 `composer install` 指令來自動安裝所有需要的套件。

核心戰術:打造你的第一個 GitHub Actions Workflow

萬事俱備,只欠東風!這「東風」就是我們的 GitHub Actions Workflow 設定檔。這是一個使用 YAML 格式撰寫的檔案,用來告訴 GitHub 當特定事件發生時,應該執行哪些自動化任務。

步驟一:建立 Workflow 檔案

在你的專案根目錄下,建立一個資料夾路徑 `.github/workflows/`。接著,在這個資料夾底下新增一個 YAML 檔案,檔名可以自訂,例如 `deploy.yml`。GitHub 會自動偵測到這個路徑下的檔案,並將其視為 Actions 的設定檔。

步驟二:定義觸發條件 (Triggers)

打開 `deploy.yml`,我們首先要定義這個 workflow 何時會被觸發。最常見的狀況是當我們推送(push)程式碼到特定的分支(例如 `main` 或 `master`)時觸發部署。

name: Deploy to Production

on:
  push:
    branches:
      - main

這段設定的意思是:這個 workflow 叫做「Deploy to Production」,並且當有任何 commit 被 push 到 `main` 分支時,就會自動執行。

步驟三:設定工作 (Jobs) 與步驟 (Steps)

一個 Workflow 由一或多個「工作 (Jobs)」組成,而每個 Job 又由一連串的「步驟 (Steps)」組成。我們可以定義一個名為 `deploy` 的 Job,並指定它運行在一個虛擬的 Ubuntu 環境中。

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      # ... 接下來我們會在這裡新增更多步驟 ...

`runs-on: ubuntu-latest` 告訴 GitHub 我們要在最新版的 Ubuntu 虛擬機上執行任務。`steps` 則是具體的執行步驟列表。第一個步驟 `actions/checkout@v4` 是官方提供的 action,用途是將我們 Repository 裡的程式碼拉到虛擬機中,以便後續操作。

實戰演練:一步步拆解部署腳本

現在,讓我們來把部署 WordPress 網站的完整步驟加進去吧!

1. 設定 PHP 環境與安裝 Composer 套件

如果你的專案有用到 Composer,就需要先設定好 PHP 環境並安裝相依套件。

- name: Setup PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.1'

- name: Install Composer dependencies
  run: composer install --prefer-dist --no-progress --no-dev

2. 最關鍵的一步:部署到伺服器

這一步是整個流程的核心:將虛擬機上的程式碼同步到你的正式伺服器。我們最常使用 `rsync` 這個工具,它只會傳輸有變動的檔案,非常有效率。但問題來了,要如何安全地讓 GitHub Actions 登入你的伺服器呢?

千萬、千萬、千萬不要把你的密碼或私鑰直接寫在設定檔裡! 這是超級危險的行為。正確的做法是使用 GitHub 的「Secrets」功能。你可以到你的 GitHub Repository -> Settings -> Secrets and variables -> Actions 去新增你的機密資訊。

我們需要新增以下幾個 Secrets:

  • `SSH_PRIVATE_KEY`:你用來登入伺服器的 SSH 私鑰。
  • `REMOTE_HOST`:你伺服器的 IP 位址或網域名稱。
  • `REMOTE_USER`:你登入伺服器的使用者名稱。
  • `TARGET_DIR`:你要部署的目標路徑,例如 `/var/www/html/wp-content/themes/my-awesome-theme`。

設定好 Secrets 後,我們就可以在 workflow 中使用它們了。這裡我們使用一個廣受好評的 action `appleboy/ssh-action` 來簡化操作:

- name: Deploy to Server
  uses: appleboy/ssh-action@master
  with:
    host: ${{ secrets.REMOTE_HOST }}
    username: ${{ secrets.REMOTE_USER }}
    key: ${{ secrets.SSH_PRIVATE_KEY }}
    script: |
      rsync -avz --exclude='.git/' --exclude='.github/' ./ ${{ secrets.TARGET_DIR }}

這裡的 `script` 區塊就是我們要遠端執行的指令。`rsync` 會將當前目錄(`./`)的所有檔案(排除 `.git` 和 `.github` 資料夾)同步到我們在 Secret 中設定的 `TARGET_DIR` 路徑。

3. 部署後的收尾工作 (Post-deployment Tasks)

檔案上傳完還沒結束!我們還需要執行一些指令來確保網站狀態正常,這就是 WP-CLI 派上用場的時候了。我們可以擴充剛剛的 `script` 區塊,在 `rsync` 完成後執行 WP-CLI 指令。

- name: Deploy and Run Post-Deploy Commands
  uses: appleboy/ssh-action@master
  with:
    host: ${{ secrets.REMOTE_HOST }}
    username: ${{ secrets.REMOTE_USER }}
    key: ${{ secrets.SSH_PRIVATE_KEY }}
    script: |
      # 1. Sync files
      rsync -avz --exclude='.git/' --exclude='.github/' ./ ${{ secrets.TARGET_DIR }}
      # 2. Navigate to WordPress root
      cd /var/www/html 
      # 3. Flush cache (if you use Redis or other object cache)
      wp cache flush
      # 4. Update database if needed
      wp core update-db
      # 5. Maybe activate a plugin
      wp plugin activate my-custom-plugin

你看,透過 WP-CLI,我們可以輕易地完成清除快取、更新資料庫等操作,完全不需要手動登入後台點擊。

完整 Workflow 範例:從零到一部署

好了,說了這麼多,讓我們把所有東西組合起來,看看一個完整的 `deploy.yml` 檔案長什麼樣子:

# Workflow 的名稱
name: Deploy WordPress Theme to Production

# 觸發條件:當 push 到 main 分支時
on:
  push:
    branches:
      - main

# 定義工作
jobs:
  deploy:
    # 執行環境
    runs-on: ubuntu-latest

    # 執行的步驟
    steps:
      # 步驟 1: 將 repo 的程式碼 checkout 到虛擬環境
      - name: Checkout code
        uses: actions/checkout@v4

      # 步驟 2: 設定 PHP 環境
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'

      # 步驟 3: 安裝 Composer 相依套件 (如果有的話)
      - name: Install Composer dependencies
        run: composer install --prefer-dist --no-progress --no-dev
      
      # 步驟 4: 部署檔案並執行遠端指令
      - name: Deploy to Server via SSH and Run Commands
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: ${{ secrets.REMOTE_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            echo "🚀 Starting deployment..."
            rsync -avz --delete --exclude='.git/' --exclude='.github/' ./ ${{ secrets.TARGET_DIR }}
            echo "✅ Files synchronized."
            cd /var/www/html  # 根據你的 WordPress 安裝路徑修改
            echo "🧠 Flushing cache..."
            wp cache flush
            echo "✨ Deployment complete!"

有了這個檔案,以後你只要 `git push`,GitHub Actions 就會忠實地幫你完成所有部署工作。是不是很優雅?

總結:讓 CI/CD 成為你的最強後盾

從手動 FTP 到全自動化的 CI/CD 流程,這不僅僅是工具的轉變,更是開發思維的升級。導入自動化部署,可以讓我們從重複、瑣碎且高風險的工作中解放出來,把寶貴的時間和精力投入到更有創造性的地方,例如優化網站效能、開發新功能、提升使用者體驗。

我知道,一開始設定這些東西可能會有點挑戰,但相信我,這絕對是一項值得的投資。一旦你的自動化流程建立起來,它就會像一個 24 小時不休息的忠實助理,讓你的每一次部署都變得輕鬆、愉快且充滿信心。別再猶豫了,今天就動手為你的 WordPress 專案打造一套屬於自己的 CI/CD 流程吧!

如果你在設定過程中遇到任何困難,或是想為你的企業導入更穩定、更專業的開發與部署流程,浪花科技的團隊隨時準備好提供協助。我們的工程師擁有豐富的實戰經驗,能幫助你打造最適合的解決方案。

延伸閱讀

對我們的服務感興趣嗎?歡迎點擊這裡,填寫表單與我們聯繫,讓我們一起聊聊如何讓你的網站專案變得更強大!

常見問題 (FAQ)

Q1: 什麼是 CI/CD?為什麼我需要它?

A1: CI/CD 是「持續整合 (Continuous Integration)」與「持續部署/交付 (Continuous Deployment/Delivery)」的縮寫。它是一套透過自動化來頻繁、可靠地交付應用的實踐方法。你需要它,是因為它可以大幅減少手動部署帶來的人為失誤、提升效率,並讓你的開發流程更加標準化與專業化。

Q2: 使用 GitHub Actions 是免費的嗎?

A2: 對於公開的 Repository,GitHub Actions 是完全免費的。對於私有的 Repository,每個月也提供了一定的免費額度(例如 2000 分鐘的執行時間),對於大多數中小型 WordPress 專案來說已經非常足夠了。

Q3: 既然都會動了,為什麼不用 FTP 就好?

A3: FTP 就像是直接在引擎運轉時手動更換零件,風險極高。它缺乏版本控制、沒有自動化測試、容易傳錯檔案,且過程耗時。CI/CD 則像是一個精密的機器手臂,在安全的環境下進行標準化作業,確保每次部署的一致性與可靠性,兩者在安全與效率上有天壤之別。

Q4: 我的共享主機不提供 SSH 存取權限,還能使用這套方法嗎?

A4: 很遺憾,本文介紹的基於 SSH 和 rsync 的自動化部署方法,強烈依賴 SSH 存取權限。如果你的主機不支援 SSH,可能需要尋找其他支援 FTP/SFTP 的 Actions,但其穩定性和功能性通常不如 SSH 來得強大。長遠來看,為了更好的開發流程與網站效能,我們會建議你考慮升級到提供 SSH 權限的主機方案(如 VPS)。

 
立即諮詢,索取免費1年網站保固