⚠ يبدو أن المنفذ 443 في هذا الكمبيوتر غير قابل للوصول باستخدام اسم المضيف: metabolism.logophilia.eu ----

شكرًا على الملاحظات، أقدر حقًا الوقت الذي خصصته. ليس بقصد أن أبدو متعجرفًا، لكن:

[2/5] جاري إعداد التكوين
✓ المنافذ 80 و443 متاحة للاستخدام

في الواقع، النص يقول في البداية “متاحة للاستخدام”. مع ذلك، لقد نجحت في تشغيل مثيلتي الآن بمساعدة Gemini (معظمها يتعلق باستخدام Docker، طبعًا lol). أود أن أقدم “دليل التشغيل” الخاص بي لأي مستخدمين آخرين لـ Virtualmin، لأن: “تحرير المنفذ 443” ليس الحل هنا. باقي منشوري سيكون هذا الدليل، وإذا كان من الأفضل نشره في مكان آخر، مثل موضوع جديد، فالرجاء إخباري بالأفضل؛ أعتقد أنني لست الوحيد الذي لديه هذا الإعداد، وقد يكون مفيدًا للآخرين. شكرًا مجددًا!

إذا كنت تستخدم خادمًا افتراضيًا خاصًا (VPS) يُدار بواسطة Webmin/Virtualmin، وتستخدم نطاقًا فرعيًا:

دليل التشغيل الحاسم لـ Virtualmin + Discourse *

  • (1) تنظيف البقايا (في حال إعادة المحاولة، كما فعلتُ):

    rm -rf /var/discourse/shared/standalone/ssl/*

    rm -rf /var/discourse/shared/standalone/letsencrypt

    rm -rf /var/discourse/shared/standalone/state

  • (2) حذف القوالب:

    يجب حذف سطور templates/web.ssl.template.yml وtemplates/web.letsencrypt.ssl.template.yml تمامًا من ملف app.yml. فمُحلّل التشغيل المخصص سيقوم بتقييمها حتى لو سبقت بعلامة #.

  • (3) إعداد البريد الإلكتروني والمتغيرات:

    غيّر DISCOURSE_SKIP_EMAIL_SETUP من '1' إلى '0'، لأن Discourse لن يتمكن من الاتصال والتحقق من DiscordID؛

    أضف DISCOURSE_FORCE_HTTPS: true لكي يولد الخادم الخلفي عناوين URL آمنة.

    تذكير ودي: تأكد من تعيين DISCOURSE_SMTP_USER_NAME إلى اسم حساب البريد الإلكتروني الخام (مثل 'logophilia'وليس عنوان البريد الإلكتروني الكامل (مثل 'logophilia@logophilia.eu')، وأحط بيانات الاعتماد بعلامات اقتباس مفردة (') لتجاوز أخطاء تحليل أحرف YAML المحتملة.

  • (4) إعداد كتلة expose:

    تأكد من أن كتلة expose: في ملف app.yml تحتوي على تعيين HTTP؛ فالتعيين 443=>8443 اختياري/مُكرر، لأن Virtualmin ينهي منطق SSL قبل تمريره:

    expose:
      - 8080:80
    

    يمكنك الآن البدء بإعادة البناء:

    cd /var/discourse
    ./launcher rebuild app
    
  • (5) إعداد النطاق الفرعي ومسار الوكيل (Proxy):

    • أنشئ نطاقك الفرعي في Virtualmin كالمعتاد، وحمّيه بشهادة SSL من Let’s Encrypt (يتم ذلك تلقائيًا، فقط تأكد من عدم حدوث أخطاء لأي سبب غير ذي صلة).
    • انتقل إلى مسارات الوكيل (Virtualmin → نطاقك الفرعي → إعدادات الويب → مسارات الوكيل)، أنشئ تعيينًا جديدًا من / إلى http://localhost:8080/، اترك خيار “الخدمة محليًا” غير محدّد، لكن فعل Proxy WebSocket على نعم للسماح بالتحديثات الفورية وتدفقات الإشعارات.
  • (6) تعليمات رأس CSRF:

    • في Webmin ➔ خوادم ➔ خادم الويب Apache ➔ [ابحث عن إعدادات نطاقك الفرعي هنا وانقر على إعدادات 443] ➔ تحرير التعليمات، ضع السطور التالية فوق كتلة الوكيل الخاصة بـ Virtualmin الخاصة بـ Let’s Encrypt (عادةً “ProxyPass /.well-known !”) لتسهيل نقل رموز CSRF:
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
    

    ProxyPreserveHost On: يخبر Discourse باسم النطاق الفعلي بدلاً من “localhost”.
    RequestHeader set X-Forwarded-Proto "https": يخبر Discourse صراحةً أن المستخدم يستخدم اتصالاً آمنًا، مما يتوافق مع إعداد DISCOURSE_FORCE_HTTPS: true.
    RequestHeader set X-Forwarded-For: ينقل عنوان IP الفعلي للزائر إلى الحاوية لكي تعمل سجلات الأمان.

  • (7) المصافحة النظيفة للحاوية:

    أثناء اكتمال عملية إعادة البناء الطويلة (آسف… لكن هذا صحيح بالفعل؛-)، تأكد من مسح أي مخطط حاوية عالق محتمل باستخدام docker rm -f app حتى يقوم تشغيل ./launcher start app بتشغيل مثيل جديد تمامًا مرتبط بالمنفذ 8080. تحقق من أن أمر docker ps يظهر شيئًا تحت “المنافذ” مشابهًا لـ:

    # docker ps
    CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                                                                NAMES
    d21772a21e36   local_discourse/app   "/sbin/boot"   45 minutes ago   Up 45 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp   app
    

    (كما ترون، تركتُ تعليمات 443=>8443 في ملف app.yml الخاص بي، وتعمل في كلا الحالتين.)

  • (8) المراقبة والإطلاق:

    تابع تدفق التشغيل بـ docker logs -f app حتى تنتهي عمليات ترحيل قاعدة البيانات ويبدأ العمال في معالجة الطلبات. ببساطة، ستظهر مجموعة من سطور “INFO” بسرعة.

  • (9) الإنهاء:

    افتح نطاقك الفرعي في متصفح، انقر على تسجيل، واترك النظام يرسل بريدًا إلكترونيًا للتحقق إلى صندوق بريدك.

*) حتى يثبت العكس :wink: