Ghost 1.x + dokku

更新 2017/11/23

後來發現這篇 (Ghost v1 on Dokku)更方便,只要兩行就解決了XD

# 用官方 docker repo,然後把定義好的 config 拷貝過去即可
FROM library/ghost:1 
COPY config.production.json /var/lib/ghost

緣起

雖然之前嘴硬,不過實在沒太多心力老是都弄這些東西,反正只是個邊緣人網站,所以能夠輕鬆讓自己可以上來 murmur 幾句就夠了,所以又回來弄 Ghost。
不過小東西如 static page 之類的還是放 #p2pweb 吧 ;

之前糾結的點就在於升到 1.x 之後的 Ghost,官方推薦的安裝方式是透過 ghost-cli 這個莫名其妙的東西,因為我都把小專案移到 dokku 上面了,所以有點難搞...0rz

重回 Ghost + Dokku

想說來找一下有沒有新的解法,然後就找到這篇 - Running Ghost 1.0.2 with Dokku,之前就提過 dokku 本身是基於 docker 兜弄出來的,所以當然也是支援 Dockerfile,然後就去研究一下看起來像是官方版本的 docker image - docker-library/ghsot,抓下來直接跑就起來了,除了那唯一的問題...

persistent storage

嗯,這問題只有花俏的人才會遇到 #誤
就是如果你改了第三方的 theme 的話,會發現每次上傳之後它就不見了,想說 dokku 本身就有管理 persistent storage 所以想朝這方面來解決,順便把資料庫改成 mysql 而不是開發用的 sqlite。

Dockerfile

(1) 在 ghost-cli 改成 mysql 的設定(dokku 一樣有支援 mysql 的 plugin

// 把原本的
su-exec node ghost install "$GHOST_VERSION" --db sqlite3 --no-prompt --no-stack --no-setup --dir "$GHOST_INSTALL"; \
// 改成
su-exec node ghost install "$GHOST_VERSION" --no-prompt --no-stack --no-setup --dir "$GHOST_INSTALL" --db mysql --dbhost $MYSQL_HOST --dbuser $MYSQL_USER --dbpass $MYSQL_PASS --dbname $MYSQL_DBNAME;

(2) 透過 dokku storage 把 /content 目錄設定好,記得路徑要跟 Dockerfile 的一致

// e.g.,
dokku storage:mount APP_NAME /var/lib/dokku/data/storage/ghost-blog:/var/lib/ghost/content

Update:
因為 Ghost 的 content 目錄下面有四個子目錄:data logs themes images,建議在設定 dokku storage 一起把四個目錄建好,權限也別忘了指給 dokku

(3) 把 Dockerfile & docker-entrypoint.sh 裡面的 content.orig 註解掉(其實我不太懂為什麼要寫這段行為)

(4) 收工!之後需要升級就進來調一下 GHOST_CLI_VERSION & GHOST_VERSION 即可。

嗯,因為這樣所以又回來了XD

ps:
如果你想更方便的方式,可以用 zeit/now,直接用他們的 example 即可!!