self-hosted沼にハマりつつあります。
↑の記事で書いた通り、クラウド上のVMでホスティングするのは「企業にデータを持たれない」的な目的には反してしまうな〜と思ったので、自宅にサーバーを立ててhomelabを作ることにしました。
始めての作業でわからないことだらけだったので、Gemini先生にお伺いを立てながらやりました。この記事は、そのチャット履歴を元にGemini先生に執筆してもらったものです。
はじめに:この記事で構築するHomelabの全体像
この記事は、押し入れで眠っていた一台の古いPCが、ProxmoxとDockerを駆使したモダンな自宅サーバー(Homelab)として生まれ変わるまでの冒険の記録です。
読み終える頃には、以下のような多層構造を持つ、柔軟でパワフルなサーバー環境の構築手順が分かります。
完成図:多層構造のHomelab
物理的なハードウェアの上に仮想化基盤を築き、その中に用途別の作業場(VM)を作り、さらにその中で万能な工作機械(Docker)を動かす、というイメージです。
[ あなたのPC (Mac/Windows) ] |(Tailscaleの魔法のトンネル) |+-------------------------------------------------+| 【物理層】 サルベージしたPC || + CPU: Core i3-7100 || + メモリ: 8GB || + ストレージ: NVMe SSD(OS用) + HDD(データ用) || || +-------------------------------------------+ || | 【仮想化層】 Proxmox VE || | || | +---------------------------------------+ || | | 【VM層】 Ubuntu Server 24.04 (`lumine`)|| | | || | | +---------------------------------+ || | | | 【コンテナ層】 Docker | || | | | + Netdata (監視ツール) | || | | | + Jellyfin (今後導入予定) | || | | | + ... | || | | +---------------------------------+ || | +---------------------------------------+ || +-------------------------------------------+ |+-------------------------------------------------+構成
ハードウェア
- 母艦PC: 研究室からサルベージしたデスクトップPC
- CPU: Intel(R) Core(TM) i3-7100 @ 3.90GHz
- メモリ: 8GB
- マザーボード: ASRock B250M Pro4
- 既存ストレージ: 1TB HDD (TOSHIBA DT01ACA100)
- 新たな魂 (増設パーツ):
- システムドライブ: Apacer AS2280P4 (512GB M.2 NVMe SSD) 5000円
- 発掘品: 謎のSATA SSD 256GB
ソフトウェア
- 仮想化プラットフォーム: Proxmox VE
- VM用OS: Ubuntu Server 24.04 LTS (minimized)
- コンテナエンジン: Docker & Docker Compose
- セキュアなリモートアクセス: Tailscale
- リアルタイム監視ツール: Netdata
- USBインストールメディア作成: balenaEtcher
【序章】 我、”Homelab”を建立す
self-hosted沼にハマりつつある。
上記の記事で述べた通り、クラウド上のVMでセルフホスティング環境を構築したものの、いくつかの課題が浮かび上がってきた。VPSを利用するということは、結局のところデータはレンタルサーバー会社の物理的な管理下に置かれることになる。「企業にデータを持たれない」という当初の目的を、より純粋な形で実現するにはどうすれば良いか。
クラウドには安定稼働や固定IPといった利点がある。しかし、真のデータ主権を求めるなら、物理的な所有が欠かせない。加えて、容量とパフォーマンスの問題は無視できない。大容量のメディアファイルを扱い、動画のリアルタイムトランスコーディングを行うような環境をクラウドで実現すれば、コストは現実的ではない。
そこで、方針を転換。自宅にサーバーを設置し、“Homelab”を構築することにした。
プロジェクトの母艦となるマシンは、幸運にも手元にあった。以前所属していた研究室が閉鎖される際、廃棄品として出されていたデスクトップPCをゴミ捨て場からサルベージしてきたものだ。
高額なPCだと管理番号が付いているのでこういうことをするとマズいらしいのだが、このPCはそうではなかったので大丈夫なはず…
数年間押し入れで眠っていたが、ついにその真価を発揮する時が来た。
この記事は、この”拾われた”PCが、現代的な自宅サーバーとして生まれ変わるまでの一連の作業ログである。

【第一章】 黎明編:ハードウェアとの対話
サルベージしてきたPCの電源を投入し、まずは現状把握から着手した。幸いOS(Ubuntu 17.10)は起動したため、システム情報から詳細なスペックを確認する。
- CPU: Intel(R) Core(TM) i3-7100 @ 3.90GHz
- 2コア4スレッド。サーバー用途としてはコア数が心許ないが、3.90GHzという高いシングルコア性能は、多くのWebサービスの応答性向上に寄与するはずだ。
- GPU: Intel HD Graphics 630 (Kaby Lake GT2)
- 特筆すべきは、動画のハードウェアエンコード/デコードを支援する Intel Quick Sync Video (QSV) に対応している点。これはJellyfinのようなメディアサーバーを構築する上で、CPU負荷を劇的に下げる強力な武器になる。
-
本当かどうかは不明。
- メモリ: 8GB (7.5GiB)
- 複数のDockerコンテナを動かすには十分な容量。将来的な増設も視野に入れる。
- ストレージ: 1TB HDD (TOSHIBA DT01ACA100)
- 7200 RPMのSATA接続HDD。大容量データの保管庫としては優秀だが、OSやアプリケーションを稼働させるにはランダムアクセス性能が致命的に不足している。
- マザーボード: ASRock B250M Pro4
- 拡張性を左右する重要なパーツ。仕様をWebで確認する必要がある。
- OS: Ubuntu 17.10
- 2018年にサポートが完全終了しており、セキュリティ的にも問題外。OSのクリーンインストールは必須となる。
現状分析の結果、このマシンは 「メディアサーバーとしての高いポテンシャルを秘めているが、ストレージが深刻なボトルネックである」 と結論付けた。
次なる一手は明確だ。OSとアプリケーションを稼働させるための、起動用SSDを増設する。 マザーボード(ASRock B250M Pro4)の仕様を公式Webサイトで確認したところ、非常に重要な事実が判明した。このマザーボードには、通常の2.5インチSATA SSD(最大6Gb/s)より遥かに高速な、 PCIe Gen3 x4接続の「Ultra M.2」スロット が搭載されている。これは最大32Gb/sの転送速度を誇るNVMe規格のSSDに対応しており、このマシンの潜在能力を最大限に引き出すための鍵となる。
方針は固まった。
「PCIe Gen3 M.2 NVMe SSDをシステムドライブとし、既存の1TB HDDをデータドライブとして活用する」
この構成であれば、OSやDockerは超高速に動作し、動画などの大容量データはHDDに気兼ねなく保存できる。
すぐさま秋葉原へ向かい、市場価格と性能のバランスを考慮し、 512GBのM.2 NVMe SSD (PCIe Gen3, サイズ2280) を購入。これが、このマシンの新たな魂となる。
帰宅後、購入したNVMe SSDをマザーボードの「Ultra M.2」スロットに装着し、ネジで固定。物理的な準備はこれで完了した。

購入したNVMe SSD。Apacer SSD 512GB M.2 PCIe Gen3 x 4 NVMe。
人生初のBTOパソコンを買ったときからずっとつくもたんが大好きなので、PCパーツはいつもツクモ電機で買ってます。横にあるのはついでにスーパーで買った粉末にんにく。これを使って早速、夜食にスパゲティを作った。美味しかった。
つくもたん、そういえば最近見かけないなと思ったらなんと契約終了していた。悲しい。
補足
ネジは付属してなかったので、昔電子工作にハマっていた頃のガラクタが詰まったコンテナからなんとか径が合うものを見つけてきました。

また、ネジを探していたところ、「DEAD」と書かれた付箋が貼り付けられたSATA SSD 256GBを発見。たぶん、現在のPCでもともとCドライブとして動いていたが、故障した(と思った)ので外したやつ。でも試しに繋いでみたら普通に動いたので、光学ドライブを外してこれを付けることにした。
あと一本SATAケーブルがあれば光学ドライブを外さずに済んだのだが…

無事に認識された図。

さらなる補足
HDDの中には、学生の頃の輪講資料やTOEFLiBT対策の本のリスニング問題のデータが入ってました。懐かしい。
当時のプロジェクトやコードはGithubにpushしてあるはずなので、他に重要なデータは無いはず。

【第二章】 創生編:Proxmoxで仮想世界を築く
物理的な準備は整った。次はいよいよ、サーバーの頭脳となるOSの選定とインストールである。 単純にUbuntu Serverを直接インストールする道もあったが、Homelabの可能性を最大限に引き出すため、より野心的な選択をすることにした。仮想化プラットフォーム「Proxmox VE」 の導入である。
OS選定の哲学:なぜProxmoxなのか?
Proxmox VEは、OS自体が仮想マシン(VM)やコンテナ(LXC)を管理するためのハイパーバイザーとして機能する。これを導入することは、単に一台のサーバーを建てるのではなく、その中に複数の独立したサーバーを自由に構築・破棄できる、自分だけのクラウド環境を手に入れる ことを意味する。
このアプローチには、計り知れないメリットがある。
- 柔軟性: サービスごとにVMを分離し、環境の依存関係を完全に断ち切れる。
- 安全性: 実験的なアプリを隔離されたVMで試し、ホスト環境を汚すことがない。
- 管理性: VM全体のスナップショットやバックアップが容易で、「壊してもすぐに戻せる」という安心感が、大胆な挑戦を可能にする。
方針は決まった。Proxmox VEを物理マシンにインストールし、その上にメインの作業場となるUbuntu ServerのVMを構築する。
Proxmox VEのインストール
Proxmox VE公式サイトから最新版のISOイメージをダウンロードし、balenaEtcherを使ってUSBインストールメディアを作成。作成したUSBメモリからPCを起動し、グラフィカルインストーラーを開始した。

インストールプロセスは驚くほどスムーズだった。
- インストール先ディスク: 新しく購入した512GBのNVMe SSDを正しく選択。
- ネットワーク設定: 自宅のネットワーク環境に合わせて、固定IPアドレス(
192.168.3.200/24)、ゲートウェイ(192.168.3.1)、DNSサーバー(1.1.1.1)を設定。 - ホスト名:
pve1.localと設定。

数分のファイルコピーを経て、Proxmox VEのインストールは完了。再起動後、黒い画面にpve1 login:のプロンプトが表示された。サーバーの基盤が、ついに産声を上げた瞬間である。
工房の建設:Ubuntu Server VMの構築
別のPCのブラウザから、ProxmoxのWeb管理画面 (https://192.168.3.200:8006) にアクセス。ここから、メインのDockerホストとなるUbuntu ServerのVMを作成していく。
- ISOイメージ: Ubuntu公式サイトから、最新の長期サポート版であるUbuntu Server 24.04 LTSのISOをダウンロード。Proxmoxの機能で、URLを指定して直接NVMe SSD上に保存させた。
- VMリソース割り当て:
- CPU: 2コア
- メモリ: 4096MB (4GB)
- ディスク: 64GB
- 物理マシンのリソースの約半分を、この最初のVMに割り当てることにした。
VMを作成し、コンソール画面からUbuntu Serverのインストールを開始。ここでも一つ、重要な選択を行った。インストールタイプとして、標準のUbuntu Serverではなく、Ubuntu Server (minimized) を選択。これは、サーバー管理の原則である「攻撃対象領域の最小化」と、「必要なものだけを自分の手で追加していく」という哲学に基づいた判断だ。
ネットワーク設定、ユーザー作成、そしてOpenSSHサーバーのインストール にチェックを入れることを忘れずに進め、Ubuntuのインストールも無事完了。これで、Proxmoxというビルの中に、ubuntu-dockerという名の工房が完成した。
最終仕上げ
VMのオプションで 「Start at boot(起動時自動起動)」を有効化 。これにより、サーバー本体が再起動しても、VMが自動で立ち上がる、真のサーバーとしての自律性を確保した。
SSHクライアントからubuntu-docker VMにログインし、apt update && apt upgradeでシステムを最新の状態に更新。最後に、Docker公式サイトの便利スクリプトを使って、Docker EngineとDocker Composeをインストール した。
docker run hello-worldが成功したのを確認し、これですべての土台が整った。物理マシンに仮想化基盤、そしてその上で動くコンテナ実行環境。多層構造の、堅牢で柔軟なHomelab基盤が、今ここに完成した。

【第三章】 激闘編:伝説のトラブルシューティング
以下の記事を参照。こちらはGemini先生ではなく自分で書いたものです。
CMOS電池切れが原因で起動しなくなるというトラブルが発生し、5時間格闘しました。
【第四章】 応用編:世界を繋ぐネットワーク構築
Proxmoxというビル、Ubuntuという工房、そしてDockerという万能工作機械。全ての基盤が整った今、いよいよアプリケーションを動かし、このHomelabに魂を吹き込んでいく。
相棒の命名:lumine
この新しい創造の拠点に、ふさわしい名前を授けることにした。これからの冒険の相棒として、ホスト名を lumine と命名。原神の旅人から拝借したこの名前は、異世界(Self-hosted)を旅し、失われた技術(知識)を探求していく、このプロジェクトの姿そのものである。サーバー自身とTailscale上のデバイス名をlumineに統一し、ssh lumineでアクセスできる環境を整えた。
補足
ホスト名の命名については、調べた感じ、「命名は面白いものにするんじゃなくて機能を表したものにしろ」という真っ当な意見も多かった。が、趣味でやってるんだしせっかくなら楽しく使いたい。研究室のサーバーが昔の研究者の名前にちなんだ名前をとっていたのにあやかり、こちらも抽象的な名前をつけることにした。
起動しないトラブルが解決したことをGemini先生に報告したところ、「不死鳥のように蘇った」と評していた。そこで、最近プレイした原神ナタ編のストーリーにあやかり、ホスト名はlumineとした。Dockerコンテナを入れたら色々できるというのも、複数の元素を扱える蛍さんにぴったり…かもしれない。
今後増設するときにも、原神のキャラ名で統一していけばとても楽しそう。lumine自体はポートを一切解放していないが、paimonVMがリバースプロキシでアクセス可能にしてくれるとか、nahidaが全てのサーバーの監視を担っているとか。
事前に役割分担が明確に定義されているような状況であれば変な名前をつけるメリットは全くないものの、PoC段階の場合はイメージが膨らむ名前を付けたほうが、付いてる名前と機能の不一致を回避できるし、名前ベースで想像を膨らませて色々と実験できるので良いんじゃないかなと思います。これについては趣味のみならず、仕事でも同様に。
Netdataによる自己監視
まず最初に着手したのは、サーバー自身の状態を把握するためのモニタリングツールの導入だ。選んだのは、リアルタイム性と美しいダッシュボードに定評のあるNetdata 。Docker Composeを使い、数行のdocker-compose.ymlを記述するだけで、驚くほど簡単にデプロイが完了した。
version: '3'services: netdata: image: netdata/netdata container_name: netdata hostname: lumine # ホスト名を指定 ports: - 19999:19999 # (以下、権限設定などが続く)しかし、この時点ではNetdataのダッシュボードはサーバー内部からしか見ることができない。このHomelabを真に「どこからでも使える」環境にするためには、安全なリモートアクセス経路の確保が不可欠だった。
Tailscaleによるプライベートなトンネル
そこで登場するのが、Tailscaleである。これは、複雑な設定を一切必要とせず、手元のデバイス群を暗号化された単一のプライベートネットワーク(オーバーレイネットワーク)に接続してくれる魔法のようなVPNサービスだ。
古き良きHamachiみたいなものかな?
lumine自身(Ubuntu VM)と、普段使いのMacBookの両方にTailscaleをインストール。公式のインストールスクリプトを実行し、Webで認証するだけで、物理的な場所を超えた仮想的なLANが構築された。lumineには100.x.x.xから始まる特別なIPアドレスが付与され、MacBookのブラウザからhttp://100.x.x.x:19999と入力するだけで、安全にNetdataのダッシュボードにアクセスできるようになった。
これで、どこにいてもlumineの状態をリアルタイムで監視できる、管理者としての基本的な環境が整った。
【終章】 これから始まる、本当の冒険
紆余曲折の末、ついに理想のHomelabがその姿を現した。
- 物理層: サルベージされたPCに、NVMe SSDという新たな心臓が移植された。
- 仮想化層: Proxmox VEが、無限の可能性を秘めた仮想化基盤を提供している。
- OS層: 軽量かつセキュアなUbuntu Serverが、Dockerホストとして安定稼働している。
- ネットワーク層: Tailscaleが、安全で利便性の高いリモートアクセスを実現している。
VPSで動かしていた公開用のサービス群と、自宅のlumineで稼働するプライベートなサービス群。この2つが連携するハイブリッド構成の土台は、今まさに完成した。
しかし、これは終わりではない。むしろ、ここからが本当の始まりだ。
lumineの真の力(QSV)を解放するJellyfinの導入。大容量ストレージを活かすNextcloudの構築。そして、まだ見ぬ新たなSelf-hostedアプリとの出会いが、私を待っている。
Homelabは、単なるサーバー構築ではない。それは、終わりのない冒険であり、最高の知的趣味である。この記事が、誰かの押し入れで眠っているPCに、再び魂を吹き込むきっかけになることを願ってやまない。

この記事の全てのイラストはnano-banana製。とくにこの画像は怪しい雰囲気が漂っててお気に入りです。ブイラトスッケケって何だ。