因為 Heroku 現在要收費了,原本放在上面用免費方案的 project 就需要找新的方法。於是找到了 Dokku,他的 GitHub page 介紹如下:
Docker powered mini-Heroku. The smallest PaaS implementation you’ve ever seen.
的確是很傳神,因為使用方法跟 Heroku 很像,基本上可以從 Heroku 無痛遷移,差別在你需要用自己的 VM & domain,配合 dokku 就可以在上面用 docker 管理你的 application,就像他的 about 寫的:
A docker-powered PaaS that helps you build and manage the lifecycle of applications
這邊使用 DigitalOcean 的 droplet,因為他有兩個月 200 美金的試用 credits,假如只是短期測試專案的話也夠了,不然也可以兩個月換一個新帳號 😅
這邊稍微筆記一下把 Heroku 專案搬過來的過程:
- 在 DigitalOcean 創一個 droplet, 在上面照著文件的步驟做,droplet OS 需選擇 dokku 支援的版本
dokku apps:create {app_name}sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres- 使用 subdomain 的步驟:
dokku domains:set-global {domain}dokku domains:set {dokku_app_name} {subdomain.domain}- 設定 domain 的 A record, CNAME
- A record:
- Host:
@ - Value: droplet IP
- Host:
- CNAME
- Host: subdomain
- Value:
{domain}.
- A record:
- 看起來這個方法應該可以讓我們在同一個 droplet 裡,用不同的 subdomains 跑多個不同的 web apps。只要分別設定多個 CNAME 和對應的 dokku app domain 就好
- 流程:{subdomain_a.domain} 的 request 依循 IP 到了該 droplet 的 nginx,nginx 再將 request 導到 subdomain_a 對應的 dokku app
- 如果單純只想讓
{dokku_app_name}.{domain}指到 dokku app,也可以只設定 A record:- Host:
dokku_app_name - Value: droplet IP
- Host:
dokku config:set {dokku_app_name} KEY=value可設定需要的環境變數- 可以用 runtime.txt 指定 python 執行的版本