組み込みのデータエクスプローラーはクイックなクエリには便利ですが、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