概要
ラズベリーパイからサーバー運用を始め,その後はデスクトップPCでKubernetesを動かすところまで経験しました. この過程でネットワークの仕組みを学ぶことができました.
こうした経験は,残しておかなければ忘れてしまうため,本稿にまとめます.
サーバー運用の変遷
以下の画像は,直近でGitHubのプロフィールに掲載していたサーバーの運用記録です.

1. 初期:ラズベリーパイ
初期のサーバー構成は以下の通りです.

このラズパイサーバーは,空冷ファンとSSDを増設したものです. 可用性を向上させるために増設したのですが,周辺機器を増やした影響で電源供給が不安定になってしまっていました. 突発的にSSDの読み取りに失敗することがあり,頻繁にサーバーが落ちるエラーを抱えていました.
2. 中期:デスクトップPC
ラズパイの電源課題を解決するため,余っていたデータ分析用のゲーミングデスクトップPCをUbuntu Server化し,運用を始めることにしました.
マシンスペックが向上し,懸念だった電源回りも大幅に改善しました.この時期はコンテナオーケストレーションの学習を兼ねて,MicroK8sを導入.GitHubでビルドしたWebサイトのコンテナイメージを自動でPullし,K8sランタイム上で動作させていました.
以前,環境構築の勉強のために一からKubernetesを構築した経験があったのですが,それに比べるとMicroK8sは簡単に導入でき,個人運用のコンテナランタイムとしては管理コストを抑えられる点が素晴らしいと感じました.
加えて,Prometheusも導入し,Grafanaを利用してサーバーの状態を可視化していました. MicroK8sでは,こうした周辺ツールの導入もアドオンとして用意されており,導入が手軽でした.
Grafanaを導入したときのスクショです.きれいすぎてビビりました.
しかし,スペックや運用環境は大幅に向上したものの,物理的な単一ノードであることには変わりなく,可用性の低さが依然として課題となりました.
3. 現在:GitHub Pagesへの移行
運用コストを抑えつつ,高い可用性を維持したいと考えた結果,最終的にWebサイトのホスティング先を GitHub Pages へ移行することにしました. これにより,安価かつ高い可用性を実現できました.
学んだ技術
今回のインフラ刷新と運用の変遷を経て,以下の技術への理解が深まりました.
静的サイト生成とCI/CD
現在のWebサイトは,静的サイト生成ツールである Hugoを使って構築しています.記事の内容はMarkdownで執筆し,HugoでHTML/CSSにビルドしたものをGitHub Pagesで公開する仕組みです.
デプロイの自動化(CI/CD)を整えるにあたっては,Hugo公式が提供しているGitHub Actions用のテンプレートを利用しました1.
MarkdownをGitHubにPushするだけで自動的にサイトが更新される環境が整い,運用の手間が大幅に削減されました.
Cloudflare Zero Trustによる公開
勉強のために始めた自宅サーバーですが,外部公開のステップでも大きな学びがありました. 通常ならポート開放が必要なところですが,Cloudflare Tunnel2を利用することで,ポートを閉じたまま安全に外部公開する仕組みを構築できました.
まとめ
ラズパイの故障対応から始まり,MicroK8sでの本格的なコンテナ運用,そしてGitHub Pagesへの移行と,目的や課題に応じてインフラを変化させていくプロセスが面白かったです.
物理マシンを触りながらインフラ領域について学んだことを,今後の開発に活かしていきたいです.
Grafanaを導入したときのスクショです.きれいすぎてビビりました.