Hugo をDocker-Composeでビルド、デプロイできるようにする

2020年03月21日

環境構築とかめんどいのでDockerで全部できるようにしてみました

HugoのDocker

HugoのDockerイメージはなぜか公式から提供されていません
ローカルでの動作はバイナリを使うべきと言われても実際は

  • Hugoを入れるのがめんどい
  • Moduleを使うとなるとGoも入れるとかめんどい
  • なんかめんどい

と、まぁめんどいんですよ(適当)

実際のところ、初期の環境はUbuntu、メイン環境はWindows、持ち歩くのはWindows
どの環境もDockerは入っていますが、近々どのマシンもOSレベルのお掃除を検討しているので今からHugoのみ入れるのも不便です
また、CIとのバージョン対応が今まではtravis.ymlに書き込んでいたのでバージョン差異があるとめんどかったのです

ということでDockerでやりましょ(強引)

HugoのDockerImage

peaceirisさんが作成されたモノを使います
https://github.com/peaceiris/hugo-extended-docker
最近のHugoに対応されていますし、Hugoのリリース後その日のうちに対応するとのことです

ファイル修正

https://github.com/zinntikumugai/sublog/commit/5f64259773826502c6c8c3d0b7f7acf822b8ec0c
こちらの修正の通りですが多少解説も兼ねて細かく書きます

今回はdocker-composeを使うので以下の通り

version: '3'

services:
  hugo:
    container_name: hugo
    image: peaceiris/hugo:v0.67.1
    # image: peaceiris/hugo:v0.67.1-mod  # Hugo Modules
    ports:
      - 1313:1313
    volumes:
      - ${PWD}/src:/src
    command:
      - server
      - --bind=0.0.0.0
      - --buildDrafts

imageにHugoのバージョンを書いていますがdocker-composeの環境変数にしたほうがいいかもしれない(正確にはymlの環境変数だっけかな)

Hugoで必要なファイル類はsrcディレクトリ以下に配置してください(あくまでも好みですが)

追加で修正が必要なのはHugoのテーマでしょうか
基本的に

- git submodule
- zipでDLして配置

のいずれかですが、submoduleを使っていたので.gitmodulesを書き換えています
実際はフォルダ削除とか色々してみましたが、初期pull状態でsubmoduleのpullをしてなかったところsubmoduleを再同期しても動作していなかったので、改めて

rm -rf themes/cleanwhite
git submodule add https://github.com/zhaohuabing/hugo-theme-cleanwhite.git src/themes/cleanwhite

と実行しました

これで

docker-compose up

を実行して、http://localhost:1313にアクセスすることでローカルテストすることができます

CIの対応

https://github.com/zinntikumugai/sublog/commit/a59e6088fdc853ef1908b2d44e0bb3e004b058cb
TravisCIでGitHubPages にデプロイしているのでこれらに対応する必要があります

language: go
dist: trusty

# using docker
services:
    - docker

# update docker
addons:
    apt:
        packages:
            - docker-ce

env:
    - DOCKER_COMPOSE_VERSION=1.25.4

install: true

before_install:
    # update docker-compose
    - sudo rm /usr/local/bin/docker-compose
    - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
    - chmod +x docker-compose
    - sudo mv docker-compose /usr/local/bin

script:
    - docker-compose run --rm hugo ""

deploy:
    provider: pages
    local-dir: src/public
    skip-cleanup: true
    github-token: $GITHUB_TOKEN
    keep-history: true
    fqdn: sublog.zinntikumugai.com
    on:
        branch: master

以下に注意すればTravisCIでもDocker-Composeは動くようです

  • Dockerを更新する必要がある
  • Docker-Composeも更新する必要がある
  • deployの参照フォルダの修正(srcディレクトリに変更した場合)

Dockerの更新ですが通常のインストール(apt)同様に行う方法とaddonsの項目があるようです
なんとなくaddonsにしてみましたが3/21の時点で18.06.3~ce~3-0~ubuntuでした

使ってみて

各環境を用意しなくてもいいが、デプロイ周りが余計複雑になってる気がする

今回はHugoのみのDockerイメージを使いましたが、Hugo module込のイメージはかなり大きくなるとのこと(100MB未満が400MBほどに…)
まぁ、テーマが対応してなかったので使う必要がないと割り切りましたが使おうと思えばすぐ対応できるのでそのときに考えましょ

参考

Techhugotravisdockerdocker-compose

supermicroのマザーボードをBIOS更新する

さぶのブログを作りました

comments powered by Disqus