使用 Dokku 將 Web App 部署在 DigitalOcean

因為 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 的步驟:
    1. dokku domains:set-global {domain}
    2. dokku domains:set {dokku_app_name} {subdomain.domain}
    3. 設定 domain 的 A record, CNAME
      • A record:
        • Host: @
        • Value: droplet IP
      • CNAME
        • Host: subdomain
        • Value: {domain}.
    • 看起來這個方法應該可以讓我們在同一個 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
  • dokku config:set {dokku_app_name} KEY=value 可設定需要的環境變數
  • 可以用 runtime.txt 指定 python 執行的版本

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×