تشغيل Discourse على / بينما يتم تقديم تطبيق مخصص على /tickets في نفس النطاق

مرحباً بالجميع،

أحاول تأكيد البنية الصحيحة لتقديم تطبيق مخصص في مسار فرعي مع الإبقاء على Discourse في المسار الجذر (/)، دون تعديل الأجزاء الداخلية لـ Discourse.

ما أريده (الهدف النهائي)

https://mydomain.com/         → Discourse
https://mydomain.com/tickets  → نظام تذاكر مخصص (Go + Gin)

المتطلبات:

  1. يجب أن يبقى Discourse في / ويجب أن يعيش النظام المخصص في /tickets
  2. نفس النطاق
  3. لا يوجد إضافة (plugin) لـ Discourse

البيئة الحالية

  1. OVH VPS (Ubuntu) يعمل عليه Discourse في Docker (/var/discourse)
  2. تطبيق Go مخصص يعمل على نفس الخادم على 127.0.0.1:8080
  3. nginx خارجي مثبت على المضيف (ليس داخل الحاوية)

أنا لا أحاول تشغيل Discourse في مجلد فرعي مثل /forum. أوه، وقبل أن يسأل أحدهم، نعم، لقد حاولت استخدام إضافة تذاكر Discourse - لكنها لا تعمل بالطريقة التي أريدها.

يمكنك القيام بذلك بسهولة باستخدام nginx، وفي حين أنه لا يُنصح به، فأنا لست على علم بأن discourse يستخدم المسار /tickets لأي شيء.

شكرًا على الرد السريع! أنا أستخدم nginx وأواجه صعوبة. هذا هو الإعداد الخاص بي ولا يزال بدون جدوى.

هذا داخل ملف app.yml الخاص بي

ports:
  - "127.0.0.1:4000:4000"
  #- "80:80" # http
  #- "443:443" # https

/etc/nginx/sites-enabled/filename

server {
    listen 80;
    server_name mydomain.com;

    # ---- Tickets app ----
    location ^~ /tickets {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Discourse auth headers
        proxy_set_header X-Discourse-Username $http_x_discourse_username;
        proxy_set_header X-Discourse-User-Id $http_x_discourse_user_id;
        proxy_set_header X-Discourse-Groups $http_x_discourse_groups;
    }

    # ---- Discourse ----
    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_http_version 1.1;
        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

هل يمكنك توضيح أين تواجه الصعوبة بالضبط؟

إعجابَين (2)

أعتقد أن هذه هي أفضل تعليمات لك على الأرجح، على الرغم من ذلك. ستتبع تلك التعليمات، ولكن بطريقة معكوسة نوعًا ما. ستجعل وكيلك العكسي الخارجي يخدم / إلى Discourse و /tickets إلى تطبيقك.

@pfaffman إذًا ما أستنتجه هو: أعد استخدام المفهوم، وليس الإعداد — ضع وكيلًا عكسيًا خارجيًا في المقدمة يقوم بتوجيه:

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

أعتقد أن nginx الخارجي هو أسهل طريقة للقيام بذلك. سيكون من الممكن إنشاء قالب يسمح للداخلي بالقيام بذلك، ولكنه أكثر تعقيدًا، وأعتقد أنه يقدم فائدة قليلة.

نعم، ولكنك لست بحاجة إلى إجراء أي تغييرات على حاوية Discourse بخلاف إزالة قوالب ssl/let’s encrypt وربما استخدام مقبس (socket). (لذا، في الواقع، ليس الكثير في هذا الموضوع مفيدًا).

لقد نجحت في ذلك!

شكراً لكما على ردودكما!

رابط “التذاكر” الذي أضفته إلى رأس Discourse يعمل أيضاً، عندما يتم تعيينه على فارغ وليس ذاتي، حيث يتم التعامل مع /tickets كمسار Discourse ويحاول فقط تبديل عرض react. الفراغ يجبر على إعادة تحميل الصفحة بالكامل.