12 min read

如何自架 Ghost 部落格:從零開始的完整教學指南

如何自架 Ghost 部落格:從零開始的完整教學指南
Photo by Phil Hearing / Unsplash
"給人一條魚不如教人如何釣魚" — 當你手上不只有錘子時,世界將展現出更多可能性。

在 Hammer Hub,我們相信選對工具的重要性。當談到架設部落格時,WordPress 雖然普及,但對於追求簡潔、效能與 Markdown 寫作體驗的創作者來說,Ghost 可能是更適合的選擇。

這篇文章將手把手帶你完成 Ghost 部落格的自架流程,從 GCP 租賃伺服器、安裝設定,到網域配置與 SSL 憑證,讓你擁有一個完全掌控的內容創作平台。

為什麼選擇自架 Ghost?

在開始之前,先讓我們了解為何要選擇 Ghost,以及為何要自架:

Ghost 的優勢

  • 專注寫作體驗: 原生 Markdown 支援,介面簡潔優雅
  • 效能優異: Node.js 架構,載入速度快
  • SEO 友善: 內建完整的 SEO 功能
  • 會員訂閱系統: 內建 Newsletter 與付費訂閱功能
  • 開源免費: 自架版本完全免費

自架 vs 官方託管

  • 完全掌控: 資料在自己手上,想怎麼調整都可以
  • 成本考量: 自架每月約 $10-20 USD,官方託管最低 $9/月(但功能受限)
  • 學習機會: 過程中學習伺服器管理、網域設定等技能

記住 Maslow 的名言:當你的工具箱裡不只有錘子時,你會發現更多解決問題的可能性。自架部落格就是為自己的工具箱添加新工具的絕佳機會。

更完整的理由以及跟Wordpress的比較可以參考之前的文章:


事前準備

在開始之前,你需要準備:

  1. GCP 帳號 (或其他雲端服務商如 AWS、DigitalOcean)
  2. 信用卡 (用於 GCP 與網域購買)
  3. 網域名稱 (本教學使用 Cloudflare 購買)
  4. 基本的終端機操作能力 (不用擔心,我會詳細說明每一步)

預估時間:約 1-2 小時 預估成本:

  • GCP VM: $10-15/月
  • 網域: $10-15/年
  • 總計: 約每月 $11-16 USD

Step 1: 在 GCP 租賃虛擬機器

1.1 登入 GCP Console

前往 Google Cloud Platform,使用你的 Google 帳號登入。

如果是第一次使用,GCP 會提供 $300 美元的免費額度(有效期 90 天),足夠你測試使用。

1.2 建立新專案

  1. 點擊上方的專案選擇器
  2. 點選「新增專案」
  3. 輸入專案名稱,例如:ghost-blog
  4. 點擊「建立」

1.3 啟用 Compute Engine API

  1. 在左側選單找到「Compute Engine」
  2. 點擊「VM 執行個體」
  3. 等待 API 啟用(第一次需要幾分鐘)

1.4 建立 VM 執行個體

點擊「建立執行個體」,進行以下設定:

基本設定

  • 名稱: ghost-blog-instance(自取)
  • 區域: 選擇離你較近的區域,例如 asia-east1(台灣)
  • 機器類型: e2-micro(2 vCPU, 1GB 記憶體)— 對於個人部落格已足夠

開機磁碟

  • 點擊「變更」
  • 作業系統: Ubuntu
  • 版本: Ubuntu 22.04 LTS
  • 開機磁碟類型: 標準永久磁碟
  • 大小: 30 GB(Ghost 建議最少 30GB)

防火牆

  • ✅ 允許 HTTP 流量
  • ✅ 允許 HTTPS 流量

點擊「建立」,等待約 30 秒,VM 就會啟動完成。

1.5 設定靜態 IP 位址

為了確保 IP 不會改變(重啟後也不變),我們需要保留一個靜態 IP:

  1. 左側選單 → 「VPC 網路」→「IP 位址」
  2. 點擊「保留外部靜態位址」
  3. 設定:
    • 名稱: ghost-blog-ip
    • 類型: 區域
    • 區域: 與 VM 相同
    • 連接到: 選擇你剛建立的 VM
  4. 點擊「保留」

記下這個 IP 位址,之後設定網域時會用到!


Step 2: 透過 SSH 連線到伺服器

2.1 使用瀏覽器 SSH

最簡單的方式是直接使用 GCP 提供的瀏覽器 SSH:

  1. 回到「VM 執行個體」頁面
  2. 找到你的執行個體
  3. 點擊「SSH」欄位下的「SSH」按鈕
  4. 瀏覽器會開啟一個新視窗,連線到你的伺服器

成功連線後,你會看到類似這樣的提示符:

bash

username@ghost-blog-instance:~$

2.2 更新系統套件

首先,更新系統套件到最新版本:

bash

sudo apt update
sudo apt upgrade -y

等待更新完成(可能需要幾分鐘)。


Step 3: 安裝 Ghost

Ghost 官方提供了一個非常方便的安裝工具叫 ghost-cli,我們將使用它來安裝。

3.1 安裝 Nginx

bash

sudo apt install nginx -y

啟動並設定 Nginx 開機自動啟動:

bash

sudo systemctl start nginx
sudo systemctl enable nginx

3.2 安裝 MySQL

Ghost 使用 MySQL 作為資料庫:

bash

sudo apt install mysql-server -y

安全設定 MySQL:

bash

sudo mysql_secure_installation

你會被問到一些問題,建議設定如下:

  • 設定 root 密碼? → Y (然後輸入一個強密碼並記住它)
  • 移除匿名使用者? → Y
  • 禁止 root 遠端登入? → Y
  • 移除測試資料庫? → Y
  • 重新載入權限表? → Y

3.3 安裝 Node.js

Ghost 需要 Node.js v18 (LTS 版本):

bash

curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

驗證安裝:

bash

node --version  # 應該顯示 v18.x.x
npm --version   # 應該顯示 9.x.x 或更高

3.4 安裝 Ghost-CLI

bash

sudo npm install ghost-cli@latest -g

3.5 建立 Ghost 安裝目錄

bash

sudo mkdir -p /var/www/ghost
sudo chown $USER:$USER /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost

3.6 安裝 Ghost

現在是最關鍵的步驟:

bash

ghost install

安裝程式會問你一系列問題:

? Enter your blog URL: https://yourdomain.com
? Enter your MySQL hostname: localhost
? Enter your MySQL username: root
? Enter your MySQL password: [你在 3.2 步驟設定的密碼]
? Enter your Ghost database name: ghost_prod
? Do you wish to set up Nginx? Yes
? Do you wish to set up SSL? No (我們稍後手動設定)
? Do you wish to set up systemd? Yes
? Do you want to start Ghost? Yes

重要提示:

  • blog URL 這裡先輸入你即將使用的網域(例如 https://blog.example.com)
  • 如果你還沒有網域,可以先輸入 http://你的IP位址,之後再更改
  • 先不要讓 Ghost CLI 設定 SSL,我們稍後用 Let's Encrypt 手動設定

安裝完成後,Ghost 應該就在運行了!

驗證:在瀏覽器輸入 http://你的伺服器IP,應該能看到 Ghost 的預設頁面。


Step 4: 在 Cloudflare 購買網域與設定 DNS

4.1 註冊 Cloudflare 帳號

前往 Cloudflare 註冊一個免費帳號。

4.2 購買網域

  1. 登入後,點擊左側選單「Domain Registration」
  2. 點擊「購買網域」
  3. 搜尋你想要的網域名稱
  4. 選擇一個可用的網域,加入購物車
  5. 完成結帳(大約 $10-15 USD/年)

4.3 設定 DNS 記錄

購買完成後,網域會自動加入你的 Cloudflare 帳戶:

  1. 點擊你的網域進入管理頁面
  2. 選擇「DNS」標籤
  3. 點擊「新增記錄」

新增 A 記錄:

  • 類型: A
  • 名稱: @ (代表根網域,例如 example.com)
  • IPv4 位址: 你的 GCP 靜態 IP
  • Proxy 狀態: ⚪ 僅限 DNS (DNS only) - 重要:先不要開啟 Proxy
  • TTL: 自動

如果你想使用子網域(例如 blog.example.com),再新增一筆:

  • 類型: A
  • 名稱: blog
  • IPv4 位址: 你的 GCP 靜態 IP
  • Proxy 狀態: ⚪ 僅限 DNS (DNS only)

點擊「儲存」。

重要說明: 我們先將 Proxy 設為「僅限 DNS」,讓 Let's Encrypt 可以直接連到你的伺服器驗證。等 SSL 憑證安裝完成後,再開啟 Proxy。

4.4 等待 DNS 生效

DNS 變更通常需要幾分鐘到幾小時才會生效。你可以用以下指令檢查:

bash

nslookup yourdomain.com

當顯示的 IP 是你的 GCP 靜態 IP 時,就代表生效了。


Step 5: 安裝 SSL 憑證 (Let's Encrypt)

現在我們要使用 Let's Encrypt 來安裝免費的 SSL 憑證,讓你的網站可以使用 HTTPS。

5.1 安裝 Certbot

Certbot 是 Let's Encrypt 的官方工具,用來自動申請和管理 SSL 憑證:

bash

sudo apt install certbot python3-certbot-nginx -y

5.2 確認 DNS 已生效

在申請憑證之前,確認你的網域已經正確指向伺服器:

bash

nslookup yourdomain.com

應該要顯示你的 GCP 靜態 IP。如果還沒生效,請再等待幾分鐘。

5.3 申請 SSL 憑證

確認 DNS 生效後,執行以下指令申請憑證:

如果你使用根網域和 www:

bash

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

如果你使用子網域(例如 blog.example.com):

bash

sudo certbot --nginx -d blog.example.com

Certbot 會問你幾個問題:

  1. Enter email address: 輸入你的 Email(用於接收憑證到期通知)
   example@gmail.com
  1. Agree to Terms of Service:
   A (同意)
  1. Share email with EFF:
   N (不需要)
  1. Redirect HTTP to HTTPS:
   2 (選擇重新導向,自動將 HTTP 轉到 HTTPS)

等待幾秒鐘,如果成功,你會看到類似這樣的訊息:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/yourdomain.com/privkey.pem
This certificate expires on 2025-02-10.

🎉 恭喜!SSL 憑證安裝成功!

5.4 驗證 Nginx 設定

Certbot 會自動修改你的 Nginx 設定檔。檢查一下:

bash

sudo cat /etc/nginx/sites-available/yourdomain.com-ssl.conf

你應該會看到新增的 SSL 設定,包含:

  • listen 443 ssl
  • ssl_certificatessl_certificate_key 指向 Let's Encrypt 憑證
  • HTTP 到 HTTPS 的重新導向

測試 Nginx 設定是否正確:

bash

sudo nginx -t

如果顯示 syntax is oktest is successful,就重新載入 Nginx:

bash

sudo systemctl reload nginx

5.5 測試 HTTPS 連線

在瀏覽器訪問:

https://yourdomain.com

你應該會看到:

  • 🟢 瀏覽器顯示鎖頭圖示,連線是安全的
  • 🟢 Ghost 網站正常顯示

點擊鎖頭圖示 → 「憑證有效」,可以看到憑證資訊:

  • 發行者: Let's Encrypt
  • 有效期: 90 天

5.6 設定自動續期

Let's Encrypt 憑證有效期只有 90 天,但不用擔心,Certbot 已經自動設定了續期機制。

測試自動續期是否正常:

bash

sudo certbot renew --dry-run

如果沒有錯誤訊息,就代表設定成功!續期腳本會在憑證到期前自動執行。

你也可以手動檢查續期排程:

bash

sudo systemctl status certbot.timer

應該會看到 active (waiting) 的狀態。

5.7 更新 Ghost 設定

確認 Ghost 的 URL 設定為 HTTPS:

bash

cd /var/www/ghost
ghost config url https://yourdomain.com
ghost restart

Step 6: 完成設定與測試

6.1 訪問你的部落格

在瀏覽器輸入 https://yourdomain.com,你應該會看到:

  • 🟢 連線是安全的(瀏覽器顯示鎖頭圖示)
  • 🟢 Ghost 預設的首頁
  • 🟢 速度很快(Cloudflare CDN 加速)

6.2 進入 Ghost 管理後台

  1. 訪問 https://yourdomain.com/ghost
  2. 建立你的管理員帳號:
    • 輸入網站標題
    • 輸入你的名字
    • 輸入 Email
    • 設定密碼
  3. 點擊「建立帳號並開始使用」

6.3 驗證 SSL 設定

使用 SSL Labs 測試你的網站 SSL 設定:

  1. 前往 https://www.ssllabs.com/ssltest/
  2. 輸入你的網域
  3. 點擊「Submit」

等待幾分鐘後,你應該會得到 A 或 A+ 的評分!

恭喜!你的 Ghost 部落格已經完全設定完成了! 🎉


成本預估

每月經常性費用:

  • GCP e2-micro VM: ~$10-12 USD
  • 網域(分攤): ~$1 USD
  • 總計: ~$11-13 USD/月

額外考量:

  • 如果流量大,可能需要升級機器規格
  • Cloudflare 免費方案已足夠個人使用
  • SSL 憑證完全免費(Let's Encrypt)
  • Ghost 官方託管服務最低方案 $9/月,但限制較多

總結:從錘子到工具箱的旅程

完成這篇教學後,你已經:

✅ 學會了雲端伺服器的租賃與管理

✅ 掌握了 Linux 基本指令與系統管理

✅ 了解了網域、DNS、SSL 的運作原理

✅ 成功安裝了 Let's Encrypt SSL 憑證

✅ 架設了一個完全由自己掌控、全程加密的部落格平台

更重要的是,你的工具箱裡又多了一個強大的工具。

在 Hammer Hub,我們相信:

"當你的工具箱裡不只有錘子時,世界將展現出更多的可能性。"

架設 Ghost 部落格只是個開始。你可以用這個平台:

  • 分享你的專業知識
  • 建立個人品牌
  • 經營 Newsletter 訂閱
  • 甚至發展付費內容

不要被單一工具限制了思維。WordPress 雖然普及,但 Ghost 在某些情況下是更好的選擇 — 更快、更簡潔、更專注於寫作。關鍵是根據你的需求選擇適合的工具

下一步

完成架設後,你可能想:

  • 🎨 客製化你的部落格主題與樣式
  • ✍️ 開始撰寫第一篇文章
  • 📧 設定 Email Newsletter
  • 💰 探索會員訂閱與付費內容
  • 📊 整合 Google Analytics 追蹤流量

祝你在創作的路上順利,用對的工具,創造有價值的內容!