こんにちは.入社してからあるであろう健康診断のために付け焼き刃の努力で運動しているkumicoです.前回の記事ではHugoを使ってブログをつくった話をやりました.今回はこのブログの運用方法について,ホスティング方法を交えて紹介していこうと思います.

技術

Amazon Lightsail: AWSのVPSサービス.安い!!!とにかく安い!!!

Docker: ブログページと配信サーバを一つのDockerイメージにしている.

Caddy: Go製のwebサーバ.機能が豊富で,自動でhttps化してくれる.

構成

このブログは僕のホームページをホスティングしているVPSと同じインスタンスを使用しています.構成は以下のようにしています.

ホームページとブログの構成

単一インスタンスにDockerをインストールしてホームページとブログはコンテナとして動かし,Caddyがドメインに応じてサービスを公開しているポートにプロキシするようにしています.プロキシするCaddyをコンテナとして動かしていないのは,僕の好みです.

プロキシするためのCaddyの設定Caddyfileは以下のような感じです.

hoge.example {
        reverse_proxy :8000
}
blog.hoge.example {
        reverse_proxy :9000
}

これだけの設定でドメインに応じてプロキシし,80,443ポートで待ち受けてくれるので非常に簡単です.

投稿する流れ

  1. 手元のPCで記事を執筆する
  2. Hugoを使ってビルドする
  3. ビルドしたファイルごとGitHubにプッシュする
  4. GitHub Actionsを使って,Dockerイメージのビルドを行う(このときブログページをコンテナにコピーしている)
  5. ビルドしたイメージをGitHub Container Registryにプッシュする
  6. VPSにSSHして最新のコンテナイメージをpullしてコンテナを起動すれば,投稿完了

ちなみにブログのDockerイメージの元になるDockerfileはこんな感じです.

FROM caddy:2.4.6-alpine

COPY Caddyfile /etc/caddy/Caddyfile
COPY public/ /blog/public
Volume caddy_data:/data

ブログの配信にもCaddyを使っていて,公式のDockerイメージが配布されています.

VPSにSSHして最新のイメージpullするの面倒じゃね?

上記の5の後に,GitHub ActionsからVPSにSSHしてコマンド実行するみたいなことをやりたい.Ansibleとか使えないか気になっている.これやれば,GitHubにpushするだけで,ブログ投稿が可能になる

参考

  1. Caddy Document
  2. VirtualHostをお手軽に実現できるDockerコンテナnginx-proxyの起動方法