Как восстановить сломанную (недоступную через веб) установку Discourse после неудачного обновления

Я только что попытался обновить свою установку Discourse до последней бета-версии (2.4.0 beta 11) через веб-интерфейс, и теперь она недоступна (попробуйте сами — возвращается ошибка HTTP 500).

Контекст

Установленная у меня версия была 2.4.0 beta 6, я пытался обновиться до 2.4.0 beta 11.
Думаю, у меня была стандартная установка; не помню, были ли какие-либо кастомные плагины (сейчас уже не проверить), но максимум 1–2. Я оставил большинство настроек Discourse по умолчанию.

Что я сделал

Я нажал на ссылку обновления в один клик в письме с уведомлением об обновлении, которая перенаправила меня на /admin/upgrade.

Согласно веб-обновщику, сначала нужно было обновить docker manager, и только после этого можно было обновить саму версию Discourse, поэтому я выбрал этот вариант. Процесс запустился, и примерно на половине прогресса над экраном вывода логов появилось сообщение о том, что во время обновления что-то пошло не так, и нужно проверить логи. Я пролистал логи, но ничего очевидного не заметил. К сожалению, я не сохранил логи, а просто перезагрузил страницу, надеясь, что смогу повторить попытку установки, и предполагая, что при ошибке обновление просто откатится.

Интересно, что страница admin/upgrade/ затем сообщила, что docker_manager уже обновлён и больше не требует обновления, поэтому я (скорее всего, ошибочно) предположил, что обновление действительно прошло успешно, а сообщение об ошибке — это баг. Я также проверил, работает ли форум, и он работал, не показывая никаких проблем.

Теперь мне была предложена возможность обновить саму установку Discourse (ранее эта кнопка была неактивна), и я нажал на неё. Снова в лог выводились сообщения, на которые я не обратил особого внимания, и примерно на половине заполнения прогресс-бара над логами появилось похожее сообщение об ошибке.

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

Вот что я сейчас вижу на странице admin/upgrade/:

Но сам форум больше не работает и возвращает только ошибки 500.

Что всё ещё работает

  • Страница /admin/upgrade/ всё ещё доступна и показывает, что Discourse актуален.
  • Я также могу перейти на вкладку «Processes» и получить список запущенных процессов.

Но даже вкладка «Backups» уже возвращает ошибку 500, как и /admin. Я не нашёл ни одной части форума, которая работала бы, кроме двух вкладок на странице /admin/upgrade/.

Как восстановиться?

Я не имею чёткого представления о том, что пошло не так, и не знаю, с чего начать. Я даже не знаю, как получить доступ к логам, чтобы понять причину ошибки, без веб-интерфейса. Установка Discourse размещена на Digital Ocean, я могу подключиться по SSH к машине и, вероятно, к контейнеру, но не знаю, где искать логи.

Буду очень признателен за подсказку, где искать логи.

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

Мой текущий план и чего мне не хватает

Я настроил Digital Ocean на еженедельное создание резервных копий Droplet и полагаю, что моя установка Discourse была настроена на ежедневные бэкапы. Я никогда не настраивал S3, поэтому они должны быть сохранены локально. Резервная копия Droplet от Digital Ocean пятидневной давности, однако я бы предпочёл не терять контент последних нескольких дней.

Мой примерный план состоит в том, чтобы временно вернуться к известному рабочему состоянию через резервные копии, выполнив следующие шаги:

  1. Скачать резервную копию Discourse за сегодня/вчера.
  2. Откатить весь Droplet через Digital Ocean к последней резервной копии пятидневной давности, чтобы снова получить рабочую установку Discourse.
  3. Импортировать скачанную резервную копию, чтобы вернуть контент (за исключением того, что произошло после последнего бэкапа Discourse).

Я могу выполнить откат через DO (шаг 2) и разберусь, как импортировать существующую резервную копию, когда дойду до этого момента (шаг 3), но не знаю, как получить доступ к резервной копии без веб-интерфейса, учитывая, что /admin/backups/ возвращает ошибку HTTP 500.

Где мне искать резервную копию через SSH и что мне понадобится, чтобы восстановить её после отката к старой резервной копии Droplet через DO?

Просматривая форумы, я нашёл только темы о хранении резервных копий на S3, но не о том, где они находятся при локальном хранении.

С помощью этой темы я выяснил, что в моём случае резервные копии хранятся в
/var/discourse/shared/standalone/backups/default.

Я предполагаю, что могу просто скопировать один из файлов .tar.gz оттуда, откатить Droplet и вернуть файл резервной копии в то же место, чтобы Discourse нашёл его и позволил восстановить данные через веб-интерфейс.

cd /var/discourse
./launcher rebuild app

Огромное спасибо, всё сработало! Гораздо проще, чем проходить все шаги по восстановлению из резервных копий! :slight_smile: