TL;DR
最近セルフホスティング環境を整備していたので備忘録で現在の状況を記しておく
セルフホスティングとは
まずここで言うセルフホスティングとは古き良き自宅サーバとほぼ同義だけど、近年は実際サーバの場所自体はそこまで重要じゃなく、VPS やサーバレスでセルフホスティングなどもありえるのでセルフサービスのホスティング全般を指してセルフホスティングと呼んでいる
なぜ今セルフホスティングか
なぜ今セルフホスティングに注目するべきなのか、あるいは注目が集まっているのか端的に言えば必要な技術要素が揃った、というのが大きいと思っている. セルフホスティングをするには大きく分けて
- リソース(CPU, メモリ, ネットワーク, 物理的空間, コスト)
- アプリケーション
- アプリケーションを配備するツール群
の 3 つが必要だが、どれも十分成熟し実用上既に問題ない域に達したのが大きな理由として挙げられる。
まずマシンについては小型化が進み、RasberryPi やミニ PC などにホスティングすることも可能なレベルまで CPU が成熟し、個人用途であれば 4,5 万も出せば大抵のアプリケーションをホスティングするのに十分なマシンが手に入るようになったことが大きい. またネットワークについては 10GbE が普及価格帯になり手の出せる環境になってきた
アプリケーションについても主要なユースケースをカバーするセルフホスティングアプリケーションが出揃い、またどれも成熟してきていること
またこれが一番大きいが根本的な変化として Docker がセルフホスティングにおいてほぼ標準化されたツールとなったこと. これが実際破壊的な変化をもたらしアプリケーションデプロイが劇的に簡単になった. 最近の NAS には標準で Docker が入っており特に何もしなくても docker compose の記述を GUI 上より行うだけでアプリケーションのデプロイが完了する.
セルフホスティングにおける問題の多くはマシンのリソース制約、物理的制約、コスト、アプリケーションのリソース分離、デプロイの問題だったが上記の技術の成熟により概ね解決した状況になったと認識している.
状況の改善に伴いセルフホスティングアプリケーション界隈もサブスクが一周した感のある昨今、揺り戻しが観測される. 主要なサブスクサービスのオルタナティブとなるアプリケーションだけでなく、今までサブスクで痒いところに手が届かなかかった箇所に OSS を有志でプラグイン可能な形で拡張していく開発も進んでいる。
正直コストパフォーマンスを求めるのであれば確実に悪い部類には入ると思う. 自分でメンテも時には必要だし、ホスティングするための電気代も増える. それでもセルフホスティングをするのは学びのためであり、ホームラボ環境で好きに動かしたり壊したりすることから得られる経験が大きいと現状感じている。
例えば Prometheus や Grafana など普段仕事で触ることがありそうで無かったものを今回自宅ホームラボ環境では追加してモニタリングのために使っている。(普段仕事では AWS や GCP のクラウドモニタリングやメトリクスを使うので OSS ベースでのソリューションに頼ることが少ない)。バックエンドストレージには Victoria Metrics や Grafana Mimir など仕事で使ったことはないけど有力なものを選んでいる。実際少しでも触ったことがあるのと、全くないのとでは大違いでそのミドルウェアの手触りや温度感、普段触らないアーキテクチャを学ぶことで得られるものが多い。
仕事では通常安定性や一般的な実績、社内でのこれまでの実績重視で選定することが多いので意識的に普段使わないものを選んだりしている。
構成
概観
以下が 2025 年 8 月現在のホームラボ環境のセルフホスティングアーキテクチャになっている
- Tailscale
- 軽量 VPN
- 各クライアントと アプリケーション を接続する
- 基本的に家の中でもアプリケーション接続する時は VPN 接続している
- 外出時にも透過的にアクセスしサブスクのように扱うため
- また LAN 内とはいえ IoT 機器も多いので脆弱な IoT 機器から脆弱なセルフホストアプリケーションに侵入され権限昇格等の脆弱性となる箇所を無くすため
- 軽量 VPN
- Tailscale Docker Proxy
- Docker label 情報から Tailscale ホストを仮想的に作成しアプリケーションへルーティングしてくれる
- 自動的に HTTPS 接続となり SSL オフローディングもされるので LAN 内でもセキュアな通信でアプリケーションへ通信出来る
- Docker label 情報から Tailscale ホストを仮想的に作成しアプリケーションへルーティングしてくれる
- Adguard Home DNS
- Adblocker 兼 DNS リゾルバ
- Docker イメージもあるが名前解決の問題でホストにインストールしている
- コンテナ内から他 docker network のアプリケーションの tailscale ドメインでの名前解決が出来なかったので
- Homepage
- アプリケーションダッシュボード
- HomeAssistant
- ホームオートメーション
- Switchbot や TP-Link Tapo などの IoT 機器と連携しメトリクス取得や HomeAssistant ダッシュボードから家電の操作を出来るようにしている
- 短期メトリクスのバックエンドは PostgreSQL(公式は SQLite 推奨だがメンテのしやすさ的に RDBMS にしたかったので)にしている
- 長期メトリクスのバックエンドは Victoria Metrics を使用している
- ホームオートメーション
- FreshRSS
- RSS リーダー
- バックエンドは PostgreSQL
- JellyFin
- 動画ストリーミングサーバー
- デスクトップクライアントは公式の Jellyfin Media Player と JellyCon プラグイン経由で Kodi で使用
- モバイルクライアントは公式の Jellyfin for Android を使用
- 動画ストリーミングサーバー
- Navidrome
- 音楽ストリーミングサーバー
- デスクトップクライアントは Subsonic API 互換のSupersonicを使用
- モバイルクライアントは同じく Subsonic 互換のSymforiumを使用
- 音楽ストリーミングサーバー
- Grafana
- 各種可視化
- HomeAssistant 経由で Victoria Metrics に送信されたデータをソースにスマートプラグから収集した電力使用量等を長期で可視化
- 短期の可視化は Home Assistant の WebUI からも行える
- Prometheus
- 各種 Exporter からメトリクスを収集(Windows, Linux, NAS, L2 Switch…)
- Grafana Mimir
- Prometheus のストレージバックエンド
- BackRest
- バックアップは Restic で行っているのでその Web GUI. Restic のバックアップスケジュールと状況の可視化をしている
- デイリーで Unraid へ NAS の内容をバックアップ
- バックアップは Restic で行っているのでその Web GUI. Restic のバックアップスケジュールと状況の可視化をしている
- MeTube
- Youtube 等動画 DL
- Syncthing
- NAS の特定ディレクトリを DAP などに同期 (Ugreen Nasync のアプリが DAP にインストール出来なかった)
- Maloja
- Navidrome の再生履歴を scrobble し記録する
- Unraid
- DXP4800Plus のバックアップとして余ったフラッシュストレージを MS-01 に JBOD のように積んでいる
- 拡張 PCIe スロットで M.2 ssd を積んでる
- DXP4800Plus のバックアップとして余ったフラッシュストレージを MS-01 に JBOD のように積んでいる
- Minio
- S3 compatible なストレージとして Restic のバックエンドとして使用
- 最近ライセンスが変わって WebGUI の機能が制限されたので代替があれば変えたい
- Draw.io, Excalidraw, Code-Server…etc
- 開発ツール類もホスティング
ネットワークについては L2 スイッチと MS-01 間を LACP で一部冗長化している
以下構築した画面
Homepage によるダッシュボード
Grafana
Backrest
Supersonic
構築した感想
正直 10~20 年前くらいのセルフホストアプリケーションの世界とは隔世の感があり、主要なアプリケーションはスポンサーを迎え、成熟した開発体制や大規模化により商用に負けず劣らずな機能性を持つものもある。クロスプラットフォームは当然のこと、モバイルアプリを用意してあるアプリケーションも少なくない。
この違いは昔自宅サーバをやっていてその後サブスクに移行したみたいな人にこそ体験して欲しい。
自分も昔自宅にマシンを置いて DDNS やプロキシを設定し、出先からアクセス出来るようにしていたけど、結局メンテや運用コストの高さからサブスクなどに移行した口なので、久しぶりにセルフホスティングをしてここまで簡単になったのかと驚きもあった。
やはり実際手を動かしてみないとなぜ流行ってるのかや、今までのものとどう違うのか理解出来ないものも多々あるのでそういう意味でもいい学びになった。