الوصول إلى قاعدة بيانات Discourse باستخدام DBeaver

مستكشف البيانات المدمج جيد للاستعلامات السريعة، ولكن إذا كنت تريد استخدام واجهة رسومية حقيقية مثل DBeaver أو TablePlus، فستحتاج إلى تخطي بعض العقبات لأن PostgreSQL الخاص بـ Discourse محبوس داخل جسر 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 افتراضيًا، مما يمنع تسجيل الدخول بكلمة مرور من خارج. لذا تحتاج إلى إخبار PostgreSQL بالسماح بـ 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