用 dokku 來架設 Ghost

變成前言的後記

其實這篇的內容是一開始動筆時的紀錄,最近整理發現這篇弄完之後就忘在這邊了,後來也在公司小推了 dokku 一把,順便做了個簡單的分享 ;)
不能不推一下 hackmd,連簡報模式都支援
完全沒聽過 dokku 的可以先參閱一下

如果要用一句直白的話形容 dokku,就是開源窮人版的 heroku

使用方式基本上跟 heroku 很類似,但是要特別提一下他的 plugin 功能,dokku 能夠透過偵測各語言特有的檔案或設定來辨識,不過一般開發者還需要一些「其他」的功能,如資料庫、MQ、Cache等之類的其他系統,這些都有其他的軟體可以提供,在 dokku 就是透過他的 plugin 就可以把這些系統安裝起來。

所以如果想想用 dokku 來架設 Ghost blogging system 也是簡單幾個步驟就可以弄起來了。不過要架設Ghost 你就可能需要 mysql,更進一步還能透過 Let's Encrypt 把 HTTPS 也架設起來。透過 dokku plugin:install 就可以簡單安裝囉。

ps: 如果你安裝 Ghost/Mysql 可能會遇到文字編碼的問題,可以參考一下這些:

Node.js app on dokku

Node.js 要在 dokku 上面跑起來也不是什麼難事,記得放上 package.json 和設定好 scripts: { start: "..." },dokku 就會幫你設定好

如果需要 private npm modules!?
基本就照這篇做就可以 - Deploying with npm private modules,記得用 dokku config:set NPM_TOKEN=... 設定上你的 auth token,然後把 .npmrc 加到你的 Node.js App repo 裡面

// .npmrc  
// registry.npmjs.org/:_authToken=${NPM_TOKEN}

other languages?

如果你不寫 Node.js 而是使用其他的語言,基本上只要 heroku 有支援的應該都可以直接跑起來,大不了就是直接寫 Dockerfile 當成部署的方式而已 ;)

我自己本身是還有玩過 Golang app,如果你有放「處理 dependency」的套件設定(e.g., govendor, Godep or Glide),dokku 就能夠分辨出來。但是我還是建議如果是 Golang app 最好還是用 Dockerfile 的方式來部署。一來是安裝時間相差懸殊,另一則是 Golang 混亂的 dependency 處理問題。

等!!
可能會有人說有 Godep,不是已經是正式成為處理依賴問題的工具,這可以參考大大的解說 - Go 語言官方推出的 dep 使用心得。若你太躁進,跑去用 golang/dep 的版本,dokku 就會無法辨識,他只看得懂 tools/godep

看到這種現象我想想還是等等好了XD