DBeaverでDiscourse DBにアクセスする方法

組み込みのデータエクスプローラーはクイックなクエリには便利ですが、DBeaver や TablePlus といった本格的な GUI を使いたい場合は、Discourse の Postgres が Docker ブリッジ内にロックされているため、いくつかのハードルを越える必要があります。

ここでは、データベースをインターネットに公開せずに、プライベートネットワーク(Tailscale など)経由で安全に公開する方法を紹介します。

1. カスタムポートのマッピング

Discourse は通常、標準ポートを占有してしまうため、ここでは 5434 を使用します。containers/app.yml を編集してください。

YAML

expose:
  - "80:80"
  - "443:443"
  - "5434:5432" # ホスト 5434 -> コンテナ 5432

その後、再構築を実行します:./launcher rebuild app

2. ファイアウォール

このポートを公衆に開放しないでください。 Tailscale やその他のトンネルを使用している場合は、そのインターフェースへのアクセスのみを制限してください。

Bash

sudo ufw allow in on tailscale0 to any port 5434 proto tcp

3. 認証の修正(厄介な部分)

Discourse はデフォルトで peer 認証を使用しており、外部からのパスワードログインをブロックします。そのため、Postgres に scram-sha-256 を許可するよう設定する必要があります。

コンテナ内で実行(./launcher enter app):

Bash

echo "host all all 0.0.0.0/0 scram-sha-256" >> /shared/postgres_data/pg_hba.conf

sudo -u postgres psql -c "SELECT pg_reload_conf();"

4. パスワードの設定

デフォルトでは discourse ユーザーにパスワードが設定されていません。DBeaver などのアプリが実際にログインできるようにパスワードを設定してください。

Bash

sudo -u postgres psql -c "ALTER USER discourse WITH PASSWORD 'your_password_here';"

5. 接続情報

  • ホスト: あなたの IP アドレス

  • ポート: 5434

  • データベース: discourse

  • ユーザー: discourse