Community supported official docker image

Awesome! I’ve bookmarked this post, and if anybody asks how to run Discourse in Kubernetes or Swarm, I’ll be sure to point them at your images :+1:. Advantage of being not-an-employee: my word doesn’t have to carry the weight of being Official™.

They, on the other hand, benefit immensely from having One Official™️ Way of deploying Discourse. CDCK is not going to take on the load of maintaining a deployment system that they themselves don’t use and is massive overkill for most self-hosters. And if they don’t maintain it, they ain’t endorsing it. Brand protection demands it.

Thanks for creating this thread @pierreozoux!

I recently reached critical appreciation for discourse and got interested in hosting a deployment. I’m currently hosting JupyterHub, GitLab and Mattermost - everything through Helm charts and would very much like to do the same with Discourse.

Some background about Helm / Kubernetes:
A Helm chart is a set of configurable Kubernetes resources, and Kubernetes resources are for example a Deployment Kubernetes resource that makes a given docker image run at all time. Installing something can end up becoming a single line command + some configuration.

I would be happy to at least review code and make some PRs to fix various things in a Helm chart for discourse if it would be developed. I’m currently a maintainer of JupyterHub’s Helm chart and have various contributions to other charts.

I think it’s actually possible / feasible to break up Discourse into a set of kube pods, but have fun sizing the resource requirements for the web and sidekiq runners :slight_smile:

If insane levels of infrastructure failure tolerance is not a business requirement for you, just use the singleton fat container, it’s going to be order of magnitude cheaper & easier for the same level of steady state service.

Всем привет!

Я представляю довольно крупное итальянское сообщество, которое использует Discourse как платформу для своего форума.
Хотя мы любим Discourse, мы также столкнулись с некоторыми трудностями при развёртывании его в Kubernetes с помощью каких-то «стандартных» процедур.

Я понимаю боль разработчиков :slight_smile: Я много лет работал в Open Networking Foundation, и одной из самых больших задач было перенести CORD — одну из наших ключевых платформ — с установок на основе скриптов на Dockerfile, docker-compose и образы Docker, размещённые в DockerHub, а также helm-чарты. Хотя при этом существует определённая осторожность, и универсального решения, подходящего для всех случаев, на самом деле не существует, я могу сказать, что мы с самого первого развёртывания увидели его преимущества.

Обычно самый важный шаг — это изменить мышление и позволить существующим инструментам делать то, что у них получается лучше всего :slight_smile: У Docker есть процедуры установки, которые являются стандартными, простыми и уже хорошо документированными. Скрипты же — это что-то кастомное, что часто требует доработок и поддержки.
Кроме того, нет никаких причин, по которым вы не могли бы использовать оригинальные образы Docker и helm-чарты в качестве зависимостей Discourse (например, unicorn, postgres, redis и т.д.).

Я предлагаю сначала решить базовые задачи (то есть создать Dockerfile, docker-compose и настроить автоматическую сборку в DockerHub для каждого компонента). Как только это будет сделано (с соответствующими изменениями в программном обеспечении и документации), разработка helm-чартов станет самой простой задачей.

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

В ходе своего небольшого исследования я также заметил, что Bitnami (очень известная компания в сфере Docker) выпустила несколько образов (https://github.com/bitnami/bitnami-docker-discourse#how-to-use-this-image). Я задавался вопросом, является ли это их отдельной работой или чем-то, что было согласовано с вами. Это может стать отличной отправной точкой. Если партнёрства с ними не было, я бы предложил рассмотреть этот вариант как возможное направление. Не уверен, сделают ли они это бесплатно, но это возможно.
К сведению: я открыл задачу в их репозитории, чтобы узнать больше о проделанной работе (https://github.com/bitnami/bitnami-docker-discourse/issues/132).

Пожалуйста, поделитесь своими мыслями и дайте знать, если я могу чем-то помочь.

Привет, @Luca_Prete, вы посмотрели работу @pierreozoux выше и ответ команды?

Большая часть работы по упаковке в Docker сводится к повторению того, что pups делает в фоновом режиме для launcher, включая настройку некоторых пользовательских конфигураций для Postgres, Sidekiq и т. д. @unteem решил свою проблему и последовал тому, что pups делал для более ранних версий Discourse. Поддерживать актуальность образа Docker в соответствии с официальным релизом — задача не из легких. Было бы интересно разобрать весь процесс и пройти этот путь, используя стандартный подход Docker. Если найдётся рабочий путь к использованию стандартной настройки, я думаю, многие здесь будут очень рады.

@hellekin спасибо.

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

Конкретный путь действительно зависит от некоторых деталей платформы.

То, что я вижу как возможное решение в вашем случае, — это начать понимать, как стандартные образы (Postgres, Redis и т. д.) будут работать с Discourse без специфических кастомизаций.
Причина, по которой я считаю это важным, заключается в том, что это даёт возможность полагаться — в любом месте, где вы устанавливаете Discourse — на внешние стандартные сервисы (которые могут быть установлены на физическом оборудовании, на виртуальной машине, в контейнерах, в k8s в виде зависимостей чартов и т. д.).
Каждый из этих сервисов обычно позволяет использовать некоторые скрипты запуска для создания базы данных и так далее… это не должно быть слишком сложно.

Затем я создал бы правильный Dockerfile (который автоматически также становится руководством по быстрому началу работы для пользователей, желающих установить Discourse без Docker).

Далее идёт docker-compose.yaml (это практически то же самое, что Bitnami размещает на своём GitHub).

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

И наконец, самое интересное — Kubernetes (несколько yaml-файлов, возможно, упакованных в виде helm-чартов), которые будут опубликованы в официальном стабильном репозитории или, альтернативно, — по крайней мере на начальном этапе процесса — в вашем собственном хостинговом репозитории.

@unteem не одинок :slight_smile: Мы работаем вместе.
Мы делаем это, потому что хостим несколько экземпляров Discourse.
Мы начали с Docker, а теперь работаем на Kubernetes.

Мы перенесли нашу работу на https://lab.libreho.st/, что является результатом усилий сообщества (hellekin тоже участвует). В ближайшие недели/месяцы мы хотим больше рассказывать о нашей работе.

Поддерживать это — настоящая боль… Я буквально потратил часы, если не дни, на этот коммит, который исправил мои сборки:

В любом случае, мы сейчас работаем над операторами для Kubernetes. Мы начали с Nextcloud, затем RocketChat, а следующим, вероятно, будет Discourse.

Тем временем вы можете найти код используемых нами Docker-образов здесь:

Сами образы находятся здесь:

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

У нас есть helm-чарт:
https://git.indie.host/indiehost/helm-discourse
Но, как вы видите, он не поддерживается активно.

Что я могу сказать: это работает у нас :slight_smile: Если вы хотите разделить это путешествие и чувствуете себя авантюристом, присоединяйтесь к нам :slight_smile: Нам весело :slight_smile:

Мы не предоставляем поддержку, у нас мало времени на это, но если вы сделаете PR, он будет приветствоваться. Я очень хочу, чтобы мы могли выполнять эту работу под официальным зонтиком Discourse, это было бы намного проще.
Но в конечном итоге я начинаю понимать команду Discourse. У них есть только один инструмент, который они поддерживают для сообщества, и он работает хорошо. Они предоставляют отличную поддержку не очень техническим пользователям, и это действительно здорово. Если возникает проблема, git pull && rebuild решает 99% проблем :slight_smile: Я понимаю, что поддержка другого инструмента — это большой риск, и если она не поддерживается или выполнена плохо, это может навредить проекту. Еще раз огромное спасибо команде Discourse за тяжелую работу :slight_smile:
Моя единственная проблема в том, что, вероятно, многие разрабатывают собственные решения, и единственный способ сотрудничать — это делать это здесь, upstream.

На самом деле один из способов сделать это — создать другой образ в discourse_docker, который назывался бы super_base? без runit/anacron/nginx/postgres, и базовый образ был бы основан на super_base, и мы могли бы использовать его для нашего развертывания в k8s? Думаю, это сработает :slight_smile:

Что вы думаете?

Discourse использует Kubernetes? Мне любопытно :slight_smile:

@pierreozoux спасибо за ответ!

Я считаю, что вы отлично справились, и с радостью готов внести свой вклад, насколько это возможно :slight_smile:

У меня также появилось больше времени, чтобы внимательнее изучить работу, проделанную командой Bitnami. Хорошая новость в том, что они уже разделили контейнеры. Удалось ли вам посмотреть на это? Что вы думаете?

Вот файлы Docker, используемые как для веб-контейнера, так и для контейнера Sidekiq: bitnami/discourse Dockerfile

Я не могу вставить ссылку на docker-compose, но вы легко найдёте её, перейдя по ссылке, которую я добавил в своём предыдущем сообщении в этой теме.

В том же репозитории также есть файл конфигурации Kubernetes в формате YAML: https://github.com/bitnami/bitnami-docker-discourse/blob/master/test.yaml

Начиная с Docker-образа, видите ли вы какие-либо проблемы? Достаточно ли обновлено программное обеспечение?

Кажется, не хватает helm-чарта, который должен быть создан в соответствии с лучшими практиками, принятыми для стабильных чартов.

Что вы думаете? Стоит ли объединить усилия и интегрировать ваши файлы в их работу?

Это в точности то же изменение, что и сделано в DEV: Bump uglifyjs · discourse/discourse_docker@c87937d · GitHub. Если вы форкаете образ, возможно, стоит рассмотреть возможность одновременного включения изменений из этого репозитория в свой форк.

Это во многом и есть наша мотивация для сохранения статус-кво.

Добавление чего-либо, что мы не используем внутренне, означает лишь то, что это быстро сломается и будет устаревшим, причиняя ещё больше проблем всем, кто от этого зависел. У нас уже было несколько таких примеров в проекте.

Если это то, над чем хочет работать сообщество, это нормально.

Нет, мы не используем k8s.

Дело лишь в том, что нужно постоянно отслеживать множество зависимостей.

Люди довольно регулярно пишут здесь, что они не работают так или иначе.

То, что я делаю, — это использование launcher для сборки образов и их отправки в репозиторий, который затем разворачивается через Kubernetes. У меня также есть скрипты для обновлений без простоя. Для клиентов, которым я это настроил, это чрезмерно. Я размещаю 3 миллиона просмотров страниц в месяц на стандартном оборудовании с (в основном) стандартной настройкой (просто используется traefik для обратного проксирования нескольких сайтов).

Я рассматривал возможность публикации набора образов с различными наборами плагинов, но проблема в том, что если с ними возникнут какие-либо проблемы, здесь нельзя будет получить поддержку.

Есть ли какие-либо изменения по этой теме? Существует или планируется официальный образ Discourse, который можно легко использовать для развёртывания в Kubernetes?

Не будет. Решение, которое я использую, заключается в том, чтобы загрузить новый образ, отправить его в репозиторий, затем запустить его и выполнить миграции после обновления, когда новые поды запустятся.

Есть какие-то обновления? До сих пор нет официальной Helm-диаграммы для установки Discourse в Kubernetes?

Нет, и это также не входит в наш план разработки.

Для контекста см. Can Discourse ship frequent Docker images that do not need to be bootstrapped?.

Я уже задумывался о создании подобного предложения (и оно не было бы «официальным»), но мне нужно было убедиться, что это не создаст дополнительных проблем с поддержкой здесь, и что это окупит время, которое я потратил на его поддержку и обслуживание. У меня мало идей, как решить обе эти проблемы, но если у вас есть бюджет, не стесняйтесь связаться со мной.

Мы успешно размещаем Discourse на Helm с собственным образом Docker уже несколько месяцев.
(Ранее мы также использовали собственный образ, но с помощью Compose)

Поддержка S3/MinIO также реализована.

https://forge.liiib.re/indiehost/tech/infrastructure/charts/-/tree/master/discourse

(Хотя документации определённо не хватает, и нет открытости для регистрации новых аккаунтов и вклада. Если будет спрос — здесь или в личных сообщениях — мы можем это открыть :slight_smile: )

@pfaffman, если вы найдёте заинтересованных людей, готовых поддержать вас по времени, мы будем рады сотрудничеству!

Мы размещаем Discourse для нескольких небольших сообществ, в основном во Франции, в рамках общего движения.
(Например, https://forum.chatons.org/ — крупнейшее из тех, что мы хостим pro bono)