Move from standalone container to separate web and data containers

Я пытаюсь реализовать раздельные контейнеры, но с удаленной базой данных. Я следовал приведенным выше инструкциям и гайду по настройке удаленной PostgreSQL-базы данных. Настройка работает, но меня беспокоит, почему есть две одинаковые ссылки (в web_only и data) на одну и ту же базу данных. Это заставляет меня думать, что я что-то делаю не так, и контейнер web_only вообще не использует контейнер data.

Правильно ли я это делаю?

Вот моя конфигурация.

В файле web_only.yml я добавил:

  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: xxx.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060
  DISCOURSE_REDIS_HOST: data

в файле data.yml

Я удалил postgres.template.yml

templates:
#  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"

Также я добавил следующее:

env:
  # убедитесь, что локаль существует в контейнере, возможно, её нужно установить
  LANG: en_US.UTF-8
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060

Если вы используете удаленную базу данных, вам не нужно создавать контейнер данных, содержащий базу данных. Обратите внимание, что вам потребуются как PostgreSQL, так и Redis (поэтому, возможно, вам понадобится контейнер данных для них).

1 лайк

но у меня запускается только 1 контейнер без каких-либо ошибок

Я не совсем понимаю, что вы вкладываете в понятие «два контейнера», но если вы предполагаете, что два контейнера означают два отдельных экземпляра Discourse, то вы смотрите не в ту сторону.

Эта статья поможет вам настроить отдельный контейнер приложения и базы данных, что полезно для продвинутых пользователей, ищущих гибкость.

Если вы хотите установить/разместить два сайта Discourse на одной машине, возможно, стоит посмотреть на Multisite для Discourse:
Multisite configuration with Docker

1 лайк

Под контейнером я имею в виду, что при вводе команды на хост-машине вы увидите два запущенных контейнера:

docker ps

Во-вторых, в команде для этих двух контейнеров я не нашёл, где установить доменное имя.

Итак, какой контейнер был запущен? Если это был app, то нет — вы используете старую версию discourse-setup.

Перед продолжением выполните git pull, чтобы убедиться, что у вас последняя версия discourse-setup.

Если у вас запущены контейнеры data или web-only, проверьте, что помешало запуску другого. Обычно контейнер web-only не запускается, потому что на портах 80/443 уже запущен другой процесс (веб-сервер).

Да, приложение.
О нет, я сегодня клонировал исходный код с GitHub.

Я лично это не пробовал, но раз @pfaffman — гений, который это создал, возможно, он сможет помочь.

Посмотрев код discourse-setup на GitHub, я не вижу ничего очевидного, что могло бы помешать его работе.

На какой операционной системе запущен ваш сервер?

Сервер Ubuntu
Я успешно запустил автономный контейнер.
Сейчас я пробую этот метод: Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache

Вы пытаетесь реализовать мультисайт или мультиконтейнер?

Как я уже говорил, я запускал отдельный форум в течение месяца. Когда я захотел запустить новый, были опробованы несколько способов:

  1. Я хотел запустить отдельный контейнер на том же сервере — не получилось.
  2. Мультисайтовая конфигурация в Docker с разными контейнерами для веб-сервера и базы данных, как описано здесь: Multisite configuration with Docker — не получилось.
  3. Ваш вариант с двумя контейнерами — не получилось.
  4. Эта статья: Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache — сейчас пробую, возможно, сработает.

Если вы просто хотите запустить второй автономный контейнер, вам нужно будет изменить файлы yml, чтобы использовать другую директорию и порт. Возможно, также потребуется отключить letsencrypt.

После того как всё это будет исправлено, я хочу написать несколько уроков для начинающих.

1 лайк

Просто для информации: если вы хотите провести тестирование производительности, не делайте этого на продакшн-машине. Лучше запустите отдельный VPS и используйте его для тестов.

Попытка запустить два отдельных экземпляра Discourse на одной машине может привести к серьёзным сбоям в установке, а это нежелательно.

Эта команда создаст отдельные контейнеры данных и веб-сервера только в том случае, если на момент её выполнения отсутствует файл app.yml. Она не создаст два веб-контейнера.

1 лайк

Прежде чем я запущу эту команду, кажется, что app.yml уже существует.

Думаю, это крайне важно. Стоит ли добавить это в первое сообщение и, возможно, также на GitHub?

Думаю, мне следовало оставить эту функцию без документации. И, на самом деле, переход к конфигурации с двумя контейнерами не приносит никакой пользы, так что, вероятно, она вообще не должна быть здесь.

1 лайк

Может, создать отдельный канал howto?

Он не обязательно должен быть очень подробным, но может оказаться очень полезным для тех, кто хочет начать свои первые приключения в продвинутом использовании Discourse?

2 лайка

Возможно, так и есть. Это большая помощь, и, как и discourse-setup, она предназначена для очень конкретной цели — стандартной новой установки. Мои скрипты установки используют её уже довольно давно. Это может быть простым способом перейти к двухконтейнерной архитектуре, если вы готовы сделать резервную копию старого контейнера и восстановить её на новом.

Мое беспокойство всегда заключалось в том, что это будет сложно поддерживать, так как пользователи, которые не понимают, как это работает, будут пытаться использовать этот метод, а затем не смогут применять никакую документацию, поскольку команда «rebuild app» перестанет работать. Кроме того, трудно определить, когда нужно пересобрать контейнер базы данных. Недавно у меня произошла неудача при пересборке, потому что требовалась версия Redis 4.0, а у меня была 3.0. Затем также потребовалось обновить PostgreSQL, что влекло за собой выполнение последовательности шагов. Нужно было знать, когда пересобирать контейнер данных, а когда — веб-контейнер, а также как изменить путь от рекомендованного. Всё прошло гладко — для меня, но попытка объяснить это кому-то, кто не знает, что такое bash, на форуме стала бы утомительной для всех участников.

Я считаю, что, возможно, лучше сохранить высокий порог входа для создания нестандартных установок, чтобы защитить людей от самих себя.

3 лайка