スプレッドシートはもう不要:Snipe-ITとDockerで構築するプロ仕様のHomeLab資産管理

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

肥大化するHomeLabの混乱

私のHomeLabの旅は、たった一台のRaspberry Piから始まりました。しかし気づけば、デスクの下にはOptiplexが鎮座し、クローゼットには自作のRyzen 3900Xサーバーが置かれ、最終的には12Uのラックがエンタープライズ機器の音を響かせていました。長年、私の「在庫管理システム」といえば、「その他ケーブル類」と書かれた段ボール箱と、どのSSDがどのノードに入っているかという曖昧な記憶だけでした。それでなんとかなっていたのです――保証内容を確認する必要が出てくるまでは。あるいは、2022年にeBayで手に入れた32GBのECCメモリが、具体的にどのマシンに刺さっているかを思い出す必要に迫られるまでは。

私たちの多くはスプレッドシートから使い始めます。それが最も手軽な方法だからです。しかし、ノード間でGTX 1080を差し替えたり、15台もの異なるSATAドライブの残り書き込み耐性を追跡しようとしたりした瞬間、その管理手法は崩壊します。私は、仕事で構築しているようなプロフェッショナルな環境を反映したシステムが必要だと確信しました。つまり、専用の資産管理システム(AMS)が必要だったのです。

管理戦略の選択肢

ラボの整理は、通常3つのカテゴリーに分けられます。どれを選ぶべきかは、デバイスが3台なのか30台なのかによって決まります。

スプレッドシートの罠 (Excel/Googleスプレッドシート)

入門編の定番です。柔軟性は高いですが、完璧な手動の規律が求められます。スプレッドシートにドライブを移動させたのにセルの更新を忘れたら、そのインベントリは嘘の情報になってしまいます。また、スプレッドシートにはリレーショナルな深みがありません。特定のパーツをクリックして、過去5年間に3つの異なるホストサーバーを渡り歩いてきた履歴を簡単に確認することはできません。

物理ラベルによる管理

ダイモ(Dymo)のラベルライターはHomeLab愛好家の親友です。私もいまだに、あらゆるものに愛用しています。しかし、シャーシに貼られたステッカーは、内部のNVMeの健康状態やメーカーサポートの終了日までは教えてくれません。補完ツールとしては優れていますが、データベースの代わりにはなりません。

Snipe-ITという黄金律

Snipe-ITは、エンタープライズ級のオープンソース・パワーハウスです。ハードウェアを「資産(Assets)」として扱い、CPUやRAMなどの小さなパーツは、それらの資産の中に組み込まれる「コンポーネント」として扱います。減価償却、メンテナンスログ、ライセンスキー、さらにはトナーカートリッジに至るまで、あらゆるものを管理できます。Snipe-ITに移行した瞬間, 私のラボは趣味の域を脱し、インフラストラクチャとしての体裁を整え始めました。

トレードオフ:あなたに合っているか?

私はこの構成を18ヶ月以上運用しており、非常に安定しています。しかし、正直に言いましょう。すべてのユーザーにとって非の打ち所がないわけではありません。

メリット

  • きめ細かな追跡: メモリがどのDIMMスロットを占有しているか、特定のシリアル番号を含めて正確に紐付けられます。
  • メンテナンスログ: 最後にいつフィルターの埃を飛ばしたか、CPUのグリスを塗り直したかで悩むことはもうありません。Snipe-ITにすべて記録が残ります。
  • 保証期限のアラート: 400ドルのエンタープライズNVMeドライブの保証が切れる30日前に、メールで通知を受け取れます。
  • ライセンス保管庫: Windows Proのキー、Proxmoxのサブスクリプション、VMのライセンスを一元化し、安全に検索可能な状態で保管できます。

ハードル

  • セットアップの手間: 最初のサーバーを登録する前に、カテゴリー、メーカー、場所の設定に一晩費やすことになるでしょう。
  • 「ドライバー」の代償: 初めてラボの棚卸しをするときは、小さなシリアル番号を読み取るためだけに、ケースのネジを外す作業に3時間は費やすことを覚悟してください。
  • 小規模ラボには過剰: NUCが2台と8ポートのスイッチが1台しかないなら、Gitリポジトリ内のシンプルなMarkdown fileで十分かもしれません。

最適なデプロイ方法:Docker上のSnipe-IT

Snipe-ITをベアメタルにインストールするのは、休日を台無しにするレシピのようなものです。PHPの依存関係、Webサーバーの微調整、データベースのチューニングに苦しむことになるでしょう。Dockerを使えば、この悩みは5分で解決します。Snipe-IT本体、MariaDB、キャッシュ用のRedisを組み合わせた、Docker Composeによるマルチコンテナ構成をお勧めします。

分離性は、ここでの大きなセールスポイントです。ホストOSのシステムライブラリを更新しただけで資産管理システムが壊れるような事態は避けたいはずです。Dockerなら、バックアップはボリュームフォルダを圧縮するだけで済み、アップデートも数秒で完了します。

ステップバイステップ:Docker Composeによるデプロイ

DockerとComposeの準備ができていることを確認してください。安定した内部ノード、または専用の「管理用」VMでの実行を推奨します。

1. フォルダの準備

mkdir -p ~/docker/snipe-it/data
cd ~/docker/snipe-it

2. シークレットキーの生成

Snipe-ITは暗号化のために32文字の文字列を必要とします。以下のワンライナーで生成しましょう:

docker run --rm snipe/snipe-it php artisan key:generate --show

出力された結果(base64: で始まる部分)を保存してください。後ほど使用します。

3. Docker Composeファイル

このセットアップでは、公式のSnipe-ITイメージを使用します。HomeLab環境に必要最低限な設定に絞り込んでいます。

version: '3.8'

services:
  snipe-db:
    image: mariadb:10.6
    container_name: snipe-db
    env_file:
      - .env
    volumes:
      - ./data/db:/var/lib/mysql
    restart: always

  snipe-it:
    image: snipe/snipe-it:latest
    container_name: snipe-it
    depends_on:
      - snipe-db
    env_file:
      - .env
    ports:
      - "8080:80"
    volumes:
      - ./data/uploads:/var/www/html/storage/app/public/uploads
    restart: always

  snipe-redis:
    image: redis:alpine
    container_name: snipe-redis
    restart: always

4. .env 設定

同じフォルダに .env ファイルを作成します。プレースホルダーを各自の安全なパスワードに書き換えてください。

# アプリ設定
APP_URL=http://192.168.1.50:8080
APP_KEY=base64:ここにキーを貼り付け
APP_TIMEZONE=Asia/Tokyo
APP_LOCALE=ja

# データベース・パスワード
MYSQL_DATABASE=snipeit
MYSQL_USER=snipeit_user
MYSQL_PASSWORD=強力なパスワード
MYSQL_ROOT_PASSWORD=ルートパスワード

# 接続ロジック
DB_CONNECTION=mysql
DB_HOST=snipe-db
DB_DATABASE=snipeit
DB_USERNAME=snipeit_user
DB_PASSWORD=強力なパスワード
DB_PORT=3306

5. スタックの起動

コマンド一つで開始します:

docker-compose up -d

データベースが初期化されるまで30秒ほど待ちます。その後、ブラウザで http://your-ip:8080 にアクセスしてください。「Pre-Flight(事前チェック)」画面が表示されます。すべてがグリーンであれば、カタログ登録の準備は完了です。

より良い追跡のためのプロのコツ

ソフトウェアをセットアップするのは、戦いの20%に過ぎません。本当の価値はデータ戦略から生まれます。記録を役立つものにするための私の方法を紹介します。

「場所」から始める

「家の中」では漠然としすぎています。「ラックA、RU 14」や「青い収納ビン 3」のように設定しましょう。特定のSFP+モジュールを探しているとき、それがどのビンにあるか正確にわかっていれば、何時間ものフラストレーションを回避できます。

資産 vs コンポーネント

Snipe-ITにおいて、資産(Asset)とはシリアル番号を持つデバイス(Dell R730など)を指します。コンポーネント(Component)とは、その資産に「チェックイン(組み込み)」されるもの(16GBのDDR4メモリなど)です。私はCPUやSSDをコンポーネントとして追跡しています。これにより、現在サーバーに何が刺さっているかに基づいて、システムが自動的にサーバーの総メモリ容量やストレージ容量を計算してくれます。

カスタムフィールド

HomeLabの機器には特有のデータポイントがよくあります。私は「購入元」(eBay/Amazon)や、中古のエンタープライズSSDの総書き込みバイト数(TBW)を追跡するための「SMARTステータス」などのカスタムフィールドを追加しました。これにより、ドライブの故障を事前に察知できるようになります。

黄金律:今すぐ更新すること

最大の障害は技術的なことではなく、習慣です。新しいドライブが届いたり、ノードが故障したりしたときは、すぐにSnipe-ITを更新しなければなりません。私はこのためだけに、50ドルの古いFireタブレットをマジックテープでラックに貼り付けています。インベントリ管理をDockerに移行してから、トラブルシューティングは格段に速くなりました。中身を推測する必要がなくなったからです。本気でラボに取り組んでいるなら、スプレッドシートはやめて、エンジニアらしく機材を管理し始めましょう。

Share: