軽量マルチDBクライアントDBXをTraefik配下の/dbxサブパスでDocker公開した

Running DBX, a Lightweight Multi-Database Client, Behind Traefik at a /dbx Subpath

* 本ページはプロモーションが含まれています

PostgreSQLのSQLをほとんど書かずにGUIで一括編集できる DBeaver は重宝していた。ただJavaベースで起動がそれなりに重く、複数のDBをまとめて眺めるにはもう少し身軽なツールが欲しくなっていた。
そんな折に見つけたのが DBX だ。無料で、多くのデータベースに対応し、動作も軽快らしい。試しにTraefik配下のDocker環境に組み込んでみることにした。

気になる点が一つある。DBXの開発元は中国だということだ。今後の開発体制やデータの取り扱いがどうなっていくかは注視しておきたいが、まずは手元の環境で動かしてみて様子を見ることにした。


DBXとは

DBX はRust + Vue 3製の軽量なマルチデータベースクライアントだ。公式の謳い文句は「80+ databases in 20 MB」。

  • 対応DB: MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、SQL Serverなど80種類以上
  • 軽量: 単一バイナリで約20MB、外部ランタイム依存なし
  • クエリエディタ: CodeMirror 6ベース、シンタックスハイライト・メタデータ補完に対応
  • AI SQLアシスタント: Claude/OpenAI連携で自然言語からSQLを生成できる
  • データグリッド: 仮想スクロール対応、インライン編集・フィルタ・エクスポートが可能
  • スキーマツール: ブラウザ、ER図、構造エディタ、比較ユーティリティを備える
  • 専用ブラウザ: Redisのキー管理、MongoDBのドキュメントCRUDに対応
  • 配布形態: Desktop(Homebrew/Scoop/WinGet/Flatpak)、Docker、CLI、MCP Serverの4系統

まずは素のdocker-compose環境で試す

いきなりTraefikに組み込む前に、Traefikを使わない最小構成でまず動かしてみることにした。

services:
  dbx:
    image: t8y2/dbx:latest
    container_name: dbx
    restart: unless-stopped
    ports:
      - "4224:4224"
    volumes:
      - dbx_data:/app/data

volumes:
  dbx_data:

docker compose up -d で起動すれば、http://<host>:4224 にそのままアクセスできる。
ただし自宅環境ではすでにTraefikで各サービスを80番/443番からまとめて振り分けており、DBXだけポートを直接公開すると構成の一貫性が崩れる。そこでここからはTraefik配下の /dbx サブパスに乗せる方式に切り替えることにした。


Traefik配下でのDocker環境構築

自宅環境では traefik_network という外部ネットワーク上でTraefikがリバースプロキシとして稼働している。DBXはこのネットワークに参加させ、/dbx というサブパスで公開することにした。

DBXの公式イメージには、リバースプロキシのサブパス配信用の環境変数があらかじめ用意されている。

環境変数 DBX_PUBLIC_BASE_PATH=/dbx を設定すると、/dbx のようなコンテキストパス配下での公開に対応する。 pgadmin これをTraefikの PathPrefix ルールと組み合わせるだけでよい。

services:
  dbx:
    image: t8y2/dbx:latest
    container_name: dbx
    pull_policy: always
    restart: unless-stopped
    environment:
      DBX_PUBLIC_BASE_PATH: "/dbx"
    volumes:
      - dbx_data:/app/data
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_network"
      - "traefik.http.services.dbx.loadbalancer.server.port=4224"
      - "traefik.http.routers.dbx.rule=PathPrefix(`/dbx`)"
      - "traefik.http.routers.dbx.entrypoints=web"
      - "traefik.http.routers.dbx.priority=10"
    networks:
      - traefik_network

volumes:
  dbx_data:

networks:
  traefik_network:
    external: true

構成のポイント

  • ポート: DBXはコンテナ内部で 4224 で待ち受ける。Traefikラベルの loadbalancer.server.port をこれに合わせた
  • 永続化: dbx_data という名前付きボリュームを /app/data にマウントした
  • ネットワーク: traefik_network のみに接続している。pgadmin4のように内部DB用ネットワークを別途持つ構成とは異なり、DBXは接続先DBをアプリ内で個別に設定する方式なので、ネットワークはこれだけで足りる
  • ルーティング: PathPrefix(/dbx) ルールで振り分け、priority=10 を明示して他ルールとの優先順位を示した

起動

cd /home/user/docker/compose/dbx
docker compose up -d

起動後、http://<host>/dbx でアクセスできるようになった。


まとめ

項目内容
選定理由DBeaverより軽快で無料、多くのDBに対応しているため
気になる点開発元が中国であること。今後の動向は注視する
公開方式DBX_PUBLIC_BASE_PATH=/dbx とTraefikの PathPrefix を組み合わせ、/dbx サブパス配下に公開
永続化dbx_data 名前付きボリュームを /app/data にマウント

DBeaverではデータ編集時にコピー&ペーストができたが、DBXではそれができなかった。
一方で、DBXは一括編集機能によって複数のデータをまとめて変更できるようになった。
DBeaverの代わりが務まるかはまだ分からないが、まずは軽さと対応DB数の広さを試す環境が整った。

開発元の動向は継続して見ていきたい。

関連項目