自架 CMS 系統:Ghost + Mailgun
今天來把我們的讀書會《一個讀書會》的網站從 Halo 搬家到 Ghost。其實 Halo 算是不錯用的 CMS(內容管理系統),也提供多用戶協作管理,但可惜權限顆粒不夠細緻,除非大家都設為管理員否則沒辦法協作同一篇文章,不盡理想。而 Ghost 就提供 Admins, Editors, Authors, Contributors 四種身份,其中的 Editor 恰好就是我們需要的——同一次讀書會,分享者們能把內容丟進同一篇文章之中。

那你說文章協作為何不直接用 Notion?其實,Notion 會是相當理想的解決方案。作為協作平台,他甚至還能將文章上線,完美整合了我們想協作又想上線(觸及外網交朋友、同時方便我們自己隨時訪問複習)的需求。不過若能自架,我還是會更願意先走自架的方案,萬一讀書會舉辦到第三十個年頭結果 Notion 倒了,那就不舒服啦。總之,我們來架設 Ghost 網站吧!
透過 Docker Compose 架設 Ghost
官方對於自架提供了完整的文檔指引,然而嘛,官方的預設做法綁定了 Caddy 作代理,並且整合了 Tinybird 跟 ActivityPub 在裡面,想搞一個整合生態系的企圖心很重,挺好,樂見其成。
但是,因為我們的伺服器上已經跑了多個服務,且一直都是用 Nginx Proxy Manager 來管理路由跟反向代理,這裡就不跟著官方的指引走咯。如果你也一樣不方便、不想用 Caddy,或是只想架設最基本的 Ghost 服務,可以參考參考。
我們的 docker-compose.yml 如下:
1 | services: |
其中:
ghost:latest我拉到的是 6.10.3database__connection__user跟database__connection__password按需修改url就填你的網域咯,或是可以先用本地的 IP 來測試,但因為常規服務就會需要用到 SMTP 了,這裡建議要有一個可以用的網域- mail 的部分是重點,我們下述
透過 Mailgun 設定 SMTP 服務
就算你沒有打算搞訂閱、發電子信,Ghost 中的協作邀請、密碼重設、用戶註冊這些基本功能都是透過 Mail 來進行。Ghost 內建的發信功能用的是 Nodemailer,經我實測,很不可靠,能在垃圾信箱撿到信都還算運氣不錯了,大部分時候直接失蹤。所以我們還是用官方文檔中提到的第三方服務商 Mailgun 來替我們送信吧。
撰文當下,Mailgun 免費方案可以每個月寄 3000 封信,支撐 Ghost 的基本功能完全夠用,甚至能發行少量受眾的電子信,挺好。但要注意的是,如果沒有設定自己的域名,SMTP 服務是無法正常使用的,域名還是要搞定一下哦。(每年花個幾百塊訂閱一個自己的域名絕對是值得的投資,真心不騙啦)
Mailgun 註冊好、域名設定好之後,我們需要到 Send > Domain settings > SMTP credentials > Add new SMTP user 來新增一個用戶實體。而這裡 Login 欄位就是你的 mailgun的SMTP使用者,密碼就是你的 mailgun的SMTP密碼,分別將之填入我們 docker-compose.yml 的 mail__options__auth__user 跟 mail__options__auth__pass 中。

設定反向代理
最後只要把我們 url 裡面設定的網域指向我們伺服器的 Ghost 容器之所在,即可快樂訪問咯。
以我這邊為例,在 Cloudflare 中將該網域以 CNAME 指向我的 DuckDNS 設定好的 DDNS 網域,並在 Nginx Proxy Manager 中將該網域路由到伺服器的 2368 port。
實際訪問,成功:

以上!


