Обновление не удалось (снова :) )

Меняю провайдера домена и сам домен форума, поэтому сначала лучше обновиться… плохая идея, забыл, что 50% обновлений Discourse не удаются :(.

Возможно, проблема в gem 'mini_racer', наткнулся на комментарии о слишком старых дистрибутивах и GCC, но поскольку домен истекает через 9 дней, я просто решил восстановить резервную копию через консоль, так как сайт сейчас недоступен (и я только что опубликовал сообщение о том, что URL форума изменится, так что люди могут попытаться зайти прямо сейчас, ой-ой).

Что тоже не удалось. Опять ой-ой, похоже, сайт будет недоступен ещё какое-то время…

Прикрепляю логи, совершенно не понимаю (как всегда), нужно бежать по делам, поэтому просто надеюсь на простое решение.

discourse_upgrade_fails.txt (40.7 КБ)

Если у вас возникли проблемы с mini-racer, скорее всего, ваша версия Ubuntu устарела.

Посмотрите похожую тему в разделе Dev:

Да, мы говорим о версии 16.04.3 LTS.

На данный момент я просто хочу вернуться к предыдущей версии.

Затем, когда будет достаточно времени, я проверю, возможно ли вообще «легко» обновиться, или же мне после 10 лет наконец установить Ubuntu с нуля и перенести туда все данные. Но вспомнив, что ЕЩЁ я делал за эти годы… ой-ой.

Ого, просто перейдите на новый сервер.

Если вы переезжаете на новый сервер с помощью резервного копирования и восстановления и сохраняете изменения в app.yml, то всё должно перенестись вместе с ними.

Да, но настройка нового сервера, решение вопроса о переносе системы контроля версий, а также всего, что я устанавливал за эти годы, чтобы разместить на облачном дроплете, работающем 24/7… Это задача, на которую я бы предпочел потратить хотя бы день. А сейчас у меня его нет.

Ладно, пока я просто восстанавливаю дроплет вчерашней ночи и загружаю на него резервную копию. Надеюсь, хоть это пройдет успешно.

Если честно, при сбое обновления должен быть автоматический механизм возврата в предыдущее состояние. Создание резервной копии вашего дроплета кажется излишним и зависит от администратора. Быть параноиком, держать два экземпляра и всегда начинать с переноса активного на самый старый, а затем обновлять его… Ну, вероятно, именно так мне стоит поступать в наши дни.

При стандартной установке можно попробовать просто перезапустить контейнер.

Когда вашей операционной системе уже 4 года как прекращена поддержка, ожидать, что обновления будут работать, бессмысленно.

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

Да, стоит взглянуть в зеркало :D.

  • Но у меня ушло два года, чтобы обновить все домашние экземпляры до WIN11 (=всегда не хватает времени).
  • Финляндия переходит на телевидение только в HD-качестве в конце этого месяца (кто-то на самом деле не смотрит всё через Netflix = да), и я уже несколько месяцев работаю над этим.
  • У меня всё ещё есть один веб-сервер на W7/IIS7, который не обновлён :slight_smile:
  • И Discourse находится в конце этого списка… возможно, летом.
  • Есть «надо сделать» и есть «можно сделать». Реальность сурова.

Были некоторые проблемы с восстановлением резервной копии дроплета, но я снова всё поднял. Фух.

Извините за суету.

Так что просто оставайтесь на старой версии, пока не будете готовы к обновлению.

На самом деле перенести на новую виртуальную машину даже проще, чем выполнить обновление PostgreSQL 15.

Или просто ничего не обновляйте и ждите ещё несколько лет. :wink:

Ну, пришлось обновить app.yml из-за смены домена и по ошибке сделал пересборку приложения вместо перезапуска, не сделав заранее снимок в Digital Ocean. Так что меня как бы вынудили сделать обновление прямо сейчас :(.

В конце концов всё сработало. Поскольку я столкнулся с несколькими проблемами (смех разрешён), я опубликую здесь свой путь (не)удачи. Возможно, кто-то наткнётся на то же самое сообщение об ошибке и получит помощь.

Время заняло 3,5 часа (думаю, мне следовало быть ленивым и просто воспользоваться одношаговой установкой Digital Ocean, но я был любопытен, сработает ли обновление).

*****Обновление Ubuntu 16.x → Ubuntu 18.x
*****Обновление Ubuntu 18.x → Ubuntu 20.x (удивлён, насколько хорошо это сработало, намного лучше, чем в Windows :D)

*Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-208-generic x86_64)*

*root@Discourse:~# cd /var/discourse/*
*root@Discourse:/var/discourse# ./launcher restart app*
*ERROR: Docker version 19.03.13 not supported, please upgrade to at least 20.10.0, or recommended 24.0.7*
*root@Discourse:/var/discourse# sudo apt-get install docker-ce --only-upgrade*
*Reading package lists... Done*
*Building dependency tree*
*Reading state information... Done*
*docker-ce is already the newest version (5:19.03.13~3-0~ubuntu-xenial).*

******(/(&(%%(&/()(=)/&/))&/*
******Не хотел удалять Docker и переустанавливать его, но теперь мне это надоело...*

*root@Discourse:/var/discourse# sudo apt remove docker docker-engine docker.io containerd runc*
*root@Discourse:/var/discourse# sudo apt install apt-transport-https ca-certificates curl software-properties-common*
*root@Discourse:/var/discourse# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -*
*root@Discourse:/var/discourse# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"*
*root@Discourse:/var/discourse# sudo apt update*

******Собибался также выполнить эту команду, но не нашёл её в логах, возможно, я её не запускал (команда не отображается, но установка есть, да?)*
******sudo apt install docker-ce docker-ce-cli containerd.io*

*root@Discourse:/var/discourse# sudo docker --version*
*Docker version 28.0.1, build 068a01e*
*root@Discourse:/var/discourse# ./launcher rebuild app*

******Потребовалось несколько попыток, но после нескольких пересборок ситуация стала лучше.*
******... наконец дошли до Redis, ура... или нет*
*docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint app (ea1a6cc790c13940435c2626a4e8b6169f04612f4be552be25564def7d5745eb): failed to bind host port for 0.0.0.0:80:172.17.0.2:80/tcp: address already in use*

******(/(&(%%(&/()(=)/&/))&/ (или я уже это говорил?)*

*root@Discourse:/var/discourse# hostname -I*
*139.X.X.X 10.19.0.5 172.17.0.1*
*root@Discourse:/var/discourse# sudo lsof -i :80*
*COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME*
*apache2 839     root    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 844 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 845 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*

******Apache включён по умолчанию? С каких пор? Ни за что!*

*root@Discourse:/var/discourse# sudo systemctl stop apache2*
*root@Discourse:/var/discourse# sudo systemctl disable apache2*
*Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.*
*Executing: /lib/systemd/systemd-sysv-install disable apache2*
*Removed /etc/systemd/system/multi-user.target.wants/apache2.service.*
*root@Discourse:/var/discourse# ./launcher start app*

******Вуаля, наконец! (После обычного медленного сообщения о рвоте nginx)*

******После загрузки, конечно, получаю... чего я и ждал... ладно, когда всё будет работать неделю, возможно, продолжу страдать... после создания снимка и резервной копии и... ;)*
*New release '22.04.5 LTS' available.*
*Run 'do-release-upgrade' to upgrade to it.*

Не стоит. Это не поддерживаемый способ установки.

Я бы создал новый дроплет и либо выполнил бы чистую установку, скопировав резервную копию, либо перенёс бы сайт Discourse на другой VPS с помощью rsync. Также я использую гибридный вариант: синхронизирую SSL-сертификаты через rsync, а затем восстанавливаю резервную копию. Это позволяет избежать необходимости обновлять базу данных.