HomeLabアーキテクチャの可視化:ExcalidrawをDockerで半年間セルフホストした記録

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

混沌をドキュメント化する:なぜExcalidrawに切り替えたのか

多くのHomeLabは、Pi-holeや基本的なPlexサーバーを実行する1台のRaspberry Piから始まります。管理は簡単です。しかし、Proxmoxクラスター、隔離されたIoT VLAN、そして30以上のDockerコンテナが加わると、事態は一変します。突然、頭の中のネットワークマップが崩壊するのです。運用1年目は、記憶力とノートへの必死の書き込みに頼っていました。午前2時に内部DNSがダウンしたとき、私はサービスを修正していたのではなく、デスクの下を這いつくばってLANケーブルを辿り、正しいゲートウェイを探していました。

LucidchartやDraw.ioのような有力なツールも試しました。これらは強力ですが、素早いブレインストーミングには少し硬すぎると感じたり、データがログインの壁の向こう側にロックされたりすることがよくありました。半年前、私はすべてをDocker上のセルフホスト版Excalidrawインスタンスに移行しました。ホワイトボードのような感覚でありながら、デジタル設計者のデスクのように機能するツールを求めていたのです。結果は非常に安定しており、ドキュメントはプライベートでオフライン対応、そして正直なところ、描くのが本当に楽しくなりました。

セルフホスト型ホワイトボードのアーキテクチャ

Excalidrawは、特徴的な「手書き風」のルック&フィールを持つバーチャルホワイトボードです。これは単なるギミックではありません。図がスケッチのように見えることで、自由に修正を繰り返すことができます。ピクセル単位の完璧な配置に固執するのをやめ、実際のロジックに集中できるようになります。ローカルでホストすることで、機密性の高いネットワークトポロジーがサードパーティのクラウドに触れることもありません。

標準のDockerイメージはフロントエンドを提供します。複数人での共同作業が必要な場合は、「room」バックエンドをデプロイすることもできます。しかし、私たちの多くにとって、スタンドアロンのフロントエンドだけで十分です。高速で軽量、そして個人の設計者には最適です。

インストール:Docker ComposeによるExcalidrawのデプロイ

Docker Composeは、設定をバージョン管理するための私のお気に入りの方法です。以下は、私がUbuntuサーバーで実行しているスタックそのものです。シンプルで効率的、そして最新の安定版ビルドを自動的に取得します。

version: '3.8'
services:
  excalidraw:
    image: excalidraw/excalidraw:latest
    container_name: excalidraw
    ports:
      - "3001:80"
    restart: always
    environment:
      - NODE_ENV=production
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3

docker-compose up -d を実行するだけで、UIが http://[SERVER-IP]:3001 で起動します。このイメージは驚くほど軽量です。重いデータベースに依存しないため、ディスク容量もほとんど消費しません。一つ注意点があります。デフォルトでは、Excalidrawは作業内容をブラウザのローカルストレージに保存します。これによりアプリの動作は軽快になりますが、ファイルにエクスポートするまで図面が真に「保存」されないことを意味します。

設定の微調整:リバースプロキシとカスタムライブラリ

IPアドレスとポート番号を入力するのは面倒です。ワークフローの一部として定着させるため、Nginx Proxy Manager(NPM)と統合しました。draw.home.lan をコンテナにマッピングし、内部CAから発行されたSSL証明書を追加しました。これで接続は暗号化され、URLも覚えやすくなりました。

HomeLabアイコンのインポート

プロフェッショナルなネットワークマップを作成するには、標準の円や四角だけでは不十分です。サーバー、ルーター、Wi-Fiのアイコンが必要です。解決策は libraries.excalidraw.com にあります。私はサイドバーを以下の主要なセットでカスタマイズしています:

  • Cisco Network Icons: 管理機能付きスイッチやハードウェアファイアウォールのマッピングに不可欠です。
  • Cloud Infrastructure: ローカルサービスがAWSやCloudflare Tunnelとどのように通信するかを可視化するのに最適です。
  • Software Architecture: TraefikやAutheliaのようなDockerコンテナがどのように相互作用するかを示すのにぴったりです。

これらをインポートすれば、ラックマウントサーバーやデータベースのアイコンを数秒でキャンバスにドラッグ&ドロップできるようになります。

検証とパフォーマンス

半年間の稼働を経て、このコンテナは私のスタックの中で最も手のかからない住民の一つとなりました。通常、アイドル時の RAM使用量はわずか42MBで、旧型のi5 NUCでのCPU使用率は1%未満です。まさに「設定したらあとは忘れるだけ」の状態です。

コンテナの状態を確認するには、以下のコマンドを使用します:

docker logs -f excalidraw

また、Uptime Kumaを使用して60秒ごとにURLをポーリングしています。180日間で、予期せぬ停止は一度もありませんでした。公式イメージの安定性には目を見張るものがあります。

私のバックアップ戦略

大切な作業内容をブラウザのキャッシュだけに任せてはいけません。私は毎月、マスターのHomeLabマップを .excalidraw ファイルとしてエクスポートし、プライベートなGiteaリポジトリにコミットしています。これにより、クッキーを削除したりノートPCが故障したりしても、アーキテクチャ図は安全に保たれます。また、SVGとしてエクスポートして、GitHubのREADMEやWiki.jsのページに直接図を埋め込むことも可能です。

最後に

Excalidrawのセルフホストは、私が行った管理上の決定の中で最高のものの一つでした。技術的なドキュメント作成と、クリエイティブな自由度の間のギャップを埋めてくれます。ツールが高速で結果もプロフェッショナルに見えるため、ネットワークマップの更新が苦にならなくなりました。使いにくいエンタープライズソフトウェアや、ペンと紙の限界に疲れているなら、このDockerベースのセットアップは、成長を続けるあらゆるHomeLabにとって強固な基盤となるでしょう。

Share: