La actualización a 3.3 está fallando para mí

Intenté actualizar usando la interfaz de usuario, y eso falló como se describe en:

Así que restauré mi droplet desde una copia de seguridad y luego intenté actualizar manualmente.

cd /var/discourse
git pull
./launcher rebuild app

lo que da esto:

WARNING: Docker version 20.10.7 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

2.0.20240825-0027: Pulling from discourse/base
e4fff0779e6d: Pulling fs layer 
04dda0e597e7: Pulling fs layer 
0b0ac7902d91: Pulling fs layer 
1ea0327cd622: Waiting 
459f11cf96b2: Waiting 
cd49b55154ee: Waiting 
4f4fb700ef54: Pull complete 
890a63bee26b: Pull complete 
1d239a1092e9: Pull complete 
7439767d748f: Pull complete 
19e63282f9d1: Pull complete 
6da4866029f1: Pull complete 
3274548c87f4: Pull complete 
fb2589b81eef: Pull complete 
da453ab7ba03: Pull complete 
260969aca4e8: Pull complete 
0c7927423a10: Pull complete 
cfdfd8bdc03e: Pull complete 
f837c184a2c0: Pull complete 
d14903daf553: Pull complete 
01422fc4dc02: Pull complete 
e918b15c8f19: Pull complete 
3202b43401af: Pull complete 
3fa0a48e923e: Pull complete 
2f1f96b416a1: Pull complete 
b5376d8069b5: Pull complete 
259e102648be: Pull complete 
807236570b2a: Pull complete 
e98845c05b05: Pull complete 
578a5e3e249f: Pull complete 
6b0bf88c86e8: Pull complete 
9551a14ee15e: Pull complete 
8bbcc4c7a11d: Pull complete 
5aff35532071: Pull complete 
f73f45300530: Pull complete 
42888ce727c0: Pull complete 
e8467a663928: Pull complete 
d2fb91f4643c: Pull complete 
88fc9778a448: Pull complete 
2a19d28a5a17: Pull complete 
6a2d56837370: Pull complete 
933885f686e0: Pull complete 
aecf6df6a6bb: Pull complete 
33fcdcfe61e2: Pull complete 
12726a4d34c8: Pull complete 
Digest: sha256:6de68cb49198b5281f79ed9401b3fe818c854d220dcf0238549fe2f2adb19146
Status: Downloaded newer image for discourse/base:2.0.20240825-0027
docker.io/discourse/base:2.0.20240825-0027
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 app
app
2.0.20240825-0027: Pulling from discourse/base
Digest: sha256:6de68cb49198b5281f79ed9401b3fe818c854d220dcf0238549fe2f2adb19146
Status: Image is up to date for discourse/base:2.0.20240825-0027
docker.io/discourse/base:2.0.20240825-0027
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2024-10-15T06:14:37.390458 #1]  INFO -- : Reading from stdin
I, [2024-10-15T06:14:37.395803 #1]  INFO -- : > echo cron is now included in base image, remove from templates
I, [2024-10-15T06:14:37.398391 #1]  INFO -- : cron is now included in base image, remove from templates

I, [2024-10-15T06:14:37.408024 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2024-10-15T06:14:37.412237 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2024-10-15T06:14:37.416506 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2024-10-15T06:14:37.420758 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2024-10-15T06:14:37.424824 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 
I, [2024-10-15T06:14:37.425837 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/13/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.426590 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.427073 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.427713 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.428194 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.428633 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.429175 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.429569 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.430001 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/13/main/postgresql.conf
I, [2024-10-15T06:14:37.430562 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/13/main/pg_hba.conf
I, [2024-10-15T06:14:37.430964 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-10-15T06:14:37.431353 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\\/128.*$) with host all all ::/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-10-15T06:14:37.431673 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

I, [2024-10-15T06:14:37.974529 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

I, [2024-10-15T06:14:37.975013 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2024-10-15T06:14:37.976577 #1]  INFO -- : Terminating async processes
2024-10-15 06:14:38.136 UTC [36] LOG:  starting PostgreSQL 13.16 (Debian 13.16-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2024-10-15 06:14:38.138 UTC [36] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-10-15 06:14:38.139 UTC [36] LOG:  listening on IPv6 address "::", port 5432
2024-10-15 06:14:38.143 UTC [36] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-10-15 06:14:38.154 UTC [37] LOG:  database system was shut down at 2024-10-15 06:14:28 UTC
2024-10-15 06:14:38.176 UTC [36] LOG:  database system is ready to accept connections

en cuyo punto la actualización se detiene, no sucede nada más y el servidor está fuera de línea (sin conexión web en absoluto).

¿Qué debería intentar a continuación?

Las actualizaciones de la interfaz de usuario requieren más memoria, creo, porque estás intentando ejecutar el sitio y reconstruir simultáneamente.

Asegúrate de tener suficiente espacio de intercambio para hacer frente, al menos tanto como tu RAM.

Así que en un servidor de 4 GB, asegúrate de tener 4 GB de espacio de intercambio.

Por cierto, el git pull aquí es redundante. El script de compilación hace esto por ti.

1 me gusta

Mi servidor tiene 4 GB de RAM y 4 GB de Swap. La reconstrucción simplemente se detiene en el mensaje database system is ready to accept connections y no se completa, y el foro permanece caído. Puedo restaurarlo de la copia de seguridad del Droplet (otra vez), lo que me devolverá a un foro 3.2 funcional, pero sería mejor resolver esto.

# free
              total        used        free      shared  buff/cache   available
Mem:           3919         286        1443          20        2189        3360
Swap:          4095           2        4093
Total:         8015         288        5537
2 Me gusta

En estas circunstancias, normalmente reinicio (bajo mi propio riesgo), pero eso aún no me ha fallado. Al menos eso vuelve a poner el sitio en funcionamiento.

Asegúrate de que tu sistema operativo sea razonablemente una LTS actualizada y que la advertencia de Docker parezca digna de tener en cuenta.

¿Monitorizas tu memoria durante la reconstrucción con htop para estar seguro?

Parece que hay mucha paginación (swap). :+1:

2 Me gusta

Mi sistema operativo es Ubuntu 20.04.6 LTS.

Vaya. OK, reinicié y el foro volvió a funcionar.

Ahh, pero todavía dice que está instalado la versión 3.2.4, la última es la 3.3.2, así que no se ha actualizado.

Así que no estoy seguro de dónde me deja eso. Intentaré la actualización de nuevo.

Sí, simplemente se detiene en el mismo lugar. Supongo que una versión más reciente de Docker requeriría actualizar la versión principal de Ubuntu, lo cual supongo que podría hacer, simplemente no tenía planeado hacerlo en este momento.

Actualizaría tu SO y Docker solo para estar seguro.

A veces hay grandes retrasos en el script de compilación en varios puntos. ¿Cuánto tiempo es cuánto tiempo?

2 Me gusta

Se quedó atascado en ese punto cuando volví después de 15-20 minutos. Desde entonces no he esperado particularmente mucho. Es posible que simplemente esté haciendo algo, pero no hay evidencia de ello. Nada está usando una CPU apreciable.

1 me gusta

Creo que tienes dos opciones en este momento:

  • Actualización del SO y docker in situ - luego reintentar
  • Nueva Droplet.

Esta última podría ser más rápida.

Bueno, tengo una instantánea actual, supongo que hacer una actualización de Ubuntu no hará daño en este momento, siempre puedo deshacerlo todo.

1 me gusta

Ahh, se rechaza porque

Lo sentimos, este controlador de almacenamiento no es compatible en los kernels de versiones más recientes

No habrá más versiones de Ubuntu que proporcionen soporte de kernel para el controlador de almacenamiento aufs.

Asegúrese de que ninguno de sus contenedores esté utilizando el controlador de almacenamiento aufs, elimine el directorio /var/lib/docker/aufs y vuelva a intentarlo.

Suspiro. Nada es fácil, ¿verdad?

2 Me gusta

Nueva Droplet. :).\n\nSteps involved to downgrade from 2GB to 1GB on DO? - #3 by merefield(Y no olvides recrear el swap en el nuevo servidor si aún no se ha creado)

3 Me gusta

OK, bueno, todo ese proceso de actualización puede considerarse un desastre absoluto.\n\nRevertiré el droplet a lo que tenía antes (Ubuntu 20.04.6 LTS y Discord 3.2.4), me taparé los ojos y olvidaré todo sobre la versión 3.3, e intentaré de nuevo otro día.\n\nGracias por intentar ayudar.

2 Me gusta

Función adicional: cuando restauro la instancia, por alguna razón me desconecto, ¡y no puedes iniciar sesión, ni siquiera como administrador, mientras el sitio está en modo de solo lectura!

1 me gusta

Se me acaba de ocurrir, no puedo cambiar Docker a overlay2 como se describe en (Change the Docker storage backend) para poder actualizar Ubuntu, ya que cambiar a overlay requerirá ./launcher rebuild app lo que falla (a menos que cambiarlo a overlay2 resuelva el problema, pero eso solo parece poco probable). Por lo tanto, migrar a un nuevo droplet parece la única forma plausible de avanzar, aunque presumiblemente requerirá cambios en el DNS, lo cual generalmente es bastante lento. Uf.

1 me gusta

Es posible que puedas reiniciar el contenedor con

  docker start app

También podrías solucionar tu problema con

 apt install docker-ce docker-ce-cli

No estoy seguro del problema con la superposición. ¿Has realizado alguna actualización del sistema operativo desde una versión anterior de Ubuntu en algún momento?

Si estás en DigitalOcean, puedes crear una IP estática que apunte al servidor antiguo y actualizar el DNS para que apunte a él. Luego, cuando te muevas al nuevo servidor, no habrá retraso en el DNS, ya que podrás redirigir la IP al nuevo servidor.

2 Me gusta

Sí, eso reinició el contenedor, pero sin ninguna actualización.

No sé qué sucede después de que el “sistema de base de datos está listo para aceptar conexiones” en el proceso de actualización, pero eso es lo más lejos que llega y luego nunca más (a menos que el siguiente paso lleve mucho tiempo).

Sí, Ubuntu se ha actualizado previamente. Así que Docker está en aufs, siempre lo ha estado.

¿Es posible reconstruir sin actualizar? Si eso funciona, entonces posiblemente pueda cambiar el Docker actual de aufs a overlay2, lo que significaría que potencialmente puedo actualizar Ubuntu a 22, lo que podría significar que otras cosas funcionen, pero en este momento no tengo idea de por qué la actualización se detiene en ese punto, así que es más bien esperanza para ver qué podría resolverlo.

No, se actualizará al último commit en la rama establecida.

Recuerda que la migración a un nuevo servidor puede tardar tan solo 30 minutos.

Sí, parece que tendré que seguir ese camino: coloréame sentimental, pero realmente no quería tener que configurar un servidor completamente nuevo (que ejecuta algunas otras cosas además de Discourse, que también tendrá que ser migrado) solo para actualizar el foro.

Bueno, así es la vida de cualquiera que administre su propio servidor.

2 Me gusta

Sí, parece que se queda colgado por alguna razón. No sé por qué, pero hacer la actualización de docker parece haber ayudado a algunos sitios.

¿Intentaste actualizar docker como mencioné anteriormente?

Podrías arreglar la superposición si intentaras buscar en otro lugar. Por eso no confío en las actualizaciones del sistema operativo.

No lo he hecho, pero intentaré eso a continuación. Tendré que programar otro período de mantenimiento. Mi proceso siempre es apagar el droplet y hacer una instantánea, lo que lleva bastante tiempo y es la mayor parte del tiempo de inactividad, pero asegura que pueda revertir el proceso muy fácilmente, lo que ha sido útil un par de veces.

Así que programaré otra ventana de mantenimiento para el martes y luego intentaré actualizar docker (y luego, si eso funciona, también intentaré cambiar a overlay). Y si falla, pasaré a probar un nuevo servidor la semana siguiente (o tal vez lo haga en paralelo porque puedo configurar un nuevo servidor en un droplet de prueba de todos modos).

Gracias.