أحدث إصدار من Discourse يسبب فشل إعادة البناء، منفذ Redis قيد الاستخدام بالفعل

نظام التشغيل: أوبونتو 20.04
الخادم: vServer 4 نواة، 16 جيجابايت
القرص: SSD 160 جيجابايت

لقد قمت مؤخرًا بالترقية إلى أحدث إصدار من Discourse. الآن أواجه مشكلة حيث يبلغ Discourse أن المنفذ 6379 مستخدم، وبالتالي لا يمكن بناء الحاوية:

عندما أتحقق من جميع المنافذ المستخدمة، فإن هذا المنفذ حر:

يبدو أن شيئًا ما في فحص Discourse يفشل في التعرف على أن المنفذ حر.
في Docker، يمكنني رؤية أن حاوية Discourse فقط هي التي بدأت، بينما يفشل كل شيء آخر:

تحولت هذه المشكلة حقًا إلى مفارقة. يبدأ Discourse عملية redis-server في Docker ثم ينهار، لأنه بدأ العملية بالفعل:

لدي تثبيت رئيسي لـ Redis يعمل على المضيف، لكنه يعمل على المنفذ 6800، لذا لا ينبغي أن يتسبب في تداخل.

يبدو بوضوح أن الفحص يفشل في نفسه، لأن Redis يبدأ بنجاح ثم يبلغ عن فشل: “العنوان قيد الاستخدام”:

هل يمكنك مشاركة ملف app.yml الخاص بك؟

نعم بالتأكيد، شكرًا لك على الاطلاع عليه :smiley:. إليك ملف app.yml الخاص بي:

## هذا قالب حاوية Docker المستقل الشامل لـ Discourse
##
## بعد إجراء أي تعديلات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا جدًا عند التعديل!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البادئة أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة الملف عند الحاجة

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت ترغب في مشاركة Discourse لمنفذ مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "12080:80"   # http
  - "12443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## قم بتعيين db_shared_buffers إلى حد أقصى 25% من إجمالي الذاكرة.
  ## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
  db_shared_buffers: "4096MB"

  ## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي إصدار من Git يجب أن تستخدمه هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة وأنوية المعالج.
  ## سيتم تعيينها تلقائيًا بواسطة bootstrap بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوزها
  UNICORN_WORKERS: 8

  ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
  DISCOURSE_HOSTNAME: discourse.forum

  ## قم بإلغاء التعليق إذا كنت تريد بدء الحاوية بنفس اسم النطاق (-h option) المحدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤول ومطور
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'developer@email'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  DISCOURSE_SMTP_ADDRESS: mailserver
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: email@email
  DISCOURSE_SMTP_PASSWORD: "****"
  #DISCOURSE_SMTP_AUTHENTICATION: plain
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)

  ## إذا قمت بإضافة قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## عنوان CDN لهذه النسخة من Discourse (مُعد للاستخراج)
  ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## حاوية Docker لا تحتفظ بحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## تذهب الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/angusmcleod/discourse-question-answer.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/gdpelican/retort.git
          - git clone https://github.com/davidtaylorhq/discourse-whos-online.git
          - git clone https://github.com/vinkas0/discourse-navigation.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/iunctis/discourse-formatting-toolbar.git
          - git clone https://github.com/discourse/discourse-tooltips.git
          - git clone https://github.com/gdpelican/babble.git
          - git clone https://github.com/paviliondev/discourse-quick-messages.git
          - git clone https://github.com/worldismine/PM-Scanner.git
          - git clone https://github.com/paviliondev/discourse-ratings.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/jannolii/discourse-topic-trade-buttons.git

## أي أوامر مخصصة للتشغيل بعد البناء
run:
  - exec: echo "Beginning of custom commands"
  ## إذا كنت تريد تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق وتغيير:
  ## بعد الحصول على أول بريد إلكتروني للتسجيل، قم بإعادة التعليق على السطر. يجب تشغيله مرة واحدة فقط.
  ##- exec: rails r "SiteSetting.notification_email='email@email"
  - exec: echo "End of custom commands"

هل يمكنك أيضًا نشر مخرجات إعادة البناء الكاملة؟

أنا متأكد تقريبًا من أن الأسطر التي تراها تظهر في كل إعادة بناء منذ زمن بعيد ولا تمنع إعادة البناء بأي شكل من الأشكال، لأننا نضمن فقط تشغيل Redis في خطوتين مختلفتين. مشكلتك تكمن في مكان آخر.

بالتأكيد. إذا كنت بحاجة إلى أي سجلات أخرى، يمكنني تزويدك بها :slight_smile:
لقد نشرت السجلات على Pastebin لأنها تتجاوز 3226 سطرًا وتتجاوز حد منشور المنتدى: Discourse Rebuild Log - Pastebin.com

يُظهر هذا الإخراج إعادة بناء ناجحة…

أليس موقعك يعمل على المنفذ 12080؟

نعم، تم إعادة بناء الموقع بنجاح مرة أخرى.
اكتشفت سبب المشكلة، ولماذا لم يتم تحميل الموقع بشكل صحيح بالنسبة لي.
كان الخطأ في شهادة SSL العكسية، التي لم تتجدد تلقائيًا، مما تسبب في عدم تحميل الصور، مما جعلني أفترض أن ذاكرة التخزين المؤقت Redis لا تعمل :man_facepalming:

تظهر عملية البناء إشعارًا، لكن خادم Redis يعمل بشكل جيد.
بعد تجديد شهادة SSL، عاد الموقع للعمل مرة أخرى.

شكرًا لدعمكم، واعتذر عن حيرتي :sweat_smile: