前言
在我職涯之中,大部分的時間都在寫程式,對於伺服器的設定、管理的知識相對薄弱;也因此在開發個人專案時,我喜愛使用讓我專注在寫程式的解決方案,如:Heroku、GAE 或 Firebase 等服務。
在享有便捷服務時,額外帶來的是昂貴的使用成本;對於一名免費仔來說,這無疑是巨大的打擊;因此我一直在期盼上述服務的開源專案出現,而這次要介紹的是:最接近 Heroku 的替代品,CapRover。
什麼是 CapRover?
CapRover 是被 Docker 包裝起來、提供圖形化介面讓我們可以一鍵設定各種工具的後台,官方以 Scalable PaaS 自述這套系統。它的使用體驗很接近 cPanel 或是標題提到的 Heroku,只要用滑鼠點幾下就可以安裝、管理常用到的系統或程式,如:WordPress、MySQL 或 Redis 等。
順帶一提,CapRover 是基於 Apache 2.0 的開源專案;截至目前為止,已在 GitHub 得到了超過 8k 的星星數。
什麼人適合使用 CapRover?
- 不想耗費太多時間安裝、設定或更新伺服器。
- 想降低服務費用;你可以租一台跟 Heroku 同等級的機器,但費用是原本的四分之一(甚至更低)。
- 像我一樣只想寫程式、不想管伺服器的工程師。
- 喜歡一鍵安裝各種服務。
- 想要感受 Docker 跟 nginx 的強大、又不想為此鑽研相關設定。
- 已具備 Docker 跟 nginx 的相關知識,但想要一個處理完基本設定、又可以另外客製化的平台。
前置作業
- 準備一個域名
- 準備一台有對外 IP 的主機,建議配置如下:
- 最少 1G 的記憶體
- 安裝 Ubuntu 20.04
- 安裝 Docker 19.03
安裝步驟
安裝 CapRover
sudo docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
這時會看到螢幕一直執行指令,等安裝完成後就可以開啟它的網頁介面。
瀏覽網址 http://你的IP:3000 就可以登入後台,預設密碼是 captain42。
綁定域名
如果你的域名是:domain.com,官方建議用子域名去做綁定,像是:*.cap.domain.com。因為每在 CapRover 安裝一個 app,他就會吃掉一個子域名。
到你的 DNS 服務商加入一筆設定:
- TYPE: A record
- HOST:
*.cap
- POINTS TO: 你的 IP
注意:.cap 前面有個星號,你也可以將 cap 換成任何你想要的子網域。
補充
做到上述步驟其實已經安裝好網頁後台了,如果有其他需求會在這邊補充說明。
CLI
如果你喜歡用指令來部署、設定,可以安裝它的 cli:
// 安裝
npm install -g caprover
// 設定
caprover serversetup
// 登入
caprover login
若安裝完,想要嘗試部署到 CapRover 上,可以到這邊下載 app 的 .tar 檔,解壓縮之後,到 app 目錄執行:
caprover deploy
Swap file
如果你的主機記憶體不足 2GB,我建議設定一下 Swap file,免得執行時卡住。又或者安裝失敗時,也可以先加個 swap file,再跑一次安裝流程,有可能設定完就可以安裝成功。
網頁介面介紹
備份與還原
CapRover 提供備份、還原功能,但並不是很完善。我一開始以為把備份檔案上傳到新主機就可以成功還原。它的備份檔只有設定的部分,不包含內容,例如資料庫就不包含在內。我們可以自行手動匯出資料再匯入,又或者官方有提到第三方的程式,可以複製硬碟內容再還原。
雖然官方聲稱會自動偵測要還原的檔案,但我自己的狀況是還原失敗,面對這個狀況,我採取的步驟如下:
- 新主機安裝完使用新的 domain
- 把舊主機的 app 名稱複製到新主機,並新增對應的 app
- 確認 app 運作正常
- 把新主機的 domain 換成舊主機的
- 把 DNS 的舊 domain 指向新主機的 IP
- 重新登入,啟用 HTTPS
如此就可以用新主機取代舊主機,步驟 5 跟 6 會導致服務中斷,我大約斷了兩分鐘。
若官方的還原是成功的,我猜也會有服務中斷的狀況,SSL 應該需要重裝。
後記
我是一位 Heroku 的愛用者,那種把程式碼傳上去,什麼都不用做就自動生成執行環境的體驗真的太美好了,體驗過一次就深深著迷。不過這樣的便利是有代價的,Heroku 著實不便宜。過去一直找不到類似的替代方案,前陣子做 side project 時胡亂搜尋了一通,結果還真的找到不錯的開源專案,最後我將後端程式跑在上面,到目前為止都還算滿意。
留言列表