Как установить Discourse локально?

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

На GitHub есть эта инструкция — она требует наличия SMTP-сервера и домена.

Я также видел другой гайд, который описывает установку стека непосредственно на хосте. Я бы предпочел полагаться на Docker, чтобы настроить все зависимости :slight_smile:
Меня также смутило, что в первой инструкции делается большой акцент на необходимости SMTP-сервера и DNS. Во второй об этом вообще не упоминается.

Мне казалось, что раз всё упаковано в Docker, я смогу просто запустить Docker Compose, чтобы поднять контейнеры с Discourse и базой данных (как я понимаю, это PostgreSQL) (+ возможно, ещё какие-то контейнеры, например, для кэширования, если Discourse это нужно). Затем, в продакшене, я, вероятно, развернул бы это на Kubernetes (как я читал в одной из тем, это не так просто).

Не упускаю ли я что-то?

а также без использования Docker (на случай интереса или если вышеуказанный вариант покажется вам слишком медленным):

Вы хотите установку для разработки или для производства? Если последнее, то ознакомьтесь с официальной стандартной установкой Discourse. Запуск в среде k8s возможен, но это непростая задача, так как для сборки контейнера необходимо использовать ./launcher. Кроме того, полное обновление без простоя требует нескольких шагов, которые не очевидны с первого взгляда. Если вы хотите упростить процесс, просто создайте виртуальную машину (немного проще, если она работает под управлением Ubuntu или Debian).

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

@merefield Спасибо за ссылку на Docker. Это работает и похоже на то, как я представлял процесс. Хотя немного странно, что всё упаковано в один контейнер. И да, это действительно медленно.

Меня удивило, что когда я делаю git clone репозитория Discourse и перехожу в директорию cd discourse, мой shell начинает работать очень медленно — впервые такое вижу :slight_smile:. В этом репозитории должно быть много файлов или что-то в этом роде, хотя я не понимаю, почему это влияет на работу shell.

@pfaffman Я тоже хотел бы попробовать установку, максимально близкую к продакшену, чтобы понять, как выглядит процесс. Установка на виртуальную машину меня устраивает. Однако как быть с SMTP-сервером и доменом? В руководстве очень строго сказано, что они ОБЯЗАТЕЛЬНЫ.

В принципе, это нормально, но я до конца не понимаю некоторые моменты:

  • зачем вообще нужен домен? Почему недостаточно localhost?
  • должен ли почтовый сервер указывать на тот же домен, который используется для Discourse?
  • в руководстве также упоминаются поддомены — зачем они? То есть, я разворачиваю VM в Azure, и за ней закреплён какой-то DNS (например, myvm.westeurope.cloudapp.azure.com) — разве этого домена недостаточно?

Это для продакшена, и он требует HTTPS, поэтому вам нужно доменное имя. Подойдет домен Azure.

Вам не обязательно использовать одно и то же доменное имя для почтового сервера, что и для хоста. Некоторое время назад я изменил discourse-setup, чтобы он запрашивал адрес электронной почты для уведомлений.

Поддомен означает, что нужно использовать не x.com, а y.x.com. Это довольно устоявшаяся практика.

Привет, Марчин,

У меня такая же озабоченность, как и у тебя, по поводу доменных имен для Discourse. ПОЧЕМУ LOCALHOST НЕДОСТАТОЧНО?

Я установил Discourse только для того, чтобы наша команда могла попробовать, но без DNS это не работает. Мы пытались добавить запись ресурса с localhost в файл hosts на нашем сервере для разрешения, но безуспешно.

Кто-нибудь пробовал запускать Discourse без публичного домена?

Нет. Если вы хотите выполнить установку в режиме разработки, имя хоста не требуется, но это работает только для localhost. Если вы хотите, чтобы ваша команда использовала его, вам понадобится имя хоста. Если у вас есть команда, surely у вас есть доменное имя? Просто создайте поддомен того, что использует ваша компания, заплатите 12 долларов за имя хоста или воспользуйтесь бесплатной пробной версией.

Что касается нас, то мы не хотим, чтобы обсуждения были публичными. Нам нужна внутренняя доска обсуждений. Я согласен с другими: запуск через localhost не работает, установка не удаётся, когда вы просто хотите провести тестовый запуск. Это действительно отталкивает, а использование странных скриптов вместо хорошо известного и стандартного ‘docker-compose up -d --build’ вызывает тревогу, мягко говоря… Не знаю, хочу ли я использовать этот продукт, потому что он относится к себе слишком серьёзно… или, по крайней мере, так считает тот, кто написал лаунчер.

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

Если сервер имеет доступ к внешнему миру, отключить функциональность HTTPS не так уж сложно, хотя я не занимался этим уже давно.

@pfaffman Именно так и произошло, когда в 2015 году был выпущен docker-compose. К нему отнеслись с обоснованным скептицизмом.

В моей организации нет публичных серверов. Могу ли я использовать Discourse, который, честно говоря, является лучшим решением на рынке без домена .com?

Вам нужен домен, но он не обязательно должен быть на публичном IP-адресе. Если ваш сервер имеет доступ в интернет (чтобы загрузить Discourse и его компоненты), вы можете отключить Let’s Encrypt, и всё должно работать. Думаю, вам просто нужно удалить шаблоны SSL и Let’s Encrypt из файла YAML, но в этом случае вы не сможете использовать discourse-setup. Скопируйте пример для автономного развертывания и отредактируйте его вручную.

Вам всё ещё потребуется почтовый сервер.

Жаль, что на Mac M1 это нельзя сделать легко.

У меня Discourse работает в режиме разработки на M1 Pro локально без проблем.

Он нужен по нескольким причинам. Хотя вы можете получить домен бесплатно на FreeNom, однако вокруг того, как FreeNom обрабатывает данные и информацию о пользователях, возникло много споров, поэтому будьте осторожны, если решите выбрать этот путь.