Новая установка не удаётся на Ubuntu 20.04.3 LTS

Новая установка на новый экземпляр EC2 со стандартной настройкой не удаётся. Запустил экземпляр EC2 в AWS на базе Ubuntu 20.04.3, выполнил все последние обновления Ubuntu. Запустил простую стандартную установку, описанную здесь.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

./discourse-setup

Единственная особенность: при запуске настройки подключение к серверу по HTTP(S) не удалось — я забыл открыть два входящих порта в AWS. Поэтому я вручную настроил файл app.yml и выполнил ./launcher rebuild app после открытия портов в группе безопасности AWS.

Браузер не может подключиться, а в лог production записано следующее:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'

Я запустил новый экземпляр EC2, потому что использовал перенастроенный сервер также на Ubuntu 20.04.3, где возникла точно такая же проблема при установке Discourse. В логе production те же ошибки. Поэтому я подумал: начну с нуля и сделаю это просто.

Вы пробовали перезагрузить устройство?

Да, я запускал и останавливал экземпляр, а также перезагружал его через командную строку. Это не помогло.

Хорошо, теперь я почти убеждён, что проблема в установщике Discourse при использовании Ubuntu 20.04.3 с последними обновлениями. Я только что снова запустил установщик, и на этот раз я убедился, что порты открыты, поэтому мне не пришлось вручную настраивать файл app.yml (исключив человеческий фактор). Всё казалось, что прошло гладко: установщик нашёл домен и всё остальное. Однако… сайта нет. В производственном логе показано:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'

Это слишком просто, чтобы я мог что-то напортачить в этот раз, я лишь запустил скрипты.

У вас установлен другой Redis?

Сколько у вас оперативной памяти? Был ли создан файл подкачки?

У меня ничего не установлено. Это новый экземпляр EC2 t2.small, поэтому у него 2 ГБ оперативной памяти. Мне нужно посмотреть стандартный своп, который он создаёт.

Вот информация о RAM и swap. Это чистый только что запущенный экземпляр AWS со всеми стандартными обновлениями Ubuntu. Это экземпляр EC2 типа t2.small. Ничего не менялось, не добавлялось, не настраивалось и не модифицировалось. Единственные команды, использованные для обновления перед установкой, были базовыми: sudo apt update и sudo apt upgrade. В третий раз я попытался выполнить чистую установку Discourse на двух отдельных экземплярах с той же ОС (Ubuntu 20.04.3). Именно поэтому я считаю, что проблема может быть в установщике и последней версии.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       973Mi       131Mi        36Mi       875Mi       855Mi
Swap:         2.0Gi       0.0Ki       2.0Gi

Место на диске, если это имеет значение:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        39G  7.8G   31G  20% /

Я только что выполнил установку на новом сервере Digital Ocean, и всё прошло без проблем. Проблема не в установщике.

Мое предположение, хотя и звучит странно, что у вас возникла ошибка Redis, заключается в том, что вы запускали установщик слишком много раз и достигли лимита запросов Let’s Encrypt. Это и есть настоящая причина проблемы.

Попробуйте снова, используя другое доменное имя (например, forum2.example.com).

Бинго! Вы снова правы, всё сработало.

Хорошо, я много перестраиваю, потому что тестирую перенос форума со старого сервера.

Как же мне обойти эту проблему? Я даже не использую Let’s Encrypt. После успешной установки я обновил файл app.yml, изменив домен, и убедился, что шаблон Let’s Encrypt закомментирован в app.yml, затем пересобрал, но это не помогло, и я получаю ту же ошибку: сбой Redis. Неужели я застрял, потому что вызов Let’s Encrypt встроен в установщик?

Если вы не используете обратный прокси для обеспечения HTTPS, то так делать нельзя. HTTPS обязателен. И если вы удаляете Lets Encrypt, то также необходимо удалить шаблон HTTPS (как бы он ни назывался).

Я не совсем понимаю, почему у вас возникает ошибка Redis; возможно, вы закомментировали Redis, когда закомментировали Lets Encrypt? Это моё лучшее предположение.

Вы можете попробовать следовать инструкции по адресу Set up Let’s Encrypt with multiple domains / redirects, чтобы добавить второе доменное имя, или подождать неделю.

Что ж, если вы прочитаете всю ветку, то увидите, что установка была простой на новом экземпляре, поэтому я не мог ничего закомментировать, так как именно установщик, основываясь на вопросах, создаёт app.yml. Таким образом, сбой Redis напрямую связан с лимитом запросов Let’s Encrypt. Надеюсь, это поможет команде разработчиков.

Я использую прокси, а точнее Cloudflare, для предоставления SSL-сертификата и подключения/доставки только HTTPS.

Я протестировал закомментирование шаблона HTTPS — «templates/web.ssl.template.yml» и выполнил launcher rebuild app, разумеется, при этом шаблон Let’s Encrypt также был закомментирован, но произошло то же самое. Ошибка Redis. Так что, полагаю, я в тупике, верно? Какое ужасное решение установщика — не предусмотреть способ обойти вызовы Let’s Encrypt. Если вы не можете предложить мне что-то ещё для проверки, мне придётся запастись терпением. Я очень ценю всю вашу помощь. Я остаюсь смиренно расстроенным.

Это значительно усложняет задачу, и у вас возникнут дополнительные проблемы в будущем, если вы не тщательно изучите, как использовать Cloudflare, не нарушая работу Discourse.