自宅サーバー構築とKamalデプロイ環境構築メモ
目的:自宅サーバー作って遊びたい
- プライベート利用かつPaaSで高コストになるものの代替
- セルフホスト型ウェブアプリ
- データベースが必要なもの
- VPSや自宅サーバーにインストールしたいSaaS代替Webアプリ38選
- ONCEシリーズ
- GPUタスクを含むローカルLLMのフロントエンド
- セルフホスト型ウェブアプリ
- 常駐プログラム
- クローラー
- 長時間かかるデータ処理
- 停止しても良いもの
- バックエンドのCMS(自宅サーバー)
- フロントエンド(デプロイ時にコンテンツを書き出し、ホスティングプラットフォームへアップロード)
- その他
- マイクラなどの身内用ゲームサーバー
- サーバー構築自体を目的とした遊び(ISUCON過去問など)
要件:令和の自宅サーバー
- コンテナオーケストレーション
- コンテナイメージをpushするだけでデプロイ
- アプリ追加時のミドルウェア設定を自動化
- Heroku代替のオープンソースツールを検討
- Dokku, CapRover, Coolify
- Kubernetes系は自宅環境では複雑
- 複数台構成への対応
- 基本は1台のサーバーに複数アプリを集約
- フェールオーバー用に後からサーバー追加
- Cloudflare Tunnelで対応
- Cloudflare Load Balancers(有料)
- VPSへの移行も視野に入れる
- DHHデモではHetzner VM3台 + Hetzner Load Balancer
- https://youtube.com/watch?v=QC4b2teG_hc
- セキュアな接続
- パブリックIPアドレスを公開せずに外部からHTTPS/SSH接続
- Cloudflare Tunnel
- Tailscale Funnel
- パブリックIPアドレスを公開せずに外部からHTTPS/SSH接続
コスト:既存ソリューションより安価かつ運用負荷を低減
- 比較対象
- VPS、レンタルサーバー
- Heroku, RenderなどのPaaS
- Google Cloud, AWSなどのクラウドプラットフォーム(CaaS)
- Cloud Run, GKE, AppRunner, ECS, EKSなど
- 比較対象外
- Cloudflare Workers, Vercel, AWS LambdaなどのFaaS
- Fly.io(PaaS/CaaS/FaaSの複合型)
必要な機材
- Linux(Ubuntu)がインストールできるPC
- 低価格ミニPC
- Raspberry Piでも可
- USBメモリ(Ubuntuインストール用)
- Ubuntuでなくても可(Kamal開発元の37signalsに合わせる)
Ubuntuのインストール
- Ubuntu Serverのダウンロード
- インストール用USBメモリ作成
- ミニPCへのUbuntuインストール
- Dockerインストール
- 内部ネットワークからSSH接続
Kamalのインストールと設定
kamal init.kamal/secretの追加- Docker Hubアクセス用Personal Access Token
config/deploy.ymlの編集kamal setup
Cloudflare Tunnelによるセキュアな接続
- ミニPCへの
cloudflaredインストール - Tunnelの作成
- HTTPS接続
- ローカルマシンへの
cloudflaredインストール - 外部ネットワークからSSH接続
- ファイアウォール(ufw)を有効化
- Cloudflare Tunnel以外からの接続を遮断
Webアプリのデプロイ(Next.js)
- KamalチュートリアルはRailsアプリが多いが、Next.jsの解説記事あり
- Docker Hubはプライベートイメージを1つ無料で登録可能
- 公開しても問題なければ公開イメージでも可
- SQLite + Prismaでデータベースに接続する方法