لا يمكنني تشغيل Discourse على منافذ مختلفة

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

mkdir /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

# إنشاء ملف الإعدادات
cat <<-"EOF" > /var/discourse/containers/discourse
## هذا قالب حاوية 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:
- "10080:80"   # http
- "10443:443" # https

params:
db_default_text_search_config: "pg_catalog.english"

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

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

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

env:
LC_ALL: en_GB.UTF-8
LANG: en_GB.UTF-8
LANGUAGE: en_GB.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en

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

## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
DISCOURSE_HOSTNAME: 'forum.example.com'

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

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

## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
# عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
# تحذير: قد يسبب حرف '#' في كلمة مرور SMTP مشاكل!
DISCOURSE_SMTP_ADDRESS: smtp-relay.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: info@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)
#DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (مطلوب من بعض المزودين)
DISCOURSE_NOTIFICATION_EMAIL: no-reply@example.com    # (العنوان المرسل منه الإشعارات)

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

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

## مفتاح عنوان IP لجغرافية الموقع من Maxmind للبحث عن عناوين IP
## راجع https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## حاوية 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

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

# إعداد Discourse مع ملف الإعدادات
./launcher bootstrap discourse

يمكنني تأكيد أن Discourse يستمع على المنافذ الصحيحة:

root@ubuntu-server:~# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:10080           0.0.0.0:*               LISTEN      185948/docker-proxy
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      150667/docker-proxy
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      150655/docker-proxy
tcp        0      0 0.0.0.0:10443           0.0.0.0:*               LISTEN      185937/docker-proxy
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      169991/nginx: maste
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      519/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1465/sshd: /usr/sbi
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      169991/nginx: maste
tcp6       0      0 :::22                   :::*                    LISTEN      1465/sshd: /usr/sbi

إذا قمت بطلب URL ورقم المنفذ باستخدام curl، سأحصل على 301 Moved permanently:

root@ubuntu-server:~# curl forum.example.com:10080
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

هذا على الأرجح بسبب إعادة توجيه منفذ HTTP إلى منفذ HTTPS. (استخدام العلم -I مع curl سيُظهر لك هدف إعادة التوجيه.)

يجب أن يؤدي تشغيل curl forum.example.com:10443 إلى تحميل الموقع كما تتوقع.

هل نظرت إلى تشغيل مواقع ويب أخرى على نفس الجهاز مع Discourse؟