Запуск Discourse в виде сервиса Docker Swarm

Я пытаюсь развернуть 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 и так далее. Я вижу, что у вас их много, но не уверен, что этого достаточно.