С прошлой ночи сайт работает очень плохо

Заранее приношу извинения, если это не тот раздел или не то место.

Я запускаю сайт на Discourse уже около 6 месяцев через VPS от DigitalOcean, и до недавнего времени проблем почти не возникало. На странице администратора указано, что у меня версия 2.5.0.beta4. С прошлого вечера большинство страниц сайта либо отказываются загружаться, либо загружаются невероятно долго. Например, я могу перейти на главную страницу или в /admin, но любой фактический контент (посты, графики в админке или другие вкладки) не загружается.

Я проверил системные показатели: использование процессора в простое составляет около 2%, трафик минимален, а дисковое пространство используется незначительно. Пользовательская база составляет около 10 человек, так как я только тестирую и настраиваю сайт. Учитывая это, такое поведение кажется очень странным.

Согласно app.yml, у меня установлены только два плагина: docker_manager и discourse-signatures. Я единственный администратор, поэтому могу подтвердить, что в настройках сайта давно не вносилось никаких изменений.

Первым делом я подумал перезагрузить сам сервер. Также я попытался обновить систему вручную через git pull и ./launcher rebuild app. Не уверен, на что именно обращать внимание в процессе, чтобы понять, возникают ли ошибки, но пересборка завершается успешно, и после неё сайт снова становится доступным, хотя версия остаётся 2.5.0.beta4. Аналогично, при попытке перейти на страницу /admin/update процесс в конечном итоге просто истекает по тайм-ауту.

Всё это кажется довольно странным, поскольку сайт, по сути, «работает» — я просто недостаточно хорошо разбираюсь в его устройстве, чтобы поставить диагноз. Нашёл и могу запустить утилиту discourse-doctor, но не уверен, что она делает: успешно отправляет мне email и так далее.

Единственное, что может указывать на проблему, — это письмо от форума, полученное мной прошлой ночью о ответе на пост. Когда я перехожу в категорию «Последние сообщения» (после того как она наконец загружается), не видно никаких указаний на существование этого поста, потому что в обзорной ленте «Последние» нет информации о том, что этот пользователь недавно написал. Я не могу загрузить содержимое ни одного поста, поэтому проверить это наверняка не представляется возможным. Возможно, в базе данных есть какая-то ошибка или несоответствие? Не знаю, как такое могло привести к тому, что целые части сайта перестали загружаться, или стоит ли вообще углубляться в эту тему.

Есть ли у кого-то идеи, с чего начать поиск проблемы? Большое спасибо, если вы нашли время прочитать это сообщение :slight_smile:

Привет, Tuckie! Добро пожаловать!

Похоже, вы делаете всё правильно.

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

Можете ли вы войти через SSH и проверить, не исчерпано ли место на диске?

df -h

В любом случае, проверка места на диске — это первое, что стоит сделать. Эта команда также поможет удалить устаревшие контейнеры, занимающие место:

./launcher cleanup app

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

./launcher rebuild app

Спасибо за быстрый отклик.

На диске, смонтированном в /dev/vda1 и смонтированном в /, свободно около 7,9 ГБ. Я не особо разбираюсь в том, как используются другие разделы в Ubuntu и как они могут повлиять на работу (Discourse работает в контейнере, верно?). Остальные разделы, похоже, относятся к загрузочному разделу и т. д. Всего на форуме около 30–40 постов, так как я его тестирую, поэтому, похоже, угрозы переполнения нет. Очистка позволила освободить ещё около 4 ГБ.

Что касается пересборки приложения, я запускал эту процедуру несколько раз. Во время процесса я не вижу никаких очевидных предупреждающих сообщений, но в то же время по завершении нет и сообщения об «успехе» — я не знаю, на какие строки ошибок или предупреждений обращать внимание. Процесс удаляет старый контейнер, затем запускает Docker-контейнер, и всё. Я только что запустил его ещё раз, и при подключении к сайту всё ещё сообщается, что доступны обновления, но получение информации о текущей версии (2.5.0.beta4) и версии для обновления занимает невероятно много времени.

Частично проблема в том, что из-за медленных ответов или сбоев загрузки я фактически не могу использовать инструменты администратора. Например, переход на вкладку резервных копий приводит к тому, что анимация загрузки отображается бесконечно. Из интереса я открыл консоль на вкладке резервных копий: браузер пытается загрузить файлы JavaScript, но все они не загружаются, причём по одному, медленно.

Если есть способ работать с резервными копиями через SSH, это было бы здесь очень полезно.

Похоже на проблему с сетью. Вы используете Cloudflare? (если да, отключите оранжевое облако).

У вас может быть «шумный сосед» в DigitalOcean, поэтому стоит открыть тикет в их службу поддержки.

Не имеет смысла, что вы утверждаете, будто сделали пересборку, но версия не изменилась. Я бы предположил, что вам нужно выполнить обновление PostgreSQL до версии 12. Не заметили ли вы чего-либо об этом во время пересборки?

Я работаю на DigitalOcean. Думаю, что что-то подобное может происходить, хотя я не уверен, что это вызовет проблему так стабильно и на такой долгий срок. Я думаю, что лучше описать проблему с сайтом так: обычно страница загружает шаблон или «оболочку» страницы, но загрузка любого реального контента для страниц, похоже, продолжается бесконечно.

Что касается пересборки/смены версии — возможно, происходит такая ошибка, но я не знаю хорошего способа её проанализировать, да и не совсем понимаю, что именно искать. Когда я только что снова запустил пересборку, я видел строку вроде «postgres installed», проскакивающую в выводе. Не уверен, связано ли это с работой внутри контейнера, но, например, команда ./launcher rebuild app | grep 'postgres' ничего не фильтрует, равно как и ./launcher rebuild app > output.txt && grep 'postgres' output.txt. Файл output.txt действительно содержит информацию, но, похоже, не всю? Он как минимум не заканчивается так же, как вывод в реальной консоли.

Здравствуйте, надеюсь, я не нарушаю никаких правил касательно поднятия тем и т.п., но всё же хотел бы получить помощь по этому вопросу. Кажется, что за прошлую неделю ситуация ухудшилась? Точно сказать, когда это произошло, я не могу, так как в прошлую неделю во время праздников я не работал над этим, но теперь я вообще не могу подключиться к своему сайту. Я всё ещё могу успешно пинговать IP-адрес, и тот же IP-адрес ведёт на правильный домен, так что, похоже, проблема не в настройках DNS-серверов.

При попытке доступа к сайту через Firefox теперь появляется сообщение:

На сайте https://aregames.art/ произошла ошибка нарушения сетевого протокола, которую невозможно исправить.

Страница, которую вы пытаетесь просмотреть, не может быть отображена, так как при передаче данных была обнаружена ошибка.

Я не могу найти много полезной информации в инспекторе браузера, поскольку, похоже, на GET-запрос вообще нет ответа.

После обнаружения этой новой проблемы я:

  • несколько раз запускал процесс пересборки (rebuild);
  • обновил Ubuntu до версии 20.04;
  • снова выполнил пересборку.

Сайт использовался в основном для тестирования платформы в течение примерно месяца, и я готов признать, что, вероятно, было не очень хорошей идеей не обновлять программное обеспечение своевременно. Я также готов полностью переустановить Discourse с нуля. Конечно, было бы неплохо найти способ исправить проблему, сохранив конфигурацию сайта, пользователей и сообщения, но единственное, что мне действительно нужно сохранить, — это некоторые пользовательские CSS-стили, которые я написал в редакторе тем. Если есть где-то место, где они хранятся, и я могу скопировать их в новую установку, это было бы очень полезно. Я (безответственно) не сохранил актуальную версию локально ни в одном месте.

И ещё раз о процессе пересборки: я всё ещё не знаю точно, как анализировать его вывод на предмет проблем. Насколько я могу судить, он запускается и завершается без запроса какого-либо ввода, а последние строки после завершения связаны с запуском контейнера Docker с конфигурациями из YAML-файла. Я понимаю, что есть разница между завершением пересборки и её успешным завершением, но я не уверен, на что именно обращать внимание или где диагностировать проблему, если что-то идёт не так во время этого процесса.

Поднят ли сервер? Можете ли вы подключиться к нему по SSH?

Если да, перезагрузите сервер, а затем выполните пересборку Discourse.

Если после этого сервер всё ещё не работает, вставьте здесь вывод пересборки, и мы поможем вам.

Да, я могу корректно подключаться по SSH, и именно так я запускал пересборку каждый раз. И нет, после пересборки доступ всё ещё отсутствует. Я вижу (даже после пересборки), что в ifconfig отображается контейнер Docker с IP-адресом, отличным от IP-адреса сервера, к которому я не могу подключиться через веб-браузер своей системы. Не уверен, должно ли быть так или нет. Команда ./launcher rebuild app > output.txt выводит лишь часть реального вывода консоли, но я могу приложить и её.

Ubuntu Pastebin (короткий файл вывода)
Ubuntu Pastebin (полный вывод, скопированный из терминала)
Я вижу несколько сообщений об ошибках от postgres, сообщающих, что база данных ‘discourse’ уже существует. Стоит ли это проверить?

Правильно ли у вас настроен DNS?

host aregames.art
aregames.art has address 198.54.117.200
aregames.art has address 198.54.117.199
aregames.art has address 198.54.117.198
aregames.art has address 198.54.117.197

Почему так много IP-адресов? Какой IP-адрес у вашего сервера?

Вау, это действительно прояснило ситуацию — я, оказывается, забыл продлить доменное имя, и совпало так, что это произошло именно в тот день, когда у меня начались эти проблемы… Я планировал сменить провайдера, поэтому отключил автоматические платежи, и срок просто истёк, видимо. Получается, что эти IP-адреса связаны с какой-то службой парковки домена. Я только что продлил домен, так что, возможно, правильные записи снова применятся — не знаю, сколько обычно на это уходит, хостинг всё ещё показывает те же IP-адреса. Согласно документации, я не должен иметь возможность подключаться напрямую через IP, так что, полагаю, какое-то время я не смогу проверить, сработало ли это. Спасибо, что обратили на это внимание.

Тем не менее, я всё ещё немного запутался в проблемах, с которыми столкнулся изначально — неужели я обращался к кэшированной версии страницы, и из-за проблем с серверами имён запросы на получение контента не проходили? Некоторые вещи, например, даже посты в теме или список постов при открытии раздела «Последние посты», в конечном итоге загружались, но только спустя долгое время.

Обновление: host aregames.art, как вы упоминали выше, снова указывает на правильный IP-адрес и почтовый сервер. Я смог подтвердить с помощью скрипта discourse-setup, что он принимает DNS как указывающий на этот IP. Похоже, что скрипт настройки также запустил перестроение. Однако переход по URL выдаёт ошибку «Сервер не найден». Прямой доступ к IP-адресу на порту 443 выдаёт ошибку nginx 400 Bad Request, что, в каком-то смысле, уже прогресс.

Ещё одно обновление: пришлось очистить кэш браузера — сайт загрузился полностью нормально из окна инкогнито. Всё снова выглядит рабочим! Кажется… оплата за мой сайт оказалась решением проблемы с этим сайтом.

Да, вы просматривали кэшированную версию.

В версии Discourse 2.6 мы добавили новую функцию, которая присваивает документу специальный CSS-класс, когда вы находитесь в этом режиме просмотра, но у нас пока нет стандартного элемента интерфейса для этого.

Подробнее об этом можно прочитать на Offline Indicator