Aggiornamento fallito: versione Docker non supportata

Ok, ecco come l’abbiamo risolto (non è per i deboli di cuore)

  1. Aggiorna Ubuntu a una versione che supporti Docker 20+
    Eravamo su Ubuntu 16, ho dovuto passare ad almeno Ubuntu 20, quindi abbiamo eseguito questo aggiornamento due volte
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Una volta arrivati su Ubuntu 20, abbiamo dovuto aggiornare Docker, cosa che Ubuntu si è rifiutato di fare da solo.
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

# Aggiungi il repository alle sorgenti 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. Questo ci ha portato a Docker 28
  2. Quindi esegui
./launcher rebuild app
  1. Questo aggiornerà il tuo PostgreSQL da 13 a 15, vedi:
    PostgreSQL 15 update
  2. Una volta che il database si è aggiornato con successo, abbiamo eseguito
./launcher rebuild app
  1. Questo ha generato un errore relativo a una colonna mancante
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 **

Non è possibile avviare Discourse a causa di questo errore durante l'inizializzazione del plugin:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. A questo punto non c’è modo di avviare il container, quindi sono andato su app.yml e ho disabilitato tutti i plugin, quindi ho eseguito nuovamente il rebuild.
  2. L’app è stata finalmente ricostruita, quindi sono stato in grado di accedere alla console rails per aggiungere manualmente la colonna sopra.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. Una volta presente la colonna, sono tornato a app.yml, ho abilitato tutti i plugin e ho eseguito nuovamente il rebuild.
  2. Il rebuild è riuscito… e siamo online!

Grazie @pfaffman per la tua pronta risposta, persino nel fine settimana. Stiamo per creare un nuovo droplet aggiornato e trasferirci. Questo doveva essere un rapido aggiornamento sul posto dall’interfaccia web. Ma immagino che lo script non testì la compatibilità di Docker. Quando ha aggiornato Discourse Docker, ha generato un errore di incompatibilità di Docker.

È stata interamente colpa nostra per essere rimasti su una versione così vecchia di Ubuntu 16; una delle cose buone e cattive di un sistema stabile è che tende a persistere.

1 Mi Piace