Can Discourse ship frequent Docker images that do not need to be bootstrapped?

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

Хм… но не скажете ли вы, что это делает другие способы более сложными?

Понял! :slight_smile:

Как гуру Docker, тебе это должно быть очень легко?

Как я уже пытался объяснить за последние пару дней, с текущим предоставленным решением всё становится далеко не простым :wink:

tl;dr;
Простой образ Discourse (похожий на Bitnami) с набором переменных окружения для настройки базовых вещей (например, доступ к Redis, базе данных) был бы более чем достаточен, но по какой-то причине это абсолютно невозможно… :man_shrugging:

Я делюсь здесь концепциями, чтобы сделать именно это.

Для простого плагина, конечно, но мы не можем предполагать, что плагин будет выглядеть определённым образом — некоторым плагинам требуется дополнительная настройка, установка дополнительных gem-пакетов или зависимостей, а также внешних программ, требующих apt-get install. Это должно быть включено в пользовательский образ.

Было бы здорово увидеть это реализованным, но это нетривиальная задача.


Касательно веб-обновления: операторы Discourse также не обязаны знать CLI или Docker.

Вам просто нужно собрать свой собственный образ с помощью launcher (для этого можно использовать GitHub Actions), загрузить его в репозиторий и запустить с переменными окружения ENV. Вам всё равно потребуется выполнить миграцию базы данных, скомпилировать ассеты и загрузить их в S3. Вы можете выполнить миграцию базы данных и установить skip_post_deployment_migrations, чтобы старый контейнер продолжал работать, пока новый не запустится, а затем остановить его и выполнить оставшиеся миграции. Но это слишком сложно для того, кто не знает о Discourse гораздо больше, чем, я думаю, вы хотите знать. И есть множество вещей, которые могут пойти не так, поэтому текущее решение, которое ужасно по всем причинам, которые вы перечислили, является лучшим решением для тысяч людей, которые не знают, что такое bash.

В большинстве случаев вам нужно только выполнять ./launcher rebuild app, за исключением случаев раз в пару лет, когда требуется обновить базу данных, и тогда это нужно делать дважды. Вы просто не можете получить такой уровень простоты с docker-compose. Есть вероятность, что если бы docker-compose был пригоден для использования, когда они начинали, они могли бы использовать его вместо того, чтобы создавать свой собственный, но так сложилось, что вышло иначе.

Если вы хотите использовать образ Bitnami, вы можете это сделать, но здесь вам не смогут сильно помочь. Я уверен, что он тоже работает у многих людей.

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

Это то, о чём упоминалось ранее: Discourse, кажется, довольно прочно застрял в «старом» подходе к управлению PHP-программами и форумами :slight_smile:

Итак, подводя итог всей дискуссии (и, возможно, поместив это в первое сообщение, чтобы не повторяться до тошноты :slight_smile: ):

  1. Discourse адаптирован и ориентирован на «обычных пользователей», и вся настройка направлена на удовлетворение их потребностей.
  2. Учитывая, что Ruby (окружение) довольно своеобразен, и (1) практически невозможно предоставить достаточно универсальные официальные Docker-образы в официальном репозитории Discourse.

Верно? :slight_smile:

Я бы сказал это немного иначе

Учитывая, что официального способа установки Discourse, помимо launch-скрипта (по умолчанию), не существует, что делает launch-скрипт стандартным и по сути единственным (рекомендуемым) способом установки Discourse, можно утверждать, что исходное утверждение остаётся верным :wink:

Но это лишь семантика.

В любом случае тема звучит так:

Может ли Discourse предоставлять частые образы Docker, не требующие начальной настройки

Из всего обсуждения следует: «Нет, Discourse не может/не хочет предоставлять частые образы Docker, не требующие начальной настройки», что и требовалось доказать.

Поэтому предложение добавить комментарий прямо вверху о том, что такой образ предоставлен не будет, сэкономило бы ОГРОМНОЕ количество времени и нервов :slight_smile:

Это неверное предположение.

Мы ещё не ставили приоритетом выпуск официального образа с набором конкретных плагинов.

Это работа, которую мы рассматриваем; у нас есть множество идей, как это реализовать, но пока это просто не было приоритетом для компании.

Перевод от человека, работающего над другим проектом: «Это может произойти в будущем, а может и нет… учитывая, что это не приоритет и не включено в дорожную карту, шансы на реализацию крайне малы» :wink:

Хотя, если говорить серьёзно — такая базовая настройка с bundled набором разумных плагинов была бы супер крутой!

Спасибо за ваш вклад! <3

К сведению — я настроил возможность сборки образа Discourse на devbox и его развёртывания на сервере, что устраняет необходимость использования скрипта launcher.
Более подробное обсуждение этого вопроса доступно здесь в созданном мной pull request.

Я реализовал это так, чтобы решение было полностью совместимо с официальным Docker-настроем Discourse, поэтому вам не нужно беспокоиться о том, что этот метод устареет или перестанет работать.
Если кратко, суть в том, что я поручил Docker-образу выполнять команды инициализации при запуске (вместо скрипта launcher).

Крутой подход.

Кстати: интересный лаунчер v2 (GitHub - discourse/launcher: Discourse Launcher CLI · GitHub)!