قد يكون السبب الجذري هو أن 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، للسماح لجميع الأوامر المحلية بالمرور. أي أن جميع الأوامر لن تحتاج إلى مصادقة بعد الآن (ولا تحتاج إلى إدخال كلمة مرور).
الخطوات المحددة:
- نسخ
/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
- تعديل ملف
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
- إيقاف وحذف الحاوية الحالية، ثم إنشاء حاوية جديدة
d/shotdown_dev
d/boot_dev
- بعد إعادة الإنشاء، قم بتشغيل تطبيقات الواجهة الأمامية والخلفية، واختبر ما إذا كان النسخ الاحتياطي يعمل بشكل طبيعي
d/rails s
# التنفيذ في سطر أوامر آخر
d/ember-cli
في صفحة النسخ الاحتياطي، انقر فوق “نسخ احتياطي”، انتظر بضع ثوانٍ، ثم تحقق من قائمة ملفات النسخ الاحتياطي.


