Сломал установку неудачным обновлением — как восстановить?

TL;DR: Я нажал кнопку обновления в панели администратора Discourse, и обновление не удалось. Я решил перезагрузить всё и попробовать процесс обновления снова. К сожалению, панель администратора Discourse не открывается. Я хочу вернуть всё к работе.

Дополнительная информация: Это виртуальная машина DigitalOcean, которая обслуживает сайт WordPress. Я настроил её несколько лет назад и забыл многие детали, но каким-то образом Nginx анализирует запрошенный URL и решает, активировать ли WP для основного контента или Discourse для обсуждений. Сторона WP всё ещё работает.

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

Любые советы будут очень кстати. У меня нет опыта в администрировании веб-серверов, но я уверенно работаю с командной строкой в системах на базе Debian. Упомянутое программное обеспечение работает на Ubuntu 20.04.6 LTS, и у меня есть SSH-доступ к соответствующей платформе. Спасибо!

Привет, попробуй пересобрать контейнер.

Вы можете попробовать

cd /var/discourse
./launcher rebuild app

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

Спасибо большое за ваши ответы. Я последую совету Джей и сообщу об этом позже. (Но это может занять несколько часов. Сначала мне нужно приготовить пиццу и угостить ею моих гостей. :slight_smile:

К сожалению, мой сервер DigitalOcean оказывается слишком малым. Если после свежего входа выполнить команду du -sh, она покажет, что на назначенном диске /dev/vda1 свободно около 7 ГиБ. После запуска команды launcher rebuild app начинается загрузка и распаковка множества файлов, но затем скрипт прерывается, сообщая, что доступно только 3,3 ГиБ, и отказывается продолжать работу, если свободное место не превышает 5 ГиБ.

Конечно, я сделал всё возможное, чтобы найти и удалить лишние файлы, но найти ещё 1,7 ГиБ для очистки будет нелёгкой задачей. Есть ли какие-либо экспертные советы для такой ситуации? (Либо в категории «огромных целей, готовых к удалению», либо в области настройки launcher на менее строгие требования.)

PS: Альтернативно, можно ли пересобрать приложение на более мощной машине, а затем просто загрузить подходящий файл на этот слабый маленький сервер? Или это излишне запутанная чёрная магия?

Попробуйте выполнить команду ./launcher cleanup. Эта операция поможет освободить дисковое пространство, занимаемое Docker.

Кроме того, если вы уверены, что ранее следовали официальному руководству по установке, вы можете выполнить ./launcher destroy app, чтобы удалить предыдущий нерабочий контейнер. Однако крайне важно убедиться, что ваша база данных и загруженные файлы хранятся на файловой системе хоста, а не внутри самого контейнера.

Да, вы можете выполнить пересборку на отдельной машине, а затем перенести Docker-образ на вашу виртуальную машину. Однако вам потребуется вручную выполнить команду rake db:migrate на вашей виртуальной машине. Я не совсем уверен, не вызовет ли этот подход других проблем.

Просто перенесите всё на новый VPS с большим объёмом места.

Займёт около 30 минут, если не больше.

Я не на 100% уверен, но хотел бы попробовать это. Как выполнить обязательный шаг по сохранению моей базы данных и загруженных файлов? Хватит ли скопировать файлы из директории /var/discourse/shared/standalone в какое-то безопасное место перед тем, как приступать к серьёзным действиям? (Есть ли указание на стандартный процесс для такого рода практического проекта по восстановлению, который это запустит?)

Я считаю, что прагматичный ответ от @Robert был бы лучшим выбором для большинства людей в подобной ситуации. Я выбираю другое направление, потому что мой контекст уникален по нескольким причинам. Вот самая главная: моя установка — это небольшой хобби-проект, где потеря всего была бы неприятной, но не катастрофической.

Спасибо ещё раз.

Если файлы находятся в директории shared/standalone, вы в безопасности.

Если у вас установлены WordPress и Discourse, вам, вероятно, потребуется обновить виртуальную машину до конфигурации 2 ГБ ОЗУ / 50 ГБ дискового пространства. Если вы удалили все резервные копии и выполнили очистку лаунчера, то у вас, скорее всего, есть место для всего (кстати, вы также можете очистить кэш apt, если поищете об этом в Google).

Это может быть та же проблема, с которой мы только что столкнулись: мы использовали API MaxMind для конвертации IP в геолокацию. В старой версии в файле app.yml требовался только ключ API MaxMind. Недавнее (недокументированное?) изменение требует указания как ключа API MaxMind, так и имени пользователя в файле app.yml. Отсутствие имени пользователя приводит к сбою сборки форума.

Спасибо, @Frully, но я думаю, что это другая проблема. Вот сообщение об ошибке, которое меня останавливает:

Status: Downloaded newer image for discourse/base:2.0.20240602-0023                                                                                                                                                                                        
docker.io/discourse/base:2.0.20240602-0023                                                                                                                                                                                                                 
You have less than 5GB of free space on the disk where /var/lib/docker is located. You will need more space to continue                                                                                                                                    
Filesystem      Size  Used Avail Use% Mounted on                                                                                                                                                                                                           
/dev/vda1        25G   21G  3.5G  86% /

Сегодня вечером после работы продолжу своё приключение по устранению неполадок.

Друзья, я сменю тактику и последую идее @merefield о переносе всей моей конфигурации на более мощный VPS. Конечно, figuring out, как перенести мои активы из сломанной конфигурации в новую рабочую, станет сложной частью этой задачи, но я попробую несколько логичных методов и создам новую ветку, если ни один из них не сработает. Спасибо всем, кто внес свой вклад; я считаю, что эту ветку можно закрыть.

Эпилог: Процесс переезда на новый хост научил меня чему-то полезному о выполнении команд оболочки непосредственно внутри контейнера Discourse, что теперь описано в другой теме. В той же теме есть немного дополнительной информации об экономии места на диске.