تثبيت Discourse للتطوير باستخدام Docker

قد يكون السبب الجذري هو أن pg15 قام بتعديل قواعد المصادقة الافتراضية.

مسار ملف التكوين: /etc/postgresql/15/main/pg_hba.conf

محتوى الملف كما يلي:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

الأمر الذي تم تنفيذه للنسخ الاحتياطي هو:

pg_dump --schema=public -T public.pg_* --file=‘/src/tmp/backups/default/2026-02-02-063003/dump.sql.gz’ --no-owner --no-privileges --verbose --compress=4 --username=postgres discourse_development

بسبب القاعدة local all postgres peer، أدى الأمر أعلاه إلى حدوث خطأ: Peer authentication failed for user "postgres"

فكرة الحل: تغيير peer إلى trust، للسماح لجميع الأوامر المحلية بالمرور. أي أن جميع الأوامر لن تحتاج إلى مصادقة بعد الآن (ولا تحتاج إلى إدخال كلمة مرور).

الخطوات المحددة:

  1. نسخ /etc/postgresql/15/main/pg_hba.conf من الحاوية إلى الجهاز المحلي

sudo docker cp discourse_dev:/etc/postgresql/15/main/pg_hba.conf ~/discourse/data/pg_hba.conf

منح الأذونات 644

sudo chmod 644 ~/discourse/data/pg_hba.conf

تعديل تكوين data/pg_hba.conf

# Database administrative login by Unix domain socket
local   all   postgres   trust
  1. تعديل ملف d/boot_dev لربط data/pg_hba.conf بالحاوية، لتجاوز ملف التكوين الافتراضي لـ pg.
docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # السطر التالي هو الإضافة الجديدة، لربط ملف التكوين بالحاوية، وإعطاء الحاوية إذن قراءة فقط
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot
  1. إيقاف وحذف الحاوية الحالية، ثم إنشاء حاوية جديدة
d/shotdown_dev
d/boot_dev
  1. بعد إعادة الإنشاء، قم بتشغيل تطبيقات الواجهة الأمامية والخلفية، واختبر ما إذا كان النسخ الاحتياطي يعمل بشكل طبيعي
d/rails s

# التنفيذ في سطر أوامر آخر
d/ember-cli

في صفحة النسخ الاحتياطي، انقر فوق “نسخ احتياطي”، انتظر بضع ثوانٍ، ثم تحقق من قائمة ملفات النسخ الاحتياطي.

إعجاب واحد (1)

بناءً على الخبرة المذكورة أعلاه، أصبح من الممكن الآن تحقيق الرغبة في الاتصال بقاعدة بيانات postgreSQL داخل Docker باستخدام عميل قاعدة بيانات محلي.

تعديل التكوين في ملف d/boot_dev كما يلي:

docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    # إضافة تعيين المنفذ
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # الاحتفاظ بتعيين ملف التكوين
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot

السماح بجميع الاتصالات بـ pg:

في ملف data/pg_hba.conf، قم بتعديل التكوين كما يلي:

# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::/0 trust

إعادة البناء

d/shutdown_dev
d/boot_dev

يمكن الآن الاتصال باستخدام عميل قاعدة بيانات محلي

أنا أستخدم DBeaver هنا

  1. منفذ قاعدة البيانات 55432، متطابق مع ما هو موجود في d/boot_dev. هنا هو 55432 لتجنب التعارض مع ما هو موجود محليًا.
  2. اسم قاعدة البيانات
  3. يوصى بتحديد “إظهار جميع قواعد البيانات”
  4. اسم المستخدم
  5. اختبر ما إذا كان الاتصال ممكنًا
  6. انقر فوق “موافق” للحفظ

أخيرًا، يمكنني الآن عرض البيانات في قاعدة البيانات محليًا بسعادة.

إعجاب واحد (1)

هل من الطبيعي ألا يعرض هذا التثبيت القائمة بشكل صحيح؟