L'aggiornamento fallisce (ancora :) )

Cambio di provider di dominio e anche di dominio del forum, quindi meglio aggiornare prima… pessima idea, ho dimenticato che il 50% dei miei aggiornamenti di Discourse fallisce :frowning: .

Forse un problema con “gem ‘mini_racer’” e ho trovato alcuni commenti su distro/gcc troppo vecchi ma con 9 giorni prima della scadenza del dominio ho deciso di ripristinare il backup, tramite console dato che il sito ora è inattivo (e ho appena pubblicato il messaggio che l’URL del forum cambierà, quindi le persone potrebbero provare proprio ora, uh oh).

Che fallisce anche. Uh oh di nuovo, apparentemente il sito sarà inattivo un po’ più a lungo…

Log allegati, abbastanza all’oscuro (come sempre), ho delle commissioni da sbrigare quindi incrocio le dita per una soluzione semplice.

discourse_upgrade_fails.txt (40,7 KB)

Se stai riscontrando problemi con mini-racer, è probabile che la tua installazione di Ubuntu sia troppo vecchia.

Dai un’occhiata a questo problema simile in Dev:

Certo, stiamo parlando di 16.04.3 LTS.

Per ora, voglio solo tornare alla versione precedente.

Poi, con abbastanza tempo, verificherò se è persino possibile aggiornare “facilmente” o se finalmente dopo 10 anni farò un nuovo Ubuntu da zero e sposterò le cose lì. Ma ricordando cos’altro ho fatto nel corso degli anni… oh oh.

Wow, basta spostarsi su un nuovo server.

4 Mi Piace

Se ti sposti su un nuovo server usando backup/ripristino e mantieni le modifiche in app.yml, allora tutto dovrebbe spostarsi con esso.

3 Mi Piace

Sì, ma configurare un nuovo server e considerare se spostare anche il controllo sorgente e tutto ciò che ho installato nel corso degli anni per averlo su un droplet cloud 24/7… Qualcosa che preferirei fare almeno in un giorno. Cosa che ora non ho.

Ok, per ora sto ripristinando il droplet di ieri sera e ci sto caricando il backup. Spero che almeno questo vada bene.

Seriamente, se un aggiornamento fallisce dovrebbe esserci un meccanismo di protezione automatico per tornare allo stato precedente. Fare un backup del proprio droplet sembra un po’ eccessivo ed è dipendente dall’amministratore. Essere paranoici e avere due istanze e iniziare sempre spostando quella attiva sulla più vecchia e aggiornando quella… beh, probabilmente è quello che dovrei fare di questi tempi.

1 Mi Piace

Con l’installazione standard puoi provare semplicemente a riavviare il container.

2 Mi Piace

Quando il tuo sistema operativo ha più di 4 anni dalla fine del ciclo di vita, non puoi aspettarti che gli aggiornamenti funzionino.

Passa a una nuova macchina virtuale. È improbabile che ci sia qualcosa sul vecchio server di cui tu abbia bisogno. Non so di quale controllo di origine tu possa parlare.

1 Mi Piace

Sì, uno sguardo allo specchio è d’obbligo :smiley: .

  • Ma ci sono voluti 2 anni per aggiornare tutte le istanze domestiche a WIN11 (= sempre a corto di tempo).
  • La Finlandia passerà alla TV solo HD alla fine di questo mese (qualcuno in realtà non guarda tutto su Netflix = sì) e ci sto lavorando da mesi.
  • Ho ancora un server web W7/IIS7 non aggiornato :slight_smile:
  • E, discourse è alla fine di questa lista… forse in estate.
  • Ci sono cose da fare e cose che si possono fare. La realtà è dura.

Ci sono stati alcuni problemi nel ripristinare il backup del droplet, ma ho rimesso tutto in funzione. Uff.

Scusa per il disturbo.

2 Mi Piace

Quindi rimani sulla vecchia versione finché non sei pronto per l’aggiornamento.

In realtà è quasi più facile passare a una nuova vm che fare l’aggiornamento di PostgreSQL 15.

Oppure non aggiornare nulla e aspettare altri anni. :wink:

2 Mi Piace

Bene, ho dovuto aggiornare app.yml a causa del cambio di dominio e ho eseguito la ricostruzione dell’app invece del riavvio per errore senza prima fare uno snapshot su Digital Ocean. Quindi mi sono costretto ad aggiornare proprio ora :frowning: .

Che alla fine ha funzionato. Dato che ho incontrato alcuni intoppi (si può ridere) pubblicherò qui il mio percorso di (s)fortuna. Forse qualcuno si imbatterà esattamente nello stesso messaggio di errore e otterrà aiuto da questo.

Tempo impiegato 3,5 ore (immagino che avrei dovuto essere pigro e fare semplicemente l’installazione con 1 clic di Digital Ocean, ma ero curioso di vedere se l’aggiornamento avrebbe funzionato).

*****Aggiornamento Ubuntu 16.x → Ubuntu 18.x
*****Aggiornamento Ubuntu 18.x → Ubuntu 20.x (sorpreso di quanto bene abbia funzionato, molto meglio di Windows :smiley: )

*Benvenuto su Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-208-generic x86_64)*

*root@Discourse:~# cd /var/discourse/*
*root@Discourse:/var/discourse# ./launcher restart app*
*ERRORE: Docker versione 19.03.13 non supportata, si prega di aggiornare almeno alla 20.10.0, o raccomandata 24.0.7*
*root@Discourse:/var/discourse# sudo apt-get install docker-ce --only-upgrade*
*Lettura dei pacchetti... Fatto*
*Creazione dell'albero delle dipendenze*
*Lettura delle informazioni sullo stato... Fatto*
*docker-ce è già alla versione più recente (5:19.03.13~3-0~ubuntu-xenial).*

******(/(&(%(&/()(=)/&/))&/*
******Non volevo buttare via docker e reinstallarlo, ma ora ne ho abbastanza...*

*root@Discourse:/var/discourse# sudo apt remove docker docker-engine docker.io containerd runc*
*root@Discourse:/var/discourse# sudo apt install apt-transport-https ca-certificates curl software-properties-common*
*root@Discourse:/var/discourse# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -*
*root@Discourse:/var/discourse# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"*
*root@Discourse:/var/discourse# sudo apt update*

******Stavo per eseguire anche questo, ma non sono riuscito a trovarlo nei miei log, quindi forse non l'ho fatto (il comando non viene mostrato, ma l'installazione sì, eh?):*
******sudo apt install docker-ce docker-ce-cli containerd.io*

*root@Discourse:/var/discourse# sudo docker --version*
*Docker version 28.0.1, build 068a01e*
*root@Discourse:/var/discourse# ./launcher rebuild app*

******Ci sono voluti alcuni tentativi, ma finalmente è sembrato migliore dopo alcuni rebuild.*
******... finalmente sono arrivato a redis, evvai... o no*
*docker: Errore di risposta dal daemon: impossibile configurare la rete del container: il driver non è riuscito a programmare la connettività esterna sull'endpoint app (ea1a6cc790c13940435c2626a4e8b6169f04612f4be552be25564def7d5745eb): impossibile associare la porta host per 0.0.0.0:80:172.17.0.2:80/tcp: indirizzo già in uso*

******(/(&(%(&/()(=)/&/))&/ (o l'ho già detto?)*

*root@Discourse:/var/discourse# hostname -I*
*139.X.X.X 10.19.0.5 172.17.0.1*
*root@Discourse:/var/discourse# sudo lsof -i :80*
*COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME*
*apache2 839     root    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 844 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 845 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*

******Apache attivo per impostazione predefinita? Da quando? Assolutamente no!*

*root@Discourse:/var/discourse# sudo systemctl stop apache2*
*root@Discourse:/var/discourse# sudo systemctl disable apache2*
*Sincronizzazione dello stato di apache2.service con lo script del servizio SysV con /lib/systemd/systemd-sysv-install.*
*Esecuzione: /lib/systemd/systemd-sysv-install disable apache2*
*Rimosso /etc/systemd/system/multi-user.target.wants/apache2.service.*
*root@Discourse:/var/discourse# ./launcher start app*

******Ecco fatto, finalmente! (Dopo il solito lento messaggio di errore di nginx)*

******Dopo l'avvio, ovviamente, ricevo... che stavo aspettando... vabbè, una volta che tutto funzionerà per una settimana, forse continuerò a soffrire... dopo aver fatto uno snapshot e un backup e... ;) *
*Nuova versione '22.04.5 LTS' disponibile.*
*Esegui 'do-release-upgrade' per aggiornare.*
1 Mi Piace

Non farlo. Quello non è il modo supportato per installare.

Avrei creato un nuovo droplet ed eseguito una nuova installazione copiando il backup o Spostare un sito Discourse su un altro VPS con rsync. Eseguo anche una versione ibrida in cui copio i certificati SSL con rsync, ma poi ripristino un backup. Questo evita il passaggio di aggiornamento del database.