如果免費的 Heroku 開源專案存在

Linux

前言

在我職涯之中,大部分的時間都在寫程式,對於伺服器的設定、管理的知識相對薄弱;也因此在開發個人專案時,我喜愛使用讓我專注在寫程式的解決方案,如:Heroku、GAE 或 Firebase 等服務。

在享有便捷服務時,額外帶來的是昂貴的使用成本;對於一名免費仔來說,這無疑是巨大的打擊;因此我一直在期盼上述服務的開源專案出現,而這次要介紹的是:最接近 Heroku 的替代品,CapRover。

什麼是 CapRover?

CapRover 是被 Docker 包裝起來、提供圖形化介面讓我們可以一鍵設定各種工具的後台,官方以 Scalable PaaS 自述這套系統。它的使用體驗很接近 cPanel 或是標題提到的 Heroku,只要用滑鼠點幾下就可以安裝、管理常用到的系統或程式,如:WordPress、MySQL 或 Redis 等。

順帶一提,CapRover 是基於 Apache 2.0 的開源專案;截至目前為止,已在 GitHub 得到了超過 8k 的星星數。

CapRover · Scalable, Free and Self-hosted PaaS!
Scalable, Free and Self-hosted PaaS!

什麼人適合使用 CapRover?

  1. 不想耗費太多時間安裝、設定或更新伺服器。
  2. 想降低服務費用;你可以租一台跟 Heroku 同等級的機器,但費用是原本的四分之一(甚至更低)。
  3. 像我一樣只想寫程式、不想管伺服器的工程師。
  4. 喜歡一鍵安裝各種服務。
  5. 想要感受 Docker 跟 nginx 的強大、又不想為此鑽研相關設定。
  6. 已具備 Docker 跟 nginx 的相關知識,但想要一個處理完基本設定、又可以另外客製化的平台。

前置作業

  1. 準備一個域名
  2. 準備一台有對外 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,再跑一次安裝流程,有可能設定完就可以安裝成功。

Just a moment...

網頁介面介紹

新增 App,有資料庫或上傳檔案需求的選 has persistent data 就對了。
也有一鍵安裝的 apps,超過兩百個選擇。常見的 nginx、MySQL、WordPress 不說,連 Grafana、Prometheus 也有就厲害了,非常齊全。
Monitor 採用 NetData 監測工具。
Monitor 也提供各種整合,像我就很需要 Slack 通知。
提供 Cluster 功能讓你水平擴充機器。
部署 app 提供三種方法,總有一個你會喜歡。

備份與還原

CapRover 提供備份、還原功能,但並不是很完善。我一開始以為把備份檔案上傳到新主機就可以成功還原。它的備份檔只有設定的部分,不包含內容,例如資料庫就不包含在內。我們可以自行手動匯出資料再匯入,又或者官方有提到第三方的程式,可以複製硬碟內容再還原。

雖然官方聲稱會自動偵測要還原的檔案,但我自己的狀況是還原失敗,面對這個狀況,我採取的步驟如下:

  1. 新主機安裝完使用新的 domain
  2. 把舊主機的 app 名稱複製到新主機,並新增對應的 app
  3. 確認 app 運作正常
  4. 把新主機的 domain 換成舊主機的
  5. 把 DNS 的舊 domain 指向新主機的 IP
  6. 重新登入,啟用 HTTPS

如此就可以用新主機取代舊主機,步驟 5 跟 6 會導致服務中斷,我大約斷了兩分鐘。

若官方的還原是成功的,我猜也會有服務中斷的狀況,SSL 應該需要重裝。

Backup & Restore · CapRover
### Backup & Restore

後記

我是一位 Heroku 的愛用者,那種把程式碼傳上去,什麼都不用做就自動生成執行環境的體驗真的太美好了,體驗過一次就深深著迷。不過這樣的便利是有代價的,Heroku 著實不便宜。過去一直找不到類似的替代方案,前陣子做 side project 時胡亂搜尋了一通,結果還真的找到不錯的開源專案,最後我將後端程式跑在上面,到目前為止都還算滿意。

留言列表

Copied title and URL