
颯太です。
VALORANTに人生を賭けて購入したゲーミングPCが半年間放置されていたので、Ubuntu Server 26.04 LTSでホームサーバーにしました。経緯はnoteに書いたので、この記事では構築手順と詰まったポイントを書きます。
もし文鎮化しているゲーミングPCなどあれば参考にしてください。
構築したもの:
- Ubuntu Server 26.04 LTS
- SSH鍵認証
- Docker + NVIDIA Container Toolkit(GPU対応)
- Portainer
- Tailscale
- BIOSファンカーブ + GPU電力制限による静音化
環境
| 項目 | 内容 |
|---|---|
| CPU | Intel Core i7-13700 |
| GPU | NVIDIA RTX 4070 Ti(VRAM 12GB、Ada Lovelace世代) |
| メモリ | 32GB DDR5-4800 |
| ストレージ | NVMe SSD 1TB |
| マザボ | MSI Z790系(M.2×2、SATAポート×4) |
| NIC | Realtek RTL8125BG(2.5Gbps) |
| OS | Ubuntu Server 26.04 LTS |
Ubuntu Server インストール
詰まり①: インストーラのDHCPv4欄が空のまま
ネットワーク設定の画面でIPアドレスが表示されない場合があります。Ctrl+Alt+F2 でシェルに切り替えて確認してください。
IPが取れていればそのままインストールを続行できます。インストーラに戻るには Ctrl+Alt+F1。
ネットで調べると dhclient を案内している記事が多いですが、Ubuntu 26.04のインストーラ環境(busybox)では使用できません。dhclient: not found になります。
インストーラの選択項目
Featured Server Snapsは何も選択しないのが重要です。DockerのSnap版は公式版と挙動が異なる場合があるので、後でaptから公式版を入れます。
| 項目 | 選択内容 |
|---|---|
| Featured Server Snaps | 何も選択しない |
| SSH Setup | Install OpenSSH serverをチェック |
| Ubuntu Pro | スキップ可(後からコマンドで有効化できる) |
SSH鍵認証化
鍵認証で接続できることを確認してから、パスワード認証を無効化します。
必ず別ターミナルで鍵認証の接続テストをしてから元のセッションを切ること。 締め出された場合はモニター・キーボード直結でのローカルログインでしか復旧できません。
パスフレーズを毎回入力しないようにする(Mac)
~/.ssh/config に以下を追記します。
初回のみパスフレーズを入力するとmacOSキーチェーンに保存され、以降は ssh homeserver だけで接続できます。
VSCode Remote SSH
ファイル編集にはVSCode拡張「Remote - SSH」が便利です。~/.ssh/config をそのまま読み込むので追加設定は不要です。
macOSの場合はローカルネットワークアクセスの許可が必要です(システム設定 → プライバシーとセキュリティ → ローカルネットワーク)。これを知らずに詰まりました。
Docker + Portainer
Dockerインストール
Ubuntu標準リポジトリ版は古いため公式スクリプトを使います。
ディレクトリ構成
Git管理を前提に全サービスを1リポジトリにまとめる構成が管理しやすいです。
子ディレクトリで git init はしないでください。親リポジトリから追跡されなくなります。
Portainer
詰まり②: PortainerにHTTPでアクセスした
アクセスは https://<IP>:9443 です。http:// で叩くと以下のエラーになります。
自己署名証明書の警告はLAN内利用のため無視で問題ありません。
NVIDIAドライバ + NVIDIA Container Toolkit
ドライバの種類
ubuntu-drivers devices で3種類が表示されます。
| 種別 | 説明 |
|---|---|
| 無印(proprietary) | クローズドソース版 |
| -open | オープンソース版、Turing以降でNVIDIA公式推奨 |
| -server | データセンター向け、コンシューマGPUには非推奨 |
RTX 4070 Ti(Ada Lovelace世代)では -open を選択します。
詰まり③: Secure BootとMOK登録の10秒
Secure Bootを有効のままにしていると、ドライバインストール後の再起動時に青いMOK管理画面が出ます。この画面は10秒しか表示されません。 時間内に操作しないとドライバが動かず、再設定が必要になります。
Enroll MOKを選択ContinueYes- インストール中に設定したパスワードを入力
- 再起動
見逃した場合は sudo dpkg-reconfigure nvidia-driver-595-open で再設定できます。
NVIDIA Container Toolkit
nvidia-ctk runtime configure 実行時に "It is recommended that docker daemon be restarted." と出ますが正常です。
動作確認
2台目以降のGPU情報が N/A になっているのはGPUが1枚のみのため正常です。
Tailscale
実行するディレクトリはどこでも問題ありません。
必須: Expire keyの無効化
Tailscale Admin Console で全デバイスの「Disable key expiry」を設定してください。デフォルト180日で再認証が必要になり、設定しないと突然外部アクセスが切れます。
MagicDNS
Settings → DNS → Enable MagicDNSを有効にするとデバイス名でアクセスできます。
外出先からの動作確認
- MacのWi-Fiをオフにしてモバイルホットスポット経由でSSH接続する
- スマホにTermius(無料)をインストールしてSSH接続する
- TailscaleアプリのMachines一覧でサーバーが「Connected」になっていることを確認する
静音チューニング
詰まり④: GPU電力制限してもファンが静かにならない
GPU電力制限(nvidia-smi -pl)はアイドル時のファン音には影響しません。電力制限はピーク時の上限値なので、何もしていないアイドル状態では上限に到達せず無意味です。
アイドル時のファン音はBIOSのファンカーブで制御します。
BIOSファンカーブ設定
i7-13700はアイドル時CPU温度が30℃未満でした。この温度に対してデフォルトのカーブが過剰なため、ファンが無駄に回っていた状態です。
| 温度 | Duty Cycle |
|---|---|
| 40℃以下 | 20% |
| 55℃ | 40% |
| 70℃ | 60% |
| 85℃ | 100% |
アイドル時2000〜2500RPM → 700〜800RPMになりました。
GPU電力制限の永続化
RTX 4070 TiのデフォルトTDP 285Wを200Wに制限します。AI処理以外では性能差はほぼなく、発熱と電気代が下がります。systemdサービスにすることで再起動後も設定が維持されます。
AI処理時に一時解除する場合:
動作確認チェックリスト
- 再起動後、自動でログインプロンプトまで到達する
- SSHパスワード認証では接続できない
- 鍵認証でSSH接続できる
-
docker run --rm hello-worldが成功する -
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smiが成功する - Portainerに
https://<IP>:9443でアクセスできる - Tailscale経由でSSH接続できる
- 外出先(モバイル回線)からTailscale経由で接続できる
- GPU電力制限200Wが再起動後も維持されている
- アイドル時騒音が許容レベルに収まっている