devocのブログを支える技術 with Caddy
こんにちは.入社してからあるであろう健康診断のために付け焼き刃の努力で運動している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ポートで待ち受けてくれるので非常に簡単です.
投稿する流れ
- 手元のPCで記事を執筆する
- Hugoを使ってビルドする
- ビルドしたファイルごとGitHubにプッシュする
- GitHub Actionsを使って,Dockerイメージのビルドを行う(このときブログページをコンテナにコピーしている)
- ビルドしたイメージをGitHub Container Registryにプッシュする
- 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するだけで,ブログ投稿が可能になる