تم الحل: الخطاب وراء Traefik

أعلم أنه تمت مناقشة هذا من قبل، ولكن معظم المناقشات القديمة كانت تتعلق بإصدارات أقدم من كل من discourse و traefik - لذا أنا هنا وأحتاج إلى المساعدة :smiley:

ما الذي يعمل؟
كان يمكن الوصول إلى Discourse من الخارج ويعمل بشكل جيد حتى قمت بالتعليق على كل منفذ مكشوف.

يمكن الوصول إلى Traefik من الخارج أيضًا.

ما الذي لا يعمل؟
محاولة الوصول إلى Discourse تعطيني خطأ بوابة سيئة، ولكن أثناء محاولة أشياء مختلفة قرأتها، حصلت أيضًا على 404.

إعداد Traefik الخاص بي:

cat docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:latest
#    network_mode: "host"
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`mydyndns-url`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=redacted:***"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`mydyndns-url`)"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"
      - "providers.file.filename=/dynamic_conf.yml"
      - "traefik.http.routers.traefik-secure.middlewares=secHeaders@file,traefik-auth"
networks:
  proxy:
    external: true

أنا أستخدم

docker network create proxy
docker-compose -f /opt/containers/traefik/docker-compose.yml up -d

لبدء الأشياء. استخدمت data/traefik.yml من هنا و data/dynamic_conf.yml من نفس الشخص

هذا يعمل.

داخل Discourse الخاص بي (/var/discourse/containers/app.yml) لدي هذا:

## هذا هو قالب حاوية 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:
#  - "7890:80"   # http
#  - "7891:443" # https

labels:
  app_name: discourse
  traefik.enable: true
  traefik.http.routers.discourse.entrypoints: http
  traefik.http.routers.discourse.rule: Host(`***`)      ## أدخل نطاقك هنا
  traefik.http.middlewares.discourse-https-redirect.redirectscheme.scheme: https
  traefik.http.routers.discourse.middlewares: discourse-https-redirect
  traefik.http.routers.discourse-secure.entrypoints: https
  traefik.http.routers.discourse-secure.rule: Host(`***`)      ## أدخل نطاقك هنا
  traefik.http.routers.discourse-secure.tls: true
  traefik.http.routers.discourse-secure.tls.certresolver: http
  traefik.http.routers.discourse-secure.service: discourse
  traefik.http.services.discourse.loadbalancer.server.port: 3000
  traefik.docker.network: proxy

docker_args:
  - "--network=proxy"

networks:
  - proxy
#  - default

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: de_DE.UTF-8
  LANG: de_DE.UTF-8
  LANGUAGE: dn_DE.UTF-8
  EMBER_CLI_PROD_ASSETS: 1
  # DISCOURSE_DEFAULT_LOCALE: en

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

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

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

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

/// ترك تكوين البريد الإلكتروني لأسباب الخصوصية - لقد نجح ذلك عند التعرض المباشر

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

  ## مفتاح ترخيص MaxMind الجغرافي لعنوان IP للبحث عن عنوان IP
  ## انظر https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
  DISCOURSE_MAXMIND_LICENSE_KEY: ***

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

لذا… من فضلك!

ماذا فعلت خطأ؟

يشير هذا إلى أن الحاوية الخاصة بك معطلة بطريقة ما، ولكنك نجحت في تكوين traefik للاتصال بها، لذا فمن المحتمل أن ترغب في العودة إلى ذلك. ربما لم تنتظر وقتًا كافيًا لبدء تشغيل خادم الويب و rails. لا أرى أي مشاكل واضحة في app.yml.

شكراً لك، @pfaffman!

لقد انتظرتُ بعض الوقت (11 ساعة، وهذا الحاسوب ليس بطيئًا لهذه الدرجة) - وهذا لم يحل المشكلة.

أتساءل عما إذا كنتُ قد تمكنتُ من إجبار discourse على الاتصال بشبكتي المسماة “proxy”. هل هناك أي طريقة للتحقق من ذلك؟

يُخبرني docker ps أن discourse لم يعد يستخدم المنافذ، وهو ما أردته. لكن لا يمكنني معرفة ما إذا كان discourse يتصل بأي شيء.

./launcher enter app
wget www.google.de

يظهر لي أن ديسكورس متصل بالإنترنت. لكن لا يمكنني الوصول إليه من الخارج…

جرب المنفذ 80، وليس 3000

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

يعمل!!! شكراً جزيلاً لك. لقد كان هذا يزعجني لمدة أسبوع.

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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.