Open10

ミニPCを初期化して雑に使える自宅サーバーにする

dattdatt

やること

  • 何かしら情報が入ってるミニPCを初期化する
  • Proxmox VEのイメージをインストールして仮想マシンやコンテナを管理できるようにする
  • セットアップしておくと便利なサーバーのセットアップ
    • HomeBridge
    • OpenVPN

環境

サーバー(ミニPC)

MINISFORUM NAB6
CPU : Intel Core i7-12650H
RAM : 32GB
Storage : 512GB
dattdatt

Proxmox Virtual Enviroment

https://www.proxmox.com/en/proxmox-virtual-environment/overview

オープンソースのサーバー管理プラットフォームで、KVMハイパーバイザとLinux Containers(LXC)の管理などが行える。また、WebのGUIを提供しておりウェブサイト上で仮想マシンやコンテナの作成・’削除・設定変更ができるため直感的に操作が行える。

↓ 初期化前のProxmoxVEのウェブコンソールの様子

dattdatt

仮想マシンとコンテナの違い

仮想マシンとコンテナでできることが似てそうだったので違いを調べてみることにした。

仮想マシン

仮想マシン (VM) とは、独立したシステムとして機能するコンピューティング環境です。プールされたハードウェアリソースを使用して作成され、固有の CPU、メモリー、ネットワーク・インタフェース、ストレージを持ちます。
ハイパーバイザーと呼ばれるソフトウェアが、必要なコンピューティング・リソースを分離し、VM の作成と管理を可能にします。
https://www.redhat.com/ja/topics/virtualization/what-is-a-virtual-machine

コンテナ技術

OS上に仮想的に複数のコンテナ(分離・独立した領域)の箱を設け、そのなかで、アプリケーションを実行・動作させる仕組みです。
https://jpn.nec.com/cloud/service/container/about.html

OSレベルで仮想化するか、もっと低レイヤなハードウェアレベルで仮想化をするかどうかの違いが一番大きそうで、構造の違いを図にしてみた。
仮想マシンのハイパーバイザはホストOS上に立てるもの(VirtualBoxとか)もあるみたいだけど、Proxmoxは直接ハードウェアにインストールするのでベアメタルハイパーバイザとして分類できるみたい。

仮想マシンではゲストOSがカーネルを持っているのに対し、コンテナ技術ではコンテナ管理アプリケーションをホストしているOSのカーネルを流用しているのが構造としては最も違う点になりそう。

主な違いについてGPTにまとめてもらった表

項目 コンテナ 仮想マシン
仮想化レベル OSレベルの仮想化(ユーザー空間の分離) ハードウェアレベルの仮想化
カーネル ホストOSのカーネルを共有 ゲストOSごとに独自のカーネルを持つ
OSの独立性 同じカーネルファミリーのOSのみ利用可能(例: Linux) 異なるOSを実行可能(例: LinuxとWindowsを同時に)
起動時間 非常に高速(数秒以内で起動) 比較的遅い(数十秒から数分)
リソース消費 軽量(CPU、メモリ、ストレージの消費が少ない) 重量(各仮想マシンに独自のOSを持つためリソース消費が大きい)
セキュリティ隔離 名前空間とcgroupsによる隔離(カーネルを共有) ハードウェアレベルでの完全隔離
パフォーマンス ホストOSのカーネルを直接利用するためほぼネイティブ ゲストOSのカーネルを経由するため、若干のオーバーヘッドがある
ストレージ 軽量なレイヤードファイルシステム(例: OverlayFS) 仮想ディスクイメージ(例: VMDK、QCOW2)
用途 マイクロサービス、軽量なアプリケーション、CI/CD環境 マルチOS環境、レガシーアプリケーションの移行、強いセキュリティ隔離
管理 DockerやKubernetesなどのコンテナオーケストレーションツールで管理 ハイパーバイザー(例: VMware、Proxmox VE)で管理
可搬性 高い(ホストOSのカーネルが同じであれば動作可能) 比較的低い(仮想ディスクイメージごとに環境を構築する必要がある)
アップデート ベースイメージのアップデートで迅速に対応可能 ゲストOSのアップデートが必要(手間がかかる)
スケーラビリティ 高い(コンテナの複製やデプロイが迅速) 低い(仮想マシンのコピーやデプロイには時間がかかる)
ネットワーク 仮想ネットワークの構築が容易(コンテナ同士の通信が簡単) 仮想スイッチ、ネットワークアダプタの設定が必要

参考にさせていただいた記事など

dattdatt

ProxmoxVEのインストールメディアを作る

Proxmoxの公式サイトからISOイメージをダウンロードしてきて適当なUSBメモリに書き込みます

1. ISOイメージのダウンロード

2024/10/05 時点

  1. https://www.proxmox.com/en/downloads にいく
  2. Proxmox VE 8.2 ISO Installer の項目を探し、横のDownloadボタンからダウンロードする

2. Rufasのインストール

ISOイメージファイルを書き込むためにつかうRufusを入れる

  1. https://rufus.ie/ja/ にいく
  2. 適当なリリースをダウンロードする (今回はrufas-4.5.exeを使うことに)
  3. インストーラタイプだったらexeを実行してインストール (ポータブルタイプならそのまま実行できそう)

3. メディアの作成

  1. Rufasを起動する
  2. デバイスを選択する
  3. ウィンドウ右側の選択からISOファイルを選択
  4. ウィンドウ下側のスタートボタンから書き込む
dattdatt

Proxmox VEのセットアップを進める

作成したインストールメディアをミニPCに接続し起動する。
(環境によっては起動ディスクの優先度をBIOSで設定する必要がありそう)

📝 注意
(ここからの画面のスクショはミニPCの画面になります)

メディアから起動するとこんな感じの画面がでる

画面の案内に従ってセットアップを進めてく

Install Proxmox VE (Graphical) を選択

規約を読んで、右下の I agreeを押下

インストール先を選択する
選択されたディスクはこのあとフォーマットされてproxmox VEがインストールされる

地域とキーボードレイアウトを選択する

ネットワークインターフェースの選択とミニPCのホストネームを設定する
使用したミニPCのネットワークインターフェースはLANポート2つとWiFiがありますが、接続できる機器を勝手に選んでくれるみたいです

設定を確認してインストールする
(Automatically reboot after successful installation) のチェックを外しておく

インストールが終わるとウェブコンソールにアクセスするためのURLが出てくるのでメモしておく

Rebootを押すとコンソールに戻り再起動が行われる
途中で rebooting - please remove the ISO boot media と案内があるのでこのタイミングでインストールメディアを外しておく
(外さずに自動で再起動して、もう一度インストール画面が起動しまうことがありやり直しかと勘違いしてました)

メディアを取り外し、このようなログインのコンソールが出てきたらproxmox veのセットアップは完了

dattdatt

一つ前のステップでメモしたURLにアクセスする
https://<ミニPCのIPアドレス>:8006 (デフォルトのポート)

ユーザー名 root と最初に設定したパスワードでログインするとこんな感じの画面にアクセスできる

dattdatt

コンテナを作ってみる

Proxmoxでコンテナを作ってみようと思います

書くこと

  • コンテナテンプレートをダウンロードする
  • コンテナを作成する
  • コンテナのシェルを開く

コンテナテンプレートをダウンロードする

今回は Alpine Linux のコンテナを作ってみることにする
Proxmoxではテンプレートからコンテナを作成するみたいなので、テンプレートを用意していく

コンソール横の local (pve) を選択

画面上部のボタン群から テンプレート を選択し利用可能なテンプレート一覧を開く

とりあえず最新の alpine Linux (3.20) のテンプレートを探して、選択し左下のダウンロードボタンを押下してダウンロードする。

(↑ alpineのテンプレが増えた)

dattdatt

コンテナを作成する

Proxmox VEのコンソール左上、「CTを作成」を選択

必要な情報を入力していく

テンプレートを選んで次へ

試しに触るだけなので、rootfsの容量は8GBを割り当て

CPU, メモリ, ネットワーク, DNSと設定していく

作成すると、画像のように pve(ノード名) の配下にコンテナが作られる

dattdatt

コンテナにアクセスする

コンテナを起動する (作成したコンテナを右クリック → 開始)

コンテナを選択し、画面中央のメニューから「コンソール」を選ぶとコンテナのコンソールを開くことができる

初期設定ではユーザ名 root と最初に設定したpass でログインができる

dattdatt

HomeBridge のコンテナを立ててみる

https://github.com/homebridge/homebridge
HomeBridge: HomeKitをエミュレートする軽量なnode.jsサーバー
HomeKitでサポートされていないデバイスを、Siriなどから動かせるようにするためのサーバーソリューションだが、今回は、proxmoxのHomeBridgeプラグインを用いて proxmoxから各種コンテナや仮想マシンの稼働状況の確認や起動制御を行えるようにしてみる。

↓ のようにAppleのホームアプリやGoogle Homeなどからコンテナたちの状況を確認できるようになる

ベースとなるコンテナの作成

Ubuntuベースのテンプレートを使用します ubuntu 22.04
コンテナの作成は省略

コンテナのセットアップ

HomeBridgeをセットアップする

公式のセットアップWikiに従って進めていく

コマンドを打ち込んでいく前に、proxmoxのイメージには curlgpg が含まれていなかったのでインストールしておいた

Wikiの通りに進めていくと、HomeBridgeが起動する。

案内の通り、URLにアクセスすると以下のような画面が出る

アカウントを作成して

画面の指示に従ってセットアップを進めると以下のようなダッシュボードが表示される

HomeBridgeにProxmoxのプラグインを入れる

画面上部、Pluginsを選んで、Proxmoxのプラグインを探す

右側のオレンジのダウンロードボタンから最新のプラグインをダウンロードする

プラグインの設定画面に飛ぶので必要な項目を入れていく

  • ホストアドレスはポート番号不要
  • 先にProxmox側でアクセス制限をしたhomebridge用のアカウントを作った方がセキュアかも

設定項目を入力し保存すると、HomeBridgeが再起動される
その後、アクセサリタブを見てみると...

Proxmoxのコンテナが反映されてるー