Error al actualizar: versión de Docker no soportada

Ok, aquí te explicamos cómo lo solucionamos (no es para los débiles de corazón)

  1. Actualizar Ubuntu a una versión que admita Docker 20+
    Estábamos en Ubuntu 16 y tuve que llegar al menos a Ubuntu 20, así que hicimos esta actualización dos veces
    RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
    
  2. Una vez que llegamos a Ubuntu 20, tuvimos que actualizar Docker, lo cual Ubuntu se negó a hacer por sí 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
    
    # Añadir el repositorio a las fuentes de 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
    
  3. Eso nos llevó a Docker 28
  4. Luego ejecuta
    ./launcher rebuild app
    
  5. Esto actualizará tu PostgreSQL de la versión 13 a la 15, consulta:
    PostgreSQL 15 update
  6. Una vez que la base de datos se actualizó correctamente, ejecuté
    ./launcher rebuild app
    
  7. Esto arrojó un error sobre una columna faltante
    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
    ** FALLO DEL PLUGIN **
    
    No puedes iniciar Discourse debido a este error durante la inicialización del plugin:
    
    PG::UndefinedColumn: ERROR:  column "require_message" does not exist
    LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                                 ^
    
  8. En este punto, no hay forma de iniciar el contenedor, así que fui a app.yml y deshabilité todos los plugins, luego ejecuté la reconstrucción de nuevo.
  9. La aplicación finalmente se reconstruyó, luego pude ingresar a la consola de Rails para agregar la columna anterior manualmente.
    ./launcher enter app
    rails db
    ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
    exit
    exit
    
  10. Una vez que la columna estuvo presente, volví a app.yml y habilité todos los plugins e hice una reconstrucción de nuevo.
  11. La reconstrucción tuvo éxito… ¡y estamos en funcionamiento!

Gracias @pfaffman por tu pronta respuesta, incluso un fin de semana. Vamos a crear un nuevo droplet actualizado y a migrar. Se suponía que esto sería una actualización rápida en el lugar desde la interfaz web. Pero supongo que el script no prueba la compatibilidad de Docker. Cuando actualizó Discourse Docker, arrojó un error de Docker incompatible.

Esto fue totalmente culpa nuestra por estar en una versión tan antigua de Ubuntu 16; una de las cosas buenas y malas de un sistema estable es que tiende a perdurar.

1 me gusta