Centminmod + Discourse

Здравствуйте.

Я бы очень хотел попробовать платформу Discourse на своём стеке LEMP от CentminMod (https://centminmod.com/).

Мне удалось успешно установить Docker:

docker -v
Docker version 20.10.17, build 100c701

Я следовал руководству по установке (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), внеся несколько незначительных изменений — у меня нет облачного сервера в строгом смысле, это управляемый мной экземпляр.

Также мне пришлось вручную отредактировать файл /containers/app.yml.

После этого при пересборке приложения через команду ./launcher rebuild app ошибок не возникает.

Однако я не могу подключиться к экземпляру Docker. Запрос перенаправляется на страницу приветствия моего виртуального хоста.

Что мне нужно сделать, чтобы настроить обратный прокси-сервер для конфигурации Nginx, направляя трафик в Docker? Или есть ли у кого-нибудь готовое руководство по установке Discourse на CentminMod?

Спасибо!

Энди

Полагаю, это ближе всего к тому, что вы ищете: Run other websites on the same machine as Discourse.

Мне удалось установить работающий Discourse.

Установите Docker — здесь не рассматривается.
Установите Discourse —

git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

Настройте app.yaml в /var/discourse/containers

Отредактируйте app.yml, чтобы убрать порты 80 и 443.

## После внесения изменений в этот файл вы ОБЯЗАНЫ выполнить пересборку
## /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.socketed.template.yml"
  #- "templates/web.ratelimited.template.yml"

## Какие TCP/IP порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:

  #- "25654:80"   # http
  #- "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## Будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, либо вы можете переопределить.
  db_shared_buffers: "128MB"
 
  ## Может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  #db_work_mem: "40MB"
 
  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от объема памяти и количества ядер CPU.
  ## Будет установлено автоматически при загрузке на основе обнаруженных процессоров, либо вы можете переопределить.
  UNICORN_WORKERS: 2

  ## TODO: Доменное имя, на которое будет отвечать этот экземпляр Discourse.
  ## Рассматривайте это как значение, которое преобразуется в server_name в конфигурации Nginx.
  DISCOURSE_HOSTNAME: 'your.site.com'
 
  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
  ## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config").
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
  ## при первой регистрации, например 'user1@example.com,user2@example.com'
  ## Этот email будет использоваться для входа в экземпляр Discourse в первый раз.
  DISCOURSE_DEVELOPER_EMAILS: 'email@your.com'

  ## TODO: SMTP-сервер для проверки новых аккаунтов и отправки уведомлений.
  DISCOURSE_SMTP_ADDRESS: smtp.your.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: email@your.com
  DISCOURSE_SMTP_PASSWORD: addpasswordhere  # ВНИМАНИЕ: символ '#' в пароле может вызвать проблемы!
  ## Если бы это был JSON-объект, подобных проблем с паролем бы не возникло.

  ## Адрес CDN для этого экземпляра Discourse (настроен на загрузку).
  ## см. https://meta.discourse.org/t/14857 для деталей.
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## Контейнер 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 "Начало пользовательских команд"
  ## Если вы хотите установить адрес email 'From' для вашей первой регистрации, раскомментируйте и измените:
  ## После получения первого email регистрации закомментируйте строку обратно. Выполняется только один раз.
  - exec: rails r "SiteSetting.notification_email='noreply@khophi.co'"
  - exec: echo "Конец пользовательских команд"

Найдите /usr/local/nginx/conf/conf.d
Отредактируйте соответствующий файл конфигурации.

Добавьте

proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;

в блок location /.

Закомментируйте строку include /usr/local/nginx/conf/503include-only.conf, поставив # в начале.

Также

#include /usr/local/nginx/conf/pre-staticfiles-local-yourdomain.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;