ブログ(Hakyll)のデプロイをDockerを使って高速化した
Posted on 2018-02-01
このブログのデプロイが遅いのが苦痛だったので対策した。
問題点
このブログはTravisCIでデプロイしているのだが、一ヶ月に1回くらいしか更新しないためか、キャッシュもあまり効かず、毎回30分くらいはかかってしまう。(キャッシュが効くときは3分くらいでおわることもある。)
TravisCIで行っているデプロイ手順としては以下のようになっている。
- Stackの準備
- GHCの準備
- Hakyllとブログ用Haskellコードのコンパイル
- ブログ用のMarkdownをHTMLに変換
- GitHub Pagesにデプロイ
このうち、1-3まではほぼ毎回変わらないにも関わらず、この時間が大きな部分を占めていた。
解決方法
上記1-3までを行ったDocker imageをあらかじめ用意して、TravisCI上は
- Docker imageのpull
- ブログ用のMarkdownをHTMLに変換
- GitHub Pagesにデプロイ
のみで済むようにした
デプロイ用Docker imageの作成
- ライブラリをいろいろインストールするのが面倒だったので
buildpack-deps:jessie
から作るようにした - リポジトリを一個作って、Docker HubでAutomated Buildされるようにした。 yoshitsugu/yoshitsugu.github.io-deployer-docker
.travis.yml の修正
不要なライブラリを消去してinstall部分も以下のように修正した。
- 旧バージョン
install:
- stack --no-terminal setup
- stack exec -- ghc --version
- stack --no-terminal build
- stack exec -- blog build
- 新バージョン
install:
- docker pull ${DEPLOYER_NAME}
- docker run -v $(pwd)/_site:/yoshitsugu.github.io/_site -v $(pwd)/js:/yoshitsugu.github.io/js -v $(pwd)/css:/yoshitsugu.github.io/css -v $(pwd)/posts:/yoshitsugu.github.io/posts -v $(pwd)/images:/yoshitsugu.github.io/images --rm ${DEPLOYER_NAME} bash -c "cd /yoshitsugu.github.io && LC_ALL=C.UTF-8 stack exec -- blog build"
結果
- 以前
- 現在