Новая установка на новый экземпляр 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'
Это слишком просто, чтобы я мог что-то напортачить в этот раз, я лишь запустил скрипты.
У меня ничего не установлено. Это новый экземпляр 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? Это моё лучшее предположение.
Что ж, если вы прочитаете всю ветку, то увидите, что установка была простой на новом экземпляре, поэтому я не мог ничего закомментировать, так как именно установщик, основываясь на вопросах, создаёт 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.