Настройка SMTP в контейнере Docker

Когда я развертываю Discourse с помощью Helm-чартов

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-release bitnami/discourse

всё работает как задумано, но я не могу изменить конфигурацию SMTP-почты в Docker-контейнере.

При попытке повторить это я захожу в контейнер и выполняю

cd /opt/bitnami/discourse/config

в этой директории я нахожу файл discourse.conf, но не могу его изменить, так как, например, система сообщает, что vi недоступен.

Есть ли у вас какие-либо предложения, что можно сделать?

Вы можете задать вопрос на их форуме. Но, к сожалению, они его закрыли.

Или вы можете выполнить стандартную установку и получить помощь здесь.

Возможно, вы сможете установить переменные окружения. Вы можете посмотреть примеры.

Привет @pfaffman, большое спасибо за ваш вклад.

Теперь я знаю, как передать переменные окружения в helm-чарт Bitnami.

Учитывая учетные данные SMTP моего провайдера для транзакционных писем Sendinblue:

подскажите, пожалуйста, как должны выглядеть переменные окружения, которые нужно передать в контейнер Discourse?

Если вы пытаетесь использовать обычный аккаунт Gmail для отправки писем, это нарушает Условия использования (TOS) и не сработает (по нескольким другим причинам).

Пример переменных окружения для SMTP представлен по ссылке:

Привет, @pfaffman @Falco

Большое спасибо за ваши комментарии.

Вот как выглядят мои переменные окружения:

discourse:
  extraEnvVars:
    - name: DISCOURSE_SMTP_ADDRESS
      value: "smtp-relay.sendinblue.com"
    - name: DISCOURSE_SMTP_PORT
      value: "587"
    - name: DISCOURSE_NOTIFICATION_EMAIL
      value: "no-reply@my-domain.com"
    - name: DISCOURSE_SMTP_USER_NAME
      value: "my-email@googlemail.com"
    - name: DISCOURSE_SMTP_PASSWORD
      value: "my-pw"
    - name: DISCOURSE_SMTP_DOMAIN
      value: "my-domain.com"

После этого контейнер запустился. Я попытался отправить тестовое письмо на свой Gmail-аккаунт из панели администратора. Вот что я получил:

Пока что это не работает.

Вот логи контейнера Discourse:

Processing by Admin::UsersController#show as JSON
  Parameters: {"id"=>"1"}
Completed 200 OK in 1978ms (Views: 0.6ms | ActiveRecord: 0.0ms | Allocations: 195416)
Started GET "/groups/search.json" for 10.0.0.50 at 2022-08-10 11:55:05 +0000
Processing by GroupsController#search as JSON
Completed 200 OK in 1189ms (Views: 0.5ms | ActiveRecord: 0.0ms | Allocations: 133325)
Started GET "/admin/email.json" for 10.0.0.50 at 2022-08-10 11:55:17 +0000
Processing by Admin::EmailController#index as JSON
Completed 200 OK in 23ms (Views: 1.2ms | ActiveRecord: 0.0ms | Allocations: 864)
Started POST "/admin/email/test" for 10.0.0.50 at 2022-08-10 11:55:20 +0000
Processing by Admin::EmailController#test as */*
  Parameters: {"email_address"=>"test@gmail.com"}
Completed 422 Unprocessable Entity in 20ms (Views: 1.1ms | ActiveRecord: 0.0ms | Allocations: 2037)
Started GET "/about.json" for 10.0.0.47 at 2022-08-10 11:55:46 +0000
Processing by AboutController#index as JSON
Completed 200 OK in 67ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 9503)
Started GET "/site/basic-info.json" for 10.0.0.47 at 2022-08-10 11:55:46 +0000
Processing by SiteController#basic_info as JSON
Completed 200 OK in 254ms (Views: 0.5ms | ActiveRecord: 0.0ms | Allocations: 33103)
Started GET "/site/basic-info.json" for 10.0.0.47 at 2022-08-10 11:55:47 +0000
Processing by SiteController#basic_info as JSON
Completed 200 OK in 80ms (Views: 0.8ms | ActiveRecord: 0.0ms | Allocations: 4260)
```\n
Подскажите, пожалуйста, что я могу сделать иначе?

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

message = TestMailer.send_test("test@gmail.com")
Email::Sender.new(message, :test_message).send

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

Вот что получается с первой строки

bash: синтаксическая ошибка около неожиданного токена `('

О, сначала нужно зайти в консоль Rails. Перейдите в директорию Discourse и введите rails c.

Вот что я получаю:

root@discourse-69c7f5475c-h9qf5:/opt/bitnami/discourse# rails c
bash: rails: команда не найдена
root@discourse-69c7f5475c-h9qf5:/opt/bitnami/discourse# ls
Brewfile         Gemfile.lock  adminjs  config.ru                  docs                 lefthook.yml  package.json             plugins  test            yarn.lock
CONTRIBUTING.md  LICENSE.txt   app      d                          images               lib           passenger.3000.pid.lock  public   tmp
COPYRIGHT.md     README.md     bin      db                         install-imagemagick  licenses      passenger.8080.pid       script   translator.yml
Gemfile          Rakefile      config   discourse.sublime-project  jsapp                log           passenger.8080.pid.lock  spec     vendor

Хорошо, я сейчас запускал:

RAILS_ENV=production bundle exec rails c

irb(main):002:0> message = TestMailer.send_test("test@gmail.com")
Traceback (most recent call last):
        2: from app/mailers/test_mailer.rb:7:in `send_test'
        1: from lib/email/build_email_helper.rb:8:in `build_email'
ArgumentError (:arguments expected to be an Array of individual string args)

Также вот это не работает:

root@discourse-69c7f5475c-h9qf5:/opt/bitnami/discourse# RAILS_ENV=production bundle exec rails c message = TestMailer.send_test("test@gmail.com")
bash: syntax error near unexpected token `('

Я что-то делаю не так?

Странно, у меня на установке это работает отлично:

[5] pry(main)> message = TestMailer.send_test("test@gmail.com")
  TranslationOverride Exists? (0.8ms)  SELECT 1 AS one FROM "translation_overrides" WHERE "translation_overrides"."locale" = 'en' AND "translation_overrides"."translation_key" = 'test_mailer.subject_template' LIMIT 1
   (0.2ms)  SELECT "translation_overrides"."translation_key", "translation_overrides"."value" FROM "translation_overrides" WHERE "translation_overrides"."locale" = 'en'
TestMailer#send_test: processed outbound mail in 259.9ms
=> #<Mail::Message:212740, Multipart: false, Headers: <From: "Discourse" <noreply@unconfigured.discourse.org>>, <Reply-To: "Discourse" <noreply@unconfigured.discourse.org>>, <To: test@gmail.com>, <Subject: [Discourse] Email Deliverability Test>, <Mime-Version: 1.0>, <Content-Type: text/plain>, <X-Auto-Response-Suppress: All>, <Auto-Submitted: auto-generated>>

Так как вы используете unsupported-install, собранный Bitnami, неудивительно, что в нём возникают скрытые проблемы. Мы не поддерживаем такие установки, поэтому вам следует обратиться в их службу поддержки по адресу Issues · bitnami/charts · GitHub.

Привет, @Falco, большое спасибо за ответ.

Что вы имеете в виду под неподдерживаемыми установками? Я с радостью выберу более поддерживаемые варианты установки. :slight_smile:

Могу ли я всё ещё выполнить все задачи с помощью helm-чарта?

Нет, нельзя. Поддерживается только официальная установка. См. Может ли Discourse выпускать частые образы Docker, не требующие начальной настройки?.

На прошлой неделе я помогал кому-то с установкой в K8s. Мне и нескольким талантливым инженерам потребовалось более 6 часов (возможно, даже 10, если не считать время, которое они потратили без меня), чтобы запустить всё с использованием их инструментов.

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