用 Ghost 架設自己的部落格和電子報:網域、電子郵件、會員與備份

用 Zenavo 的範本部署 Ghost,綁定 HTTPS 網域,建立管理員帳號,設定寄信讓會員註冊和電子報正常運作,再把 MySQL 和內容資料夾都備份起來。

本文亦提供 English、简体中文、日本語、Español 和 Bahasa Indonesia。

Ghost 是一個開源的出版平台:文章、付費或免費會員、電子報都在同一個後台管理,編輯器乾淨,佈景主題對搜尋引擎友善。如果你想要一個屬於自己的部落格,又不想照顧 WordPress 的外掛,Ghost 是很適合的選擇。

本文用 Zenavo 的 Ghost 範本,把 Ghost 和 MySQL 部署到你租用或自有的伺服器上,然後設定網域、電子郵件和備份。

開始之前

  • 一台已連接到 Zenavo 的 Linux 伺服器。範本標示約需 1 GB 記憶體,也要替 MySQL 留點空間。
  • 一個部落格用的網域,例如 blog.example.com。
  • 一個電子郵件服務商的 SMTP 帳號(稍後會用到)。會員註冊、登入連結和員工邀請都是透過電子郵件寄送。

從範本部署

打開 Ghost 範本。部署前會要求填寫 Site URL,也就是讀者造訪部落格的完整網址,例如 https://blog.example.com。範本會建立兩個服務:

服務 存放內容
mysql MySQL 8.4,磁碟區 /var/lib/mysql,root 密碼自動產生
ghost ghost:5-alpine,HTTP 連接埠 2368,內容資料夾 /var/lib/ghost/content(圖片和佈景主題)

Site URL 會成為 ghost 服務的 url 變數。Ghost 的每個連結都由它產生,所以它必須和你最終使用的網域完全一致,包括 https://。

綁定網域,建立管理員

在 ghost 服務的 Networking 頁為 2368 連接埠綁定同一個網域,新增指向伺服器的 A 記錄,等待 HTTPS 生效(見網域與 HTTPS)。

開啟 https://blog.example.com/ghost,依照步驟為網站命名並建立第一個管理員帳號。後台永遠在 /ghost。和其他自架應用一樣,網域一生效就請自己完成這一步。

之後要換網域,就修改 url 變數、重新部署,再綁定新網域。只換網域而不改 url,連結還是會指向舊網址。

設定電子郵件

Ghost 寄送兩種郵件:

  • 交易郵件:員工邀請、重設密碼、會員註冊和登入連結。任何 SMTP 服務都可以。
  • 大量寄送的電子報:把文章寄給所有訂閱者。Ghost 目前只能透過 Mailgun 寄送,在後台 Settings → Email newsletter 中填入你的 Mailgun 網域和 API 金鑰。

交易郵件在 ghost 服務的 Variables 中設定。Ghost 用雙底線表示巢狀設定:

變數 範例
mail__transport SMTP
mail__options__host smtp.example.com
mail__options__port 465
mail__options__secure true
mail__options__auth__user 你的 SMTP 使用者名稱
mail__options__auth__pass 你的 SMTP 密碼
mail__from "部落格名稱" <noreply@example.com>

重新部署 ghost 服務,然後邀請一位員工,或用另一個信箱註冊會員,確認收得到信。

有些伺服器供應商會封鎖對外的 SMTP 連接埠,症狀是寄信逾時。請改用電子郵件服務商提供的其他連接埠(例如 2525),或請伺服器供應商解除封鎖。另外也請依照電子郵件服務商的說明,為你的網域設定 SPF 和 DKIM,否則郵件很容易被丟進垃圾郵件匣。

開始寫作前的幾項設定

  • Settings → General:網站名稱、描述、時區和語言。
  • Settings → Design:挑選佈景主題或上傳自己的主題;主題檔案存放在內容資料夾裡。
  • Settings → Membership:讀者能否註冊,以及是否有部分文章只開放給會員。
  • Settings → Code injection:可以放流量分析腳本,例如自架的 Umami 或 Plausible。

備份

Ghost 的資料存在兩個地方:文章、會員和設定在 MySQL 裡;圖片、佈景主題和上傳的檔案在 ghost 服務的 /var/lib/ghost/content 磁碟區。兩者都要備份。

  • 隨時可以在 mysql 服務的 Backup & Restore 頁備份資料庫。
  • 內容資料夾是磁碟區:備份時先停止專案,完成後再啟動。

Ghost 本身的匯出功能(在後台設定中)會把文章和設定存成 JSON,方便搬到另一個 Ghost,但不包含圖片。重要的資料,請下載一份備份自行保存,並在新專案中還原一次來確認。詳見備份與還原。

升級

範本使用 ghost:5-alpine,所以重新部署時會拉取最新的 Ghost 5。升級前先備份 MySQL 和內容資料夾,並閱讀版本說明。大版本升級可能會遷移資料庫,換回舊映像檔不一定能復原,需要還原升級前的備份。

常見問題

網站上的連結指向 localhost 或舊網域? url 變數和你實際使用的網址不一致。把它改成正確的完整網址,再重新部署。

會員收不到登入郵件? 在 ghost 服務的日誌裡找寄信錯誤。通常是 SMTP 連接埠被封鎖、使用者名稱或密碼錯誤,或 mail__from 的網域沒有通過電子郵件服務商的驗證。

可以從 WordPress 或其他平台搬過來嗎? Ghost 有官方的遷移工具和指南,支援 WordPress、Substack 等平台。匯入的圖片會存進內容資料夾,所以備份時記得把它包含進去。

Ghost 還是 WordPress? 著重寫作和電子報、想要少點維護,選 Ghost;需要大量外掛、線上商店或複雜頁面,WordPress 比較合適。Zenavo 也有 WordPress 範本。

從 Ghost 範本開始:先讓網域和 url 一致,再建立管理員、設定電子郵件,最後把資料庫和內容資料夾都備份起來。