تشغيل Discourse كخدمة في مجموعة Docker

أحاول نشر Discourse كخدمة docker swarm.
استخدمت طريقة المشغل الرسمية لنشر Discourse في إعداد حاوية واحدة.
نسخت الملفات المطلوبة من /var/www/discourse داخل الحاوية المستقلة إلى موقع على خوادم المضيف لاستخدامها في خدمة Swarm.
استخدمت خادم PostgreSQL موجودًا
أنشأت حاوية Redis مخصصة لـ Discourse
يفشل Discourse في البدء ويخرج مع:
uninitialized constant Discourse::SiteSetting (NameError)
تتصل الحاوية بـ PostgreSQL و Redis دون مشاكل.
تم تعيين DISCOURSE_HOSTNAME بشكل صحيح إلى discourse.xyz في البيئة.
هل يمكن أن يكون هذا بسبب نقص التبعيات أو فشل تجميع الأصول؟
هل يتطلب Discourse أي تعديلات ليعمل بشكل صحيح داخل بيئة Swarm؟

version: '3.7'

services:
  app:
    image: discourse-app:latest
    user: "1000:1000"
    working_dir: /var/www/discourse
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      labels:
        - "traefik.enable=true"
        - "traefik.backend=discourse"
        - "traefik.docker.network=service"
        - "traefik.frontend.rule=Host:discourse.xyz"
        - "traefik.port=80"
    command:
      - "/bin/bash"
      - "-c"
      - |
        bundle config set deployment true && \
        bundle config set without 'test development' && \
        RAILS_ENV=production bundle install && \
        RAILS_ENV=production bundle exec rake db:migrate && \
        RAILS_ENV=production bundle exec rails server -b 0.0.0.0
    environment:
      DISCOURSE_DB_HOST: "postgrest1"
      DISCOURSE_DB_PORT: "5432"
      DISCOURSE_DB_USERNAME: "postgres"
      DISCOURSE_DB_PASSWORD: "****"
      DISCOURSE_DB_NAME: "discourse"
      DISCOURSE_REDIS_HOST: "redis-discourse"
      DISCOURSE_REDIS_PORT: "6379"
      DISCOURSE_REDIS_PASSWORD: "****"
      DISCOURSE_HOSTNAME: "discourse.xyz"
      DISCOURSE_DEVELOPER_EMAILS: "abc@xyz.com"
      DISCOURSE_SMTP_ADDRESS: "xyz"
      DISCOURSE_SMTP_PORT: "25"
      DISCOURSE_NOTIFICATION_EMAIL: "donotreply@xyz.com"
    networks:
      - service
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - type: bind
        source: /discourse/discourse_files/discourse
        target: /var/www/discourse
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone
        target: /shared
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone/log/rails
        target: /data/modulusdata/infra/discourse/shared/standalone/log/rails
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone/log/var-log
        target: /var/log
        bind:
          propagation: rprivate

networks:
  service:
    external: true

هذا يتجاوز الدعم الذي يمكنك توقعه هنا. هناك الكثير من الأشياء الصغيرة التي يمكن أن تكون خاطئة، ولهذا السبب فإن التثبيت القياسي هو كل ما يتم دعمه. إليك بعض التلميحات. إذا واجهت صعوبة ولديك ميزانية، يمكنك الاتصال بي أو السؤال في Marketplace

لا يمكنك استخدام الصورة الأساسية. يجب عليك تهيئة صورتك الخاصة ودفعها إلى مستودع. إذا كنت ذكيًا ولديك الكثير من الوقت، يمكنك جعل GitHub يقوم بذلك نيابة عنك.

ستحتاج إلى وضع أصولك على S3 (تكوين موفر تخزين كائنات متوافق مع S3 للتحميلات)

هل تحاول جعل كل هذه الكتابة إلى نفس ملفات السجل؟ سأتركها في الحاوية وأتجاهلها.

لا أعتقد أنك بحاجة إلى المنافذ 8080 و 8443 - traefik يتعامل مع ذلك، أليس كذلك؟ لن يعمل Discourse على منفذ غير قياسي.

شيء مثل:

./launcher bootstrap app
docker push-that-container-to-your-private-repo
./launcher start-cmd

بعد ذلك، يمكنك استخدام المتغيرات في start-cmd لبدء التجمع الخاص بك مع الأشياء الصحيحة حتى يتمكن من العثور على قاعدة البيانات الخاصة بك، و redis، وما إلى ذلك. أرى أن لديك مجموعة منها، لكنني لست متأكدًا من أن هذا كل ما تحتاجه.

إعجابَين (2)