Сбой обновления: неподдерживаемая версия Docker

Хорошо, вот как мы это исправили (это не для слабонервных)

  1. Обновите Ubuntu до версии, поддерживающей Docker 20+
    Мы были на Ubuntu 16, мне нужно было перейти как минимум на Ubuntu 20, поэтому мы выполнили это обновление дважды:
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Когда мы перешли на Ubuntu 20, нам пришлось обновить Docker, что Ubuntu отказалась делать самостоятельно.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Добавьте репозиторий в источники Apt:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. Это перевело нас на Docker 28.
  2. Затем выполните:
./launcher rebuild app
  1. Это обновит ваш PostgreSQL с версии 13 до 15, см.:
    PostgreSQL 15 update
  2. После успешного обновления базы данных выполните:
./launcher rebuild app
  1. Это привело к ошибке о недостающем столбце:
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

Вы не можете запустить Discourse из-за этой ошибки во время инициализации плагина:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. На этом этапе запустить контейнер невозможно, поэтому я открыл app.yml, отключил все плагины и снова выполнил rebuild.
  2. Приложение наконец пересобралось, после чего я смог войти в rails console и вручную добавить вышеуказанный столбец.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit 
  1. Когда столбец появился, я вернулся в app.yml, включил все плагины и снова выполнил rebuild.
  2. Пересборка прошла успешно … и мы в деле!

Спасибо @pfaffman за быстрый ответ, да ещё и в выходные. Мы создадим новый обновлённый дроплет и перенесёмся туда. Это должно было быть быстрое обновление на месте через веб-интерфейс. Но, похоже, скрипт не проверяет совместимость с Docker. Когда он обновил Docker в Discourse, возникла ошибка несовместимости Docker.

Это полностью наша вина за то, что мы остались на такой старой версии Ubuntu 16. Одно из хороших и плохих свойств стабильной системы — она имеет тенденцию задерживаться.