إعداد Discourse على خادم محلي: مشاكل PostgreSQL وسكربت الإعداد

مرحباً بمجتمع Discourse،
أنا جديد في مجال Docker ومهام إدارة أنظمة Linux بشكل عام. أحاول إقناع شركتي باستخدام Discourse وطلبوا مني عرضًا توضيحيًا أولاً. لذا أنا هنا أحاول تشغيله على خوادمنا.
لقد كنت أحاول إعداد Discourse على خادم محلي وواجهت بعض المشكلات التي آمل أن أحصل على مساعدة بشأنها. فيما يلي ملخص لإعدادي والخطوات التي اتخذتها حتى الآن:

إعداد النظام:

  • نظام التشغيل: Ubuntu 20.04.6 LTS
  • إصدار Docker: 24.0.5، بناء 24.0.5-0ubuntu1~20.04.1
  • إصدار Discourse: 3.2

المشكلة:
لقد اتبعت الدليل الرسمي لتثبيت Discourse على خادم سحابي (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub)، ولكني أواجه أخطاء مع البرنامج النصي discourse-setup تتعلق بـ PostgreSQL.

الخطوات المتخذة:

  1. لقد تأكدت من أن PostgreSQL قيد التشغيل عن طريق التحقق من قائمة العمليات.
  2. لقد تحققت من أن PostgreSQL يستمع على المنفذ الصحيح (5432) وأن ملف مقبس Unix موجود.
  3. واجهت أخطاء تشير إلى أن قاعدة البيانات والمستخدم “discourse” موجودان بالفعل، ولكن عندما تحققت باستخدام أمر psql، لم تكن قاعدة البيانات أو المستخدم مدرجين.

هنا الأوامر التي استخدمتها:

  • التحقق من عمليات PostgreSQL: ps aux | grep postgres
  • التحقق من منفذ الاستماع لـ PostgreSQL: sudo netstat -plunt | grep postgres
  • التحقق من ملف مقبس Unix: ls -l /var/run/postgresql/.s.PGSQL.5432
  • محاولة إسقاط قاعدة البيانات والمستخدم “discourse”: su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' و su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • سرد قواعد البيانات والمستخدمين: psql -c \"\\l\" و psql -c \"\\du\"

الأخطاء التي تمت مواجهتها:

  • ERROR: database "discourse" already exists
  • ERROR: role "discourse" already exists
  • psql: error: FATAL: role "root" does not exist

على الرغم من هذه الأخطاء، لا يبدو أن قاعدة البيانات والمستخدم “discourse” موجودان عند التحقق منهما مباشرة في PostgreSQL.
هناك أخطاء أخرى في السجل ولكنني أعتقد أن هذه هي الأخطاء ذات الصلة على الأقل في الوقت الحالي.

سأكون ممتنًا جدًا لأي توجيه أو اقتراحات حول كيفية حل هذه المشكلات. هل واجه أي شخص مشكلات مماثلة، أو هل لدى أي شخص رؤى حول ما قد يحدث بشكل خاطئ؟

شكراً جزيلاً مقدماً على مساعدتكم،
أندريا

لا تحتاج إلى تثبيت بوستجريس. في التثبيت القياسي، لدى ديسكورس بوستجريس الخاص به داخل الحاوية. أوصي بإلغاء تثبيت أو إزالة بوستجريس. هل لديك سبب لاستخدام بوستجريس موجود مسبقًا؟ هل يعمل أي شيء آخر على هذا الجهاز؟

لا أعتقد أن هذه أخطاء، بل مجرد رسائل تصحيح.

ماذا قيل في نهاية البرنامج النصي؟

مرحباً @pfaffman،
شكراً على الرد.

لا، هذه الآلة مخصصة لـ discord، لقد قمت بتثبيت postgre بعد ملاحظة تلك الأخطاء.

أتمنى لو كان بإمكاني إرفاق السجل ولكنني ما زلت غير قادر على ذلك.

هذا هو الجزء الأخير:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git reset --hard", "sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" \n]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete]"}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

سأحاول الآن إلغاء تثبيت postgre.

شكراً،
أندريا

لقد نفدت الذاكرة لديك. تحتاج إلى إضافة ذاكرة مبادلة و/أو المزيد من ذاكرة الوصول العشوائي.

ماذا يعطي

free -h

؟

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

لدي حوالي 7 جيجابايت متاحة

              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       319Mi       599Mi        13Mi       6.9Gi       7.1Gi
Swap:         975Mi       2.0Mi       973Mi

الدليل يقترح حوالي 2 جيجابايت.

الإعداد الافتراضي لـ 1 جيجابايت من ذاكرة الوصول العشوائي يعمل بشكل جيد لمجتمعات Discourse الصغيرة. نوصي بـ 2 جيجابايت من ذاكرة الوصول العشوائي للمجتمعات الأكبر.

هل فاتني شيء؟

هممم. هذا غريب. كانت هناك بعض المشاكل الغريبة المتعلقة بمتطلبات ذاكرة الوصول العشوائي (RAM) تم الإبلاغ عنها مؤخرًا. قد تحاول مرة أخرى عدة مرات. تقول بعض التقارير إنها تفشل بشكل متقطع.

تعديل: آسف. 127 هي ذاكرة الوصول العشوائي (RAM). 128 غير معروف.

هل تقوم بتثبيت قياسي من البداية وتشغيل discourse-setup؟ (كما ذكرت في الموضوع الأصلي)

هل أنت خلف نوع من جدار الحماية قد يمنع الخادم من الوصول إلى GitHub والمستودعات الأخرى؟

نعم صحيح، أنا أتبع دليل github.
إذا لم تكن المشكلة في postgre ولكن في الرسالة الأخيرة، فإليك النقطة في السجل حيث فشلت

  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
fatal: unable to access 'https://github.com/discourse/discourse.git/': server certificate verification failed. CAfile: none CRLfile: 
none

يبدو أنني لا أستطيع الاتصال بـ github بشكل صحيح، على الرغم من أنني قادر على استنساخ المستودع من هذا الجهاز.

إنها مشكلة في شبكة دوكر. كيف قمت بتثبيت دوكر؟ فكر في إلغاء التثبيت وتجربة طريقة أخرى.

هل لديك جدار حماية على نظام التشغيل أو شبكتك؟ يمكن أن تكون أيضًا مشكلة في نظام أسماء النطاقات. إنها دائمًا مشكلة نظام أسماء النطاقات، كما يقولون.

أعلم أنه ليس لدينا جدار حماية على نظام التشغيل في الوقت الحالي، ولكن لتفاصيل تثبيت دوكر أحتاج إلى التحدث مع قسم تكنولوجيا المعلومات.
هل لديك أي فكرة عن مشكلة DNS التي قد نواجهها؟ هل هناك أي أقسام في السجل أو رسائل تصحيح يمكن أن تساعد (لا يزال بإمكاني إرفاق الملفات)؟

@pfaffman اكتشفت أن التفاصيل كانت في سجل الأوامر الخاص بي أيضًا.

   63  sudo apt install docker.io
   64  sudo apt remove containerd runc
   65  sudo apt remove containerd
   66  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   67  echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   68  sudo apt update
   69  sudo apt install docker-ce
   70  sudo apt upgrade
   71  sudo apt install docker.io

لا أعتقد أنه يمكنك تثبيت كل من docker-ce و docker.io. ربما قم بإزالة كليهما ثم قم بتثبيت أحدهما فقط.

عادةً ما أستخدم https://get.docker.com/. ما سأفعله هو الحصول على جهاز افتراضي جديد واستخدام هذا فقط.