Rails 8 で作った個人サイトの技術構成と維持費
本サイトは自作の個人サイトです。この記事では本サイトの技術構成と、実際にかかっている維持費をまとめました。
なお、本サイトは継続的にアップデートしているため、この記事の情報は公開時点のものになります。
個人サイトの運用イメージ
なお、本サイトは継続的にアップデートしているため、この記事の情報は公開時点のものになります。
技術スタック
フレームワーク・言語
- Ruby on Rails 8.1.3
- Ruby 4.0.3
インフラ
- AWS EC2(t3.small / Ubuntu 24.04 LTS)
- AWS S3
- AWS Route53
- Docker / GitHub Container Registry
- Kamal 2.11.0
その他
- SQLite(DB)
- devcontainer(開発環境)
構成の全体像
開発環境(devcontainer)
↓ Pull Request
GitHub Actions(CI)
↓ mainブランチへマージ後、Kamalで自動デプロイ
AWS EC2
├─ Traefik(リバースプロキシ・SSL終端)
└─ Rails アプリ(Dockerコンテナ)
AWS S3
└─ ブログ画像の保存先
AWS Route53
└─ ドメイン管理
なぜ Kamal を使ったか
通常、サーバーへのデプロイには、Nginx などのリバースプロキシの設定、SSL 証明書の取得・更新、Docker コンテナの起動設定など、いくつかの作業が必要になります。
Kamal を使うことで、Docker イメージの作成からサーバー上でのコンテナ起動までを比較的シンプルに扱えます。また、リバースプロキシや SSL 周りの設定も Kamal に任せやすいため、デプロイ作業全体を整理しやすくなりました。
AWS を選んだ理由
個人サイトであれば、より低コストな VPS や PaaS を使う選択肢もあります。
それでも AWS を選んだのは、エンジニアとして AWS 上で本番環境を構築・運用する経験を積みたかったためです。
EC2、S3、Route53 などを実際に使いながら運用できる点に魅力を感じ、本サイトでも AWS を利用しています。
また、当初は ECS を使う構成も検討しましたが、個人サイトとしては構成やコストがやや大きくなりそうだったため、今回は EC2 と Kamal を組み合わせる構成にしました。
インスタンスタイプについて
AWS EC2 には様々なサイズがあります。本サイトでは t3.small を使用しています。
小さいサイズの方がコストを抑えられますが、デプロイ時の安定性やメモリ使用量を考慮して t3.small を選びました。
SQLite を選んだ理由
本サイトでは、データベースに SQLite を使用しています。
個人サイトとしてはアクセス数や同時書き込みが多くない想定のため、RDS などの外部データベースを用意するよりも、SQLite を使う方が構成をシンプルにできると考えました。
また、Rails 8 では SQLite を使った構成も選びやすくなっており、インフラ構成をシンプルにしながら、コストも抑えることができました。
秘匿情報の管理
AWS のアクセスキーなどの秘匿情報は、Rails の credentials で暗号化して管理しています。
Kamal の secrets には秘匿情報の実値を直接書かず、Git 管理外のキーや Rails credentials から必要な値を読み込む形にしています。
維持費の目安
- EC2関連費用(サーバー・EBS・パブリックIPv4など): 約 4,000 円/月
- S3(画像ストレージ): ほぼ無料
- Route53(DNS): 約 100 円未満/月
- GitHub Container Registry: 無料枠の範囲内
- ドメイン取得費用: 約 1,300 円
- ドメイン年間更新費用: 約 3,500 円/年
※AWSの料金は利用量・リージョン・為替レートによって変動します。
※ドメイン費用は種類や取得先によって異なります。
まとめ
本サイトでは、Rails 8、Kamal、AWS EC2、SQLite を組み合わせて、比較的シンプルな本番環境を構築しました。
静的サイトや低価格なVPSを使う場合と比べるとコストは高めですが、AWS上でRailsアプリを構築・運用する経験を積む目的もあり、この構成にしています。
今後も、少しずつ改善しながら長く使える個人サイトにしていきたいと考えています。