Сколько оперативной памяти нужно для хостинга Discourse вместе с другими сервисами?

На форумах Discourse я читал, что 1 ГБ и максимум 2 ГБ оперативной памяти должно быть достаточно. Однако при этих настройках мой сайт работает не плавно. Когда я запускаю свой файл docker-compose с 4 ГБ памяти, он работает на уровне 90–95%, что уже значительно лучше. В файле docker-compose также есть статический HTML-сайт, который я создал, и nginx-прокси. Не могли бы вы подсказать, есть ли какие-то хитрости или настройки в Discourse, которые помогут ему работать плавнее при меньшем объёме оперативной памяти?

Вам потребуется настроить количество воркеров и буфер базы данных. Таким образом, вам нужно будет изменить следующие параметры:

  • db_shared_buffers
  • UNICORN_WORKERS

Здесь вы можете увидеть оценку использования памяти на одного воркера Unicorn:

Discourse может работать с 512 МБ оперативной памяти, хотя это не обеспечит комфортного опыта, но это возможно. Ваша проблема заключается в том, что Discourse анализирует ресурсы сервера (всего узла) и планирует использование ресурсов так, чтобы максимально задействовать доступные возможности, поскольку 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 и, скорее всего, потребляют больше оперативной памяти, чем официальная стандартная установка Discourse (Discourse official Standard Installation).

Почему образы Bitnami всё ещё так популярны?

Отвечая на свой собственный вопрос, похоже, что Bitnami — это единственный идиоматический вариант для Docker, где сборки детерминированы и ориентированы на переменные окружения. Discourse по умолчанию использует Docker, но относится к нему скорее как к средству запуска для традиционных систем сборки, которые требуют входа по SSH и настройки/поддержки через терминал.

Верно. Если вы хотите получить помощь здесь, следуйте стандартной процедуре установки. Если же вам нужна поддержка от Bitnami, вы можете использовать их образ.

Думаю, вам стоит прочитать это: