Если локальные входы отключены

Привет,

Я запускаю форум, я совершенно новичок в Discourse, хостинг на DO. По какой-то причине возникла проблема с SMTP или портом. Теперь хотел бы узнать, использовали ли вы вход через Google или другие социальные сети, и нет ли проблем, если в вашем форуме отключена локальная регистрация/вход.

По умолчанию SMTP заблокирован на DO. Если вы хотите использовать почту, вам понадобится найти прокси. Многие отмечали, что Mailgun хорошо работает с Discourse в облаке, но у меня нет опыта работы с ним.

Возможно, это то, что вам нужно:

Да, вы можете использовать социальный вход (Discord, Google и др.) или Discourse ID (без настройки) без SMTP. Вы потеряете дайджесты и уведомления по электронной почте, но если ваша цель — просто сообщество, это будет работать нормально, даже при более низкой вовлечённости (дайджесты созданы для повышения удержания).

Отлично, я пробовал SendGrid, Mailgun и Resend. Проблема та же — возможно, дело в портах, перепробовал все. Сейчас хочу проверить, работают ли социальные логины, и отказаться от локальной авторизации.

Вы можете отключить настройку сайта enable local logins, если хотите убрать возможность входа через локальные учётные записи. Вы также можете ознакомиться с Discourse ID.

Привет, @abeen, добро пожаловать :wave:
Я делал множество установок с самохостингом с использованием Mailgun и Resend на DigitalOcean (и других облачных серверах) — не могли бы вы предоставить больше информации о возникающей проблеме? Вы редактируете свой app.yml с соответствующими настройками? Я предполагаю, что это стандартная установка?

Для Resend:

  DISCOURSE_HOSTNAME: <forum.yourforum.etc>
  DISCOURSE_DEVELOPER_EMAILS: <your-email@emailaddress.com>
  DISCOURSE_SMTP_ADDRESS: smtp.resend.com
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: resend
  DISCOURSE_SMTP_PASSWORD: "xxxx"

Для Mailgun:

  DISCOURSE_HOSTNAME: <forum.yourforum.etc>
  DISCOURSE_DEVELOPER_EMAILS: <your-email@emailaddress.com>
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: <your.mailgun.account.email>
  DISCOURSE_SMTP_PASSWORD: "xxxx"

DO сообщает: «Сообщаем, что, помимо ранее заблокированного порта 25, с 6 марта 2025 года на droplets также заблокированы порты 465 и 587. Это сделано для того, чтобы серверы DigitalOcean не использовались для отправки спам-писем».

В панели администратора я вижу, что 30 задач по отправке писем не выполнились. Проверьте ваш файл app.yml и убедитесь, что настройки почтового сервера указаны верно. Посмотрите невыполненные задачи в Sidekiq.

Я воссоздал API сервиса Resend, изменил порт на 587, пробовал также порт 2525. Ничего не работает.

Вот мой yaml-файл:

LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: dobato.au
DISCOURSE_DEVELOPER_EMAILS: myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: «re_my password here»
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au
DISCOURSE_SMTP_DOMAIN: dobato.au
  • это, вероятно, основная проблема, вызывающая у вас трудности: вы используете фигурные кавычки. Файлы YAML их не принимают и обычно ломаются. Вам нужно использовать одинарные или двойные прямые кавычки, например 'пароль' или "пароль".
  • вы устанавливали стандартную версию на поддомене или это установка на корневом домене? Если первое, то должно быть что-то вроде forum.dobato.au или discourse.dobato.au (проверьте, что указано в вашем nameserver). Если вы не планировали установку на корневом домене, это нужно исправить.
  • эта строка излишня, удалите её.
  • хотя Resend поддерживает этот порт, и он должен работать, стандартом является 587.
  • эта строка не нужна; нет смысла заставлять почтовый клиент принудительно начинать STARTTLS — базовый Ruby-клиент (ActionMailer) использует enable_starttls_auto: true, что означает автоматическое обновление соединения до TLS, если сервер (Resend) его поддерживает. Удалите эту строку.

Ваш правильный раздел app.yml должен выглядеть так:

DISCOURSE_HOSTNAME: dobato.au # (проверьте это — возможно, значение неверно!)
DISCOURSE_DEVELOPER_EMAILS: myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: "re_actual_api_key_here" # обратите внимание на прямые кавычки!
DISCOURSE_SMTP_PORT: 587
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au

Файлы YAML очень строгие к синтаксису и отступам, поэтому важно сохранить форматирование существующего файла шаблона (см. discourse_docker/samples/standalone.yml at main · discourse/discourse_docker · GitHub)

Однако DigitalOcean заблокировал порт 587, поэтому используется 2525.

Ой, я забыл про DO, лол. :woman_facepalming:t2: Я перешёл с них довольно давно. В голове я думал о Resend и Hetzner. Так что да, используй 2525 (я теперь вспомнил, что сменил это при миграции).
edit: Я исправил свой пост. Спасибо, Jakee

В дополнение к отличным советам выше, выполнение команды rake emails:test (см. Troubleshoot email on a new Discourse install), которая сразу покажет ошибку, вероятно, поможет.

Мой сайт сейчас упал. Это новый сайт с небольшим количеством участников, не уверен, как скачать мои пользовательские страницы и данные участников. Совсем не хочу использовать SMTP.

Мне жаль, что у вас возникли такие проблемы.

Да, ваш файл yml, скорее всего, повреждён. Опубликуйте его полностью здесь (но без адресов электронной почты и паролей). На самом деле запуск не должен быть таким сложным.

Просто из любопытства: какой размер droplet вы используете в DigitalOcean?

Удалось ли вам проверить, правильно ли настроен ваш сервер имён?

Привет,

у меня конфигурация Basic / 1 vCPU / 2 ГБ ОЗУ / 50 ГБ диска

env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: dobato.au
DISCOURSE_DEVELOPER_EMAILS: ``myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: ``smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: „re_mypassword“
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au
DISCOURSE_SMTP_DOMAIN: dobato.au
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_FROM_ADDRESS: noreply@dobato.au
UNICORN_WORKERS: 4

SMTP мне не нужен. Поиск проблемы в Google с использованием некоторых команд показывает, что Nginx и Unicorn не запущены.

Пожалуйста, внимательно прочитайте мой предыдущий пост здесь. Ваш файл yml неверен.

этого должно быть достаточно для форума с небольшой нагрузкой. Есть ли у вас вообще файл подкачки? Выполните команду free -h в командной строке и опубликуйте результат здесь.

curl: (52) Пустой ответ от сервера
root@dobato:~# free -h
total used free shared buff/cache available
Mem: 1.9Gi 201Mi 1.2Gi 4.0Mi 507Mi 1.6Gi
Swap: 2.0Gi 0B 2.0Gi

Как насчёт использования Discourse на Amazon Lightsail? У них также есть Amazon SES SMTP для отправки электронной почты.

@abeen Вы заменили их на прямые кавычки?

Попробуйте использовать вместо этого:

"

У меня есть „ “, двойная кавычка

Понятно. Размещение Discourse на Lightsail с использованием SES возможно (некоторые пользователи здесь так делают). Или вы можете попробовать порт 2525, если ещё не пробовали. Но если вы хотите избежать проблем с портами, можно перейти на другого хостинг-провайдера, например Hetzner или Lightsail.

Пересборка завершается слишком быстро с этим… не знаю почему?