NocoDBをセルフホストする:DockerボリュームをプライベートなAirtableクローンに変える

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

HomeLabにおけるデータの壁

どんなHomeLabも、いずれはドキュメント作成の壁にぶつかります。最初はIPアドレス用のテキストファイルや、MAC IDを記録する簡単なGoogleスプレッドシートから始まります。しかし、ラボが20以上のDockerコンテナ、複数のVLAN、そして予備パーツの山へとスケールするにつれ、それらの静的なファイルでは管理しきれなくなります。私は、Adminerで生のSQLクエリを書くか、サーバーラックを追跡するためだけにAirtable의サブスクリプション料金を払うかの選択に数ヶ月を費やしました。しかし、どちらもしっくりきませんでした。

DBeaverのような標準的なデータベースツールは管理者向けに作られており、素早いデータ入力には向いていません。一方で、AirtableのようなSaaSプラットフォームは洗練された体験を提供しますが、ネットワークトポロジをクラウドに預けなければなりません. NocoDBはこのギャップを埋めてくれます。あらゆるリレーショナルデータベースを、スマートで協調的なスプレッドシートへと変貌させます。PostgreSQLの構造的な整合性と、ノーコードプラットフォームのドラッグ&ドロップの手軽さを同時に手に入れることができるのです。

なぜNocoDBは標準的なスプレッドシートより優れているのか

インベントリを移行する前に、リソースを割く価値があるかどうかを知る必要があります。NocoDBは非常に効率的で、アイドル時のRAM使用量は300MB未満であることが多いため、Raspberry Pi 4やリユース品の小型PCにも最適です。

メリット

  • 完全なデータの主権: シリアル番号やネットワークマップはローカルディスクに保存されます。サードパーティのクラウドプロバイダーにインフラをスキャンされる心配はありません。
  • 設定不要のAPI生成: テーブルを作成するたびに、REST APIとSwagger UIが即座に生成されます。これにより、他のダッシュボードやスクリプトからプログラムでデータを取得できるようになります。
  • リッチメディアのサポート: 標準的なSQLテーブルはファイルの扱いが苦手ですが、NocoDBはネイティブに対応しています。Dell PowerEdgeのPDFマニュアルや、ケーブル配線の写真をレコードに直接添付できます。
  • 既存データベースのUI化: ゼロから始める必要はありません。既存のMariaDBやPostgreSQLインスタンスをNocoDBに向ければ、そのデータの使いやすいインターフェースが即座に生成されます。

デメリット(トレードオフ)

  • リソース使用量: 単純なCSVやSQLiteファイルよりは重くなります。第1世代のRaspberry Piで実行する場合、Javaベースのバックエンドは動作が重く感じるかもしれません。
  • 初期設定: Dockerスタックの構築に約10分かかります。ブラウザで新しいタブを開くよりは手間がかかります。

アーキテクチャ:なぜPostgreSQLが重要なのか

NocoDBは内部メタデータにSQLiteを使用できますが、長期的な利用にはお勧めしません。専用のPostgreSQLバックエンドを使用することで、停電や強制再起動時でもデータの破損を防ぐことができます。私はこのDocker Compose構成を使用して10,000レコード以上のインスタンスを管理していますが、パフォーマンスは依然として軽快です。

Docker Composeを使用することで、ラボのドキュメント全体をポータブルにできます。サーバーハードウェアをアップグレードする場合も、データボリュームを移動してコンテナを再起動するだけで済みます。インベントリ全体を簡単に移行できるのです。

デプロイガイド:NocoDBの起動

このガイドでは、DockerとComposeプラグインが準備されていることを前提としています。GUIを好む場合は、PortainerのStacksでもこれらの設定はそのまま機能します。

1. 環境の整理

まず、データベースとアプリケーションファイルを保存する永続的なディレクトリを作成します。

mkdir -p ~/homelab/nocodb
cd ~/homelab/nocodb

2. スタックの設定

docker-compose.yml ファイルを作成します。セキュリティ向上のため、プライベートなブリッジネットワークを使用してデータベースをLANの他の部分から隔離します。

services:
  nocodb-db:
    image: postgres:14-alpine
    container_name: nocodb-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: nocodb_meta
      POSTGRES_USER: nocouser
      POSTGRES_PASSWORD: 強力なパスワードをここに設定
    volumes:
      - ./db_data:/var/lib/postgresql/data
    networks:
      - nocodb-net

  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb-app
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      NC_DB: "pg://nocodb-db:5432?u=nocouser&p=強力なパスワードをここに設定&d=nocodb_meta"
    depends_on:
      - nocodb-db
    volumes:
      - ./nc_data:/usr/app/data
    networks:
      - nocodb-net

networks:
  nocodb-net:
    driver: bridge

3. 起動

コンテナをデタッチドモードで起動します。これにより、作業を続けながらバックグラウンドでサービスを実行できます。

docker compose up -d

PostgreSQLがスキーマを初期化するまで約20秒待ちます。エラーが疑われる場合は、docker logs -f nocodb-app でログを確認し、起動シーケンスをチェックしてください。

4. 最初のテーブルを作成する

ブラウザで http://[あなたのサーバーのIP]:8080 にアクセスします。管理者資格情報を作成したら、「Lab Manager」というタイトルの新しいプロジェクトを開始します。

まず、以下の3つのテーブルを作成することをお勧めします。

  • ハードウェア・インベントリ: ブランド、モデル、シリアル番号の列と、「Active(稼働中)」「Spare(予備)」「Dead(故障)」のドロップダウン形式のステータス列を作成します。
  • IP管理: 固定IP、VLAN ID、ゲートウェイの割り当てを追跡します。
  • サービスディレクトリ: サービスを実行中のハードウェアに紐付けます。これにより、「サーバーA」を停止すると、実は5つの異なるウェブサイトがダウンすることに気づけるようになります。

パワーユーザー向けのヒント:面倒な作業の自動化

手動でのデータ入力は正確性の敵です。NocoDBはAPIを提供しているため、インベントリの更新を自動化できます。例えば、nmap -sn 192.168.1.0/24 を使用したわずか5行のBashスクリプトでネットワークをスキャンし、POST リクエストを使用してNocoDBテーブルの「Last Seen(最終確認)」列を更新できます。

私の個人環境では、Pythonスクリプトを使用してDockerイメージの更新を確認しています。Docker Hubに新しいバージョンのイメージが存在する場合、スクリプトがNocoDBのステータスセルを「Update Available(アップデートあり)」に変更し、行を黄色にします。これにより、ターミナルを触ることなく、視覚的なメンテナンスダッシュボードを確認できます。

メンテナンスとバックアップ

ラボの全履歴がこのデータベースに保存されるため、バックアップは必須です。コンテナの実行中にフォルダをコピーするだけでは不十分です。pg_dump を使用して、一貫性のあるデータベースエクスポートを作成してください。私は、データベースをダンプしてオフサイトのS3バケットまたはローカルのNASに転送するcronジョブを毎日実行しています。NocoDBのアップデートも同様に簡単です。最新のイメージをプルして再起動するだけです。システムがデータベースのマイグレーションを自動的に処理します。

NocoDBは、面倒なドキュメント作成を効率的なワークフローに変えてくれます。データベースの構造とスプレッドシートの柔軟性を兼ね備えた、本格的なHomeLab愛好家にとって欠かせないツールとなるでしょう。

Share: