ありがちな話だが、wordpressを自鯖に導入してweblogを運営していたのだが、wordpressのアップデートについていくのが面倒になってきたので、静的ジェネレートしたサイトをAmazon S3に置いて、webhosting機能で公開することにした。 最初はwordpressから静的サイトを出力できる拡張機能と、S3連携ができる拡張機能を使っていたが、S3連携が動かなくなったので構成をまるっと見直すことにした。
構成図
設定
まず静的ジェネレートするdockerコンテナを用意する。
docker-compose.yml
コンテナは、製作者の公式イメージがなさそうなので、Docker Hubで検索して、Dockerfileなどから問題がなさそうなものを選択する。
私の場合は、base imageがalpineで軽量かつbuild工程が単純そうなpeaceiris/hugoを利用することにした。
UID, GIDは、指定しておかないと生成されたファイルがroot権限になってしまうため、host上で操作する時はいちいちsudo
をつければいいが、samba越しに操作する時には障害となるのでsambaで共有する予定のユーザのUID, GIDにしておく。
その際、dockerコンテナ内のpasswd, groupにそのUID, GIDがないとエラーになるため、read onlyモードで読み込んでおく。
ソースはどこにおいても良いが、私は/opt/hugoに置くことにした。samba共有する時のパス指定に関わってくるので、その点を念頭に決定すること。
version: '3'
services:
hugo:
image: peaceiris/hugo
user: "1000:1000"
volumes:
- /opt/hugo:/src
- /etc/localtime:/etc/localtime:ro
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
archetypesの中にあるテンプレートに従って新規ポストを生成するには、投稿するファイル名をNEWPOSTFILE
とすると
docker-compose run --rm hugo new post/NEWPOSTNAME.md
作成したファイルを元に静的ジェネレータを走らせるのは、適用するテーマ名をTHEME
とすると
docker-compose run --rm hugo -t THEME
goofysの導入・使い方
生成したファイル群を、S3にコピーする。 s3cmdを使ったり、いちいち手でアップロードしても良いが、面倒なのでファイルシステムとしてマウントしてコピーをできるようにする。
ツールは、応答速度の速いgoofysを使うことにする。 goofysを使ってAmazon LinuxにS3をマウントする。 - Qiita
上の記事を参考に、ubuntuユーザならyumをaptにする。
aws cli
でコンフィグが生成されていることを前提に、FQDNをFQDN
、マウント先を/MNT
とすると
sudo /home/hada/go/bin/goofys -o allow_other --uid=1000 --gid=1000 --use-content-type FQDN /MNT
あとは、publicフォルダを配置したいパスへコピーするだけ。 例えば、このサイトの場合、hugoというフォルダにコンテンツをコピーするので、
cp -r /opt/hugo/public/* /MNT/hugo/
とする。