كم كمية الذاكرة العشوائية (RAM) اللازمة لاستضافة discourse مع خدمات أخرى؟

في منتديات Discourse، قرأت أن 1 جيجابايت كحد أقصى 2 جيجابايت من الذاكرة يجب أن تكون كافية، ومع ذلك، لا تعمل هاتان الخيارتان بسلاسة على موقعي الإلكتروني. وعند تشغيل ملف docker-compose الخاص بي بذاكرة 4 جيجابايت، يعمل بنسبة تتراوح بين 90% و95%، وهو أمر كبير. تشمل العناصر الأخرى في ملف docker-compose موقعًا إلكترونيًا ثابتًا مبنيًا بلغة HTML ووكيل بروكسي nginx. هل يمكنك إخباري إذا كانت هناك حيلة أو إعدادات في Discourse تجعله يعمل بسلاسة أكبر على ذاكرة وصول عشوائي أقل؟

تحتاج إلى ضبط عدد العمال (workers) ومخزن قاعدة البيانات المؤقت (DB buffer). إذن، الخيارات التي ستحتاج إلى ضبطها هي:

  • db_shared_buffers
  • UNICORN_WORKERS

هنا يمكنك رؤية تقديرات الاستخدام لكل عملية Unicorn:

Discourse قادر على التشغيل بذاكرة عشوائية (RAM) مقدارها 512 ميجابايت؛ فهذه ليست تجربة جيدة، لكنها ممكنة. المشكلة التي تواجهها هي أن Discourse يفحص موارد الخادم (ككل العقدة node) ويخطط لاستخدام الموارد لاستغلال أكبر قدر ممكن من الموارد، لأن Discourse يفترض أنه سيعمل بمفرده.

هل يمكنك مشاركة ملف docker-compose هنا حتى نتمكن من تقديم اقتراحات مناسبة؟

إليك ملف docker-compose. كان عليّ إزالة بعض روابط الصور لأنني لا أستطيع نشر أكثر من رابطين، لكن هذا يجب أن يكون كافيًا. أين يجب أن أضع متغير البيئة DB buffer؟

version: '2'
services:
  nginx:
    image: ''
    #image: 'itshady/nginx'
    ports:
      - '80:80'
    depends_on:
      - discourse
  intellectus:
    image: '
#    image: 'itshady/intellectus'
    ports:
      - '90:80'
  postgresql:
    image: ''
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      #- './data/postgresql:/bitnami/postgresql'
      - 'postgresql_data:/bitnami/postgresql'
  redis:
    image: ''
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - 'redis_data:/bitnami'
  discourse:
    image: 'docker.io/bitnami/discourse:2-debian-10'        #2-debian-10
    ports:
      - '100:3000'
    depends_on:
      - postgresql
      - redis
    volumes:
      - './data/discourse:/bitnami'
    environment:
      - POSTGRESQL_HOST=postgresql
      - POSTGRESQL_ROOT_USER=postgres
      - POSTGRESQL_CLIENT_CREATE_DATABASE_NAME=bitnami_application
      - POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME=bn_discourse
      - POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD=bitnami1
      - DISCOURSE_POSTGRESQL_NAME=bitnami_application
      - DISCOURSE_POSTGRESQL_USERNAME=bn_discourse
      - DISCOURSE_POSTGRESQL_PASSWORD=bitnami1
      #- DISCOURSE_HOSTNAME=forums.intellectus.ca
      - DISCOURSE_HOSTNAME=${FORUM_URL}
      - DISCOURSE_EMAIL=
      - SMTP_HOST=
      - SMTP_PORT=
      - SMTP_USER=
      - SMTP_PASSWORD=
  sidekiq:
    image: 'docker.io/bitnami/discourse:2-debian-10'
    depends_on:
      - discourse
    volumes:
      - './data/discourse:/bitnami'
    command: 'nami start --foreground discourse-sidekiq'
    environment:
      - DISCOURSE_POSTGRESQL_NAME=bitnami_application
      - DISCOURSE_POSTGRESQL_USERNAME=bn_discourse
      - DISCOURSE_POSTGRESQL_PASSWORD=bitnami1
      - DISCOURSE_HOST=discourse
      - DISCOURSE_PORT=3000
      #- DISCOURSE_HOSTNAME=forums.intellectus.ca
      - DISCOURSE_HOSTNAME=${FORUM_URL}
      - SMTP_HOST=
      - SMTP_PORT=
      - SMTP_USER=
      - SMTP_PASSWORD=
volumes:
  postgresql_data:
    driver: local
#    external: true
  redis_data:
    driver: local
#    external: true
  discourse_data:
    driver: local
#    external: true

إذا قمت بتغليف الكود الخام الخاص بك بسطور تحتوي فقط على ```، فسيكون من الأسهل قراءته.

كخطوة أولى، أنصحك باستخدام ./launcher لبناء وتشغيل مثيل Discourse الخاص بك. إذا أردت، يمكنك استخدام ./launcher لبنائه ثم تشغيله باستخدام docker-compose (على الأقل قمت بفعل شيء مشابه لبناء وتشغيل صور Discourse مع kubernetes).

أنت تستخدم صور Bitnami، وهذه الصور غير مدعومة تمامًا من قبل مشرفي Discourse، ومن المرجح أنها ستستهلك ذاكرة وصول عشوائي (RAM) أكثر مقارنة باستخدام التثبيت القياسي الرسمي لـ Discourse

لماذا لا تزال صور Bitnami شائعة جدًا؟

أجيب على سؤالي بنفسي، يبدو أن Bitnami هو الخيار الوحيد المناسب لـ Docker، حيث تكون عمليات البناء حتمية وتركز على متغيرات البيئة. يستخدم Discourse بشكل افتراضي Docker ولكنه يعامله كأنظمة تمهيد لأنظمة البناء التقليدية التي تتطلب منك تسجيل الدخول عبر SSH والإعداد/الصيانة من خلال الطرفية.

هذا صحيح. إذا كنت تريد المساعدة هنا، فإنك تتبع التثبيت القياسي. إذا كنت تريد المساعدة من Bitnami، يمكنك استخدام صورتهم.

أعتقد أنك قد ترغب في قراءة هذا: