Échec de la mise à niveau : version de Docker non prise en charge

Voici comment nous avons résolu le problème (ce n’est pas pour les âmes sensibles)

  1. Mettre à niveau Ubuntu vers une version qui prend en charge Docker 20+
    Nous étions sous Ubuntu 16, j’ai dû passer à au moins Ubuntu 20, nous avons donc effectué cette mise à niveau deux fois
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Une fois que nous avons atteint Ubuntu 20, nous avons dû mettre à jour Docker, ce qu’Ubuntu a refusé de faire par lui-même.
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

# Ajouter le dépôt aux sources 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. Cela nous a permis d’atteindre Docker 28
  2. Ensuite, exécutez
./launcher rebuild app
  1. Cela mettra à niveau votre PostgreSQL de 13 à 15, voir :
    PostgreSQL 15 update
  2. Une fois la base de données mise à niveau avec succès, exécutez
./launcher rebuild app
  1. Cela a généré une erreur concernant une colonne manquante
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 **

Vous ne pouvez pas démarrer Discourse en raison de cette erreur lors de l'initialisation du plugin :

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. À ce stade, il n’y a aucun moyen de démarrer le conteneur, j’ai donc modifié app.yml pour désactiver tous les plugins, puis j’ai relancé la reconstruction.
  2. L’application a finalement été reconstruite, puis j’ai pu accéder à la console Rails pour ajouter manuellement la colonne ci-dessus.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. Une fois la colonne présente, je suis retourné dans app.yml, j’ai réactivé tous les plugins et j’ai relancé la reconstruction.
  2. La reconstruction a réussi… et nous sommes en ligne !

Merci @pfaffman pour votre réponse rapide, même un week-end. Nous allons créer un nouveau droplet mis à jour et migrer. Il était censé s’agir d’une mise à niveau rapide sur place depuis l’interface web. Mais je suppose que le script ne teste pas la compatibilité de Docker. Lorsqu’il a mis à jour Docker pour Discourse, il a ensuite généré une erreur de Docker incompatible.

C’était entièrement de notre faute de rester sur une version aussi ancienne d’Ubuntu 16. L’une des bonnes et des mauvaises choses d’un système stable est qu’il a tendance à perdurer.

1 « J'aime »