3,000円で始める個人開発のすゝめ|Raspberry Pi Zero 2Wで構築するオンプレ環境とCI/CD
はじめに
なるべく安く自分専用のアプリを運用したい。エンジニアなら誰しもが一度は考えたことがあると思います。
しかし、AWSやAzureといったクラウドサービスは、無料枠があるとはいえ従量課金制のため、意図しないリソース消費によって高額な請求が発生するリスクがあります。また、設定ミスによって機密情報やデータベースが外部へ公開されてしまうといったセキュリティ上の懸念も無視できません。
一方で、オンプレミスで運用しようにも、定番のRaspberry Pi 5やミニPCは最低でも1万円から2万円ほどするため、手軽に導入できるとは言い難い状況です。
そこで今回は、約3,000円で購入できる「Raspberry Pi Zero 2W」を使用し、安価かつ開発体験を損なわない形で自分専用のアプリを開発運用してみました。
Raspberry Pi Zero 2Wとは
Raspberry Piにはいくつかシリーズがあり、性能が高くOSを持ち、PC用途でも使用できる「Raspberry Pi(Mainline)」シリーズ、マイコン(マイクロコントローラ)で、OSを持たない「Raspberry Pi Pico」シリーズなどがあります。
そして今回使用するのはその中間にあたるような「Raspberry Pi Zero」シリーズです。性能は低いですが、Raspberry Piと同じようにLinuxがインストールでき、PCとして使用できます。
特徴としては小型で低消費電力なことが挙げられます。プロセッサ性能はRaspberry Pi 3と同程度ですが、メモリが512MBしか搭載されておらず、その点を考慮した運用が求められます。
開発したアプリ
今回開発したアプリは、ズボラな筆者が掃除を習慣化するための掃除管理アプリです。以下の画像のように部屋の間取りが表示されており、それぞれの掃除スポットに掃除の期限を設定することができます。
フロントエンドにはReactを、バックエンドにはGin(Go)を使用しています。
CI/CDについて
CI/CDは快適な開発環境の前提であると筆者は考えています。そのため、今回も当然構築しています。
しかし、Jenkinsを動かすほどの体力(リソース)はRaspberry Pi Zero 2Wにはありません。また、GitHub Actionsはクラウドで実行している都合上、ローカルのRaspberry Pi Zero 2Wにデプロイするにはルーターのポートを開放するなどして外部からのアクセスを許可する必要があります。しかし、これには外部からの不正アクセスを招くリスクが伴います。
そのため、今回はGitHub Actionsの2種類のランナーを使い分ける方式にしました。
ホステッドランナー(GitHub-hosted runner)
GitHubがクラウドに用意しているランナー
性能は中程度だが、Raspberry Pi Zero 2Wよりは遥かに高い
月2,000分までの無料枠がある
セルフホステッドランナー(Self-hosted runner)
自前で用意したマシンにランナーを常駐させる(今回はRaspberry Pi Zero 2Wに常駐)
無料
ホステッドランナーにはテストやビルドなどの重い処理を担当させ、セルフホステッドランナーでは前段でビルドしたアーティファクト(成果物)をダウンロードしローカルに配置する処理のみを行います。この方式だと、ローカルからのアウトバウンド通信だけで完結するので、セキュリティリスクを最小限に抑えることができます。
監視について
システムの監視には無料枠があるMackerelを使用しています。個人用のアプリしか動かしていないので監視は不要かもしれませんが、かっこいいので採用しています。個人開発にはロマンが必要です。
Mackerelでは画像のようにシステムメトリクスのグラフを見ることができます。
さいごに
本記事で紹介したように、メモリ512MBという制約のなかでも想像以上に快適な運用環境を構築することができました。オンプレミスはクラウドサービスと違って、青天井の料金事故が起こらないため、これからアプリの運用やCI/CDを学びたい方にもおすすめです。安価に始められるので、ぜひ皆さんもお家に1台、Raspberry Piを飼ってみてください。


