L'upgrade alla 3.3 fallisce per me

Ho provato ad aggiornare tramite l’interfaccia utente, e questo è fallito come descritto qui:

Quindi ho ripristinato il mio droplet da un backup, e poi ho provato ad aggiornare manualmente.

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

che restituisce questo:

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

a quel punto l’aggiornamento si interrompe e non succede più nulla, e il server è offline (nessuna connessione web).

Cosa dovrei provare a fare adesso?

Gli aggiornamenti dell’interfaccia utente richiedono più memoria perché si sta cercando di eseguire il sito e ricostruirlo contemporaneamente.

Assicurati di avere abbastanza swap per far fronte - almeno quanto la tua RAM.

Quindi su un server da 4 GB assicurati di avere 4 GB di swap.

A proposito, il git pull qui è ridondante. Lo script di build lo fa per te.

1 Mi Piace

Il mio server ha 4 GB di RAM e 4 GB di Swap. La ricostruzione si interrompe al messaggio database system is ready to accept connections e non viene completata, lasciando il forum offline. Posso ripristinarlo dal backup del Droplet (ancora una volta), il che mi riporterebbe a un forum 3.2 funzionante, ma sarebbe meglio risolvere questo problema.

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

In queste circostanze di solito riavvio (a mio rischio) ma non mi ha ancora fallito. Almeno questo riporta il sito online.

Assicurati che il tuo sistema operativo sia ragionevolmente aggiornato LTS e che l’avviso di docker sembri degno di nota.

Monitora la tua memoria durante la ricompilazione con htop per esserne sicuro?

Sembra che ci sia un sacco di swap. :+1:

2 Mi Piace

Il mio sistema operativo è Ubuntu 20.04.6 LTS.

Huh. OK, ho riavviato e il forum è tornato online.

Ahh, ma dice ancora che è installato il 3.2.4, l’ultima versione è la 3.3.2, quindi non è aggiornato.

Quindi non sono sicuro di dove mi trovi. Riproverò l’aggiornamento.

Sì, si ferma nello stesso punto. Presumo che una versione più recente di Docker richiederebbe l’aggiornamento della versione principale di Ubuntu, cosa che immagino potrei fare, solo che non avevo intenzione di farlo in questo momento.

Aggiornerei il tuo OS e docker per sicurezza.

A volte ci sono grossi ritardi nello script di build in vari punti. Quanto tempo è quanto tempo?

2 Mi Piace

Era bloccato in quel punto quando sono tornato dopo 15-20 minuti. Da allora non ho aspettato particolarmente a lungo. È possibile che stia semplicemente facendo qualcosa, ma non c’è alcuna prova. Nulla sta utilizzando una CPU apprezzabile.

1 Mi Piace

A questo punto hai due opzioni:

  • Aggiornamento del sistema operativo e di Docker sul posto - quindi riprova
  • Nuovo Droplet.

Quest’ultima potrebbe essere più veloce.

Beh, ho uno snapshot attuale, suppongo che fare un aggiornamento di Ubuntu non farà male a questo punto, posso sempre annullare tutto.

1 Mi Piace

Ah, si rifiuta perché

Mi dispiace, questo driver di archiviazione non è supportato nei kernel per le versioni più recenti

Non ci saranno ulteriori rilasci di Ubuntu che forniranno supporto del kernel per il driver di archiviazione aufs.

Assicurati che nessuno dei tuoi container utilizzi il driver di archiviazione aufs, rimuovi la directory /var/lib/docker/aufs e riprova.

Sospira. Niente è mai facile, vero?

2 Mi Piace

Nuovo Droplet. :).\n\nSteps involved to downgrade from 2GB to 1GB on DO? - #3 by merefield(E non dimenticare di ricreare lo swap sul nuovo server se non è già stato creato)

3 Mi Piace

OK, l’intero processo di aggiornamento può essere considerato un disastro completo e non mitigato.

Ripristinerò il droplet a quello che avevo prima (Ubuntu 20.04.6 LTS e Discord 3.2.4), mi metterò la testa sotto la sabbia, dimenticherò tutto riguardo alla versione 3.3 e ci riproverò un altro giorno.

Grazie per aver cercato di aiutare.

2 Mi Piace

Funzionalità bonus: quando ripristino la droplet, per qualche motivo vengo disconnesso e non è possibile accedere, nemmeno come amministratore, mentre il sito è in modalità di sola lettura!

1 Mi Piace

Mi viene in mente, non posso passare Docker a overlay2 come descritto su (Change the Docker storage backend) per poter aggiornare Ubuntu perché il passaggio a overlay richiederà ./launcher rebuild app che fallisce (a meno che il passaggio a overlay2 non risolva il problema, ma è improbabile che da solo lo faccia). Quindi la migrazione a un nuovo droplet sembra l’unica strada percorribile, anche se presumibilmente richiederà modifiche al DNS che sono generalmente piuttosto lente. Uff.

1 Mi Piace

Potresti essere in grado di riavviare il container con

  docker start app

Potresti anche essere in grado di risolvere il tuo problema con

 apt install docker-ce docker-ce-cli

Non sono sicuro del problema con l’overlay. Hai eseguito un aggiornamento del sistema operativo da una vecchia versione di Ubuntu in qualche momento?

Se sei su Digital Ocean, puoi creare un IP statico che punti al vecchio server e aggiornare il DNS per puntare ad esso. Quindi, quando ti sposti sul nuovo server, non c’è alcun ritardo nel DNS poiché puoi reindirizzare l’IP al nuovo server.

2 Mi Piace

Sì, questo ha riavviato il container, ma senza alcun aggiornamento.

Non so cosa succede dopo che il “sistema database è pronto ad accettare connessioni” nel processo di aggiornamento, ma questo è il massimo che raggiunge e poi non va mai oltre (a meno che il passaggio successivo non richieda molto tempo).

Sì, Ubuntu è stato aggiornato in precedenza. Quindi Docker è su aufs, lo è sempre stato.

È possibile ricostruire senza aggiornare? Se funziona, allora forse posso passare l’attuale Docker da aufs a overlay2, il che significherebbe potenzialmente che posso aggiornare Ubuntu a 22, il che potrebbe significare che altre cose funzionano, ma al momento non ho idea del perché l’aggiornamento si blocchi in quel punto, quindi è per lo più solo speranza su ciò che potrebbe risolverlo.

No, verrà aggiornato all’ultimo commit sul ramo impostato.

Ricorda che la migrazione a un nuovo server potrebbe richiedere appena 30 minuti.

Sì, sembra che dovrò seguire quella strada: coloratemi sentimentale, ma non volevo davvero dover configurare un intero nuovo server (che gestisce anche altre cose oltre a Discourse, che dovrà anche essere migrato) solo per aggiornare il forum.

Ah beh, questa è la vita di chiunque gestisca il proprio server.

2 Mi Piace

Sì, sembra che si blocchi lì per qualche motivo. Non so perché, ma l’aggiornamento di Docker sembra aver aiutato alcuni siti.

Hai provato ad aggiornare Docker come ho menzionato sopra?

Potresti potenzialmente correggere l’overlay se provassi a cercare altrove. Ecco perché non mi fido degli aggiornamenti del sistema operativo.

Non l’ho fatto, ma ci proverò la prossima volta: dovrò programmare un altro periodo di manutenzione: il mio processo consiste sempre nello spegnere il droplet ed eseguire uno snapshot, il che richiede un bel po’ di tempo ed è la parte più lunga del downtime, ma assicura che io possa annullare facilmente il processo, il che si è rivelato utile un paio di volte.

Quindi programmerò un’altra finestra di manutenzione per martedì e poi proverò ad aggiornare docker (e poi, se funziona, proverò anche a passare a overlay). E se fallisce, passerò a provare un nuovo server la settimana successiva (o forse lo farò in parallelo perché posso comunque configurare un nuovo server su un droplet di test).

Grazie.