Immagine Discourse e dimensione di installazione. Pulire /var/lib/docker/overlay2?

Ciao, ho installato Discourse su una nuova macchina dedicata seguendo la guida disponibile su discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

Il server dispone di 15 GB di spazio su disco e, anche se l’installazione non è in produzione (meno di 10 utenti, nessun allegato, alcuni post creati e cancellati), sembra che le dimensioni dell’installazione siano piuttosto grandi.

#df -kh
Filesystem                         Size  Used Avail Use% Mounted on
udev                               950M     0  950M   0% /dev
tmpfs                              199M  1.3M  198M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G   11G  3.2G  78% /
tmpfs                              994M     0  994M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              994M     0  994M   0% /sys/fs/cgroup
/dev/sda2                          976M  203M  707M  23% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/2066
/dev/loop1                          56M   56M     0 100% /snap/core18/2074
/dev/loop2                          33M   33M     0 100% /snap/snapd/12398
/dev/loop3                          33M   33M     0 100% /snap/snapd/12159
/dev/loop4                          68M   68M     0 100% /snap/lxd/20326
overlay                             15G   11G  3.2G  78% /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/merged
/dev/loop6                          71M   71M     0 100% /snap/lxd/21029
tmpfs                              199M     0  199M   0% /run/user/1000
# du -csh /var/lib/docker/overlay2
580M    51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****
2.3G    ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****
76M     d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****
4.5G    ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****
40K     ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init
24K     l
7.4G    total
# du -shc /var/lib/docker/overlay2/*/diff
580M    /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff
2.3G    /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff
76M     /var/lib/docker/overlay2/d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****/diff
996M    /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff
20K     /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init/diff
3.9G    total
# docker images -a
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
local_discourse/app   latest    b29b7073fea2   2 months ago   2.69GB
<none>                <none>    30e4746e631e   3 months ago   2.23GB
docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         2.689GB   0B (0%)
Containers      1         1         950.4MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Ho provato questo ma non ha aiutato:

# /var/discourse/launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

Sono preoccupato che, una volta in produzione, l’installazione occupi sempre più spazio e potrebbe causare problemi.
Potreste consigliarmi qual è la dimensione normale dell’immagine Docker e dell’installazione, e cosa posso fare per liberare spazio?
Grazie

1 Mi Piace

Sarò curioso di sapere cosa significa l’immagine Docker <none>. (Aggiornamento: sembra che se un’immagine <none> appare in docker images -a non sia molto importante, ma se appare in docker images allora è uno spreco di spazio. Speravo che la pulizia del launcher potesse aiutare, ma non ti ha aiutato…)

Nota che l’utilizzo del filesystem overlay visualizzato da df corrisponde all’utilizzo del filesystem root: c’è molta dati che svolgono una doppia funzione e devi fare attenzione a non contarli due volte. Nel tuo caso, lo spazio disponibile è di 3,2 GB ed è questo il valore su cui concentrarsi. Potrebbe esserci un po’ di pulizia da fare.

Di seguito mostro statistiche simili alle mie. Ho due forum, ciascuno su un host diverso. Un host ha 20 GB e l’altro 25 GB di spazio. Penso che 15 GB potrebbero rivelarsi molto stretti, specialmente quando il processo di aggiornamento richiede 5 GB di spazio libero prima di iniziare.

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G   19G  5.1G  79% /

# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 months ago        2.7GB
discourse/base        2.0.20210415-1332   30e4746e631e        3 months ago        2.23GB
<none>                <none>              1e6bf44c2762        5 months ago        2.46GB
discourse/base        2.0.20201221-2020   c0704d4ce2b4        7 months ago        2.11GB


# du -shc /var/lib/docker/overlay2/*/diff
2.2G	/var/lib/docker/overlay2/05fa0e4df2...
76M 	/var/lib/docker/overlay2/58b000b1f5c...
20K  	/var/lib/docker/overlay2/6271023fc7a...
1.1G	/var/lib/docker/overlay2/6271023fc7...
2.3G	/var/lib/docker/overlay2/91d6adf7ad...
481M	/var/lib/docker/overlay2/b6b06a7cee...
592M	/var/lib/docker/overlay2/d81e44d563...
76M 	/var/lib/docker/overlay2/fb98649680b...
6.8G	total


# du -shc /var/lib/docker/overlay2/*
2.2G	/var/lib/docker/overlay2/05fa0e4df2...
76M 	/var/lib/docker/overlay2/58b000b1f5c...
4.7G	/var/lib/docker/overlay2/6271023fc7...
40K  	/var/lib/docker/overlay2/6271023fc7a...
2.3G	/var/lib/docker/overlay2/91d6adf7ad...
481M	/var/lib/docker/overlay2/b6b06a7cee...
592M	/var/lib/docker/overlay2/d81e44d563...
76M 	/var/lib/docker/overlay2/fb98649680b...
36K  	/var/lib/docker/overlay2/l
11G	total


# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              4                   1                   5.155GB             4.689GB (90%)
Containers          1                   1                   1.059GB             0B (0%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

Vedi anche Riparare Discourse dopo il riempimento del disco :

e Requisiti minimi per usare Discourse? :

e Aggiornamento 2.6.0 beta 3 fallito per mancanza di spazio su disco e/o memoria:

1 Mi Piace

Un aggiornamento: dopo aver eseguito un backup e un aggiornamento, ho anche avviato una pulizia.

Sono abbastanza sicuro che gli strumenti per gestire le immagini Docker siano preferibili all’azione diretta su /var/lib/docker/overlay2. E la pulizia automatica è preferibile a questi strumenti. (Ma come notato nei post collegati, ci sono altri modi in cui lo spazio su disco viene utilizzato: backup, file di swap, file di registro, upload, importazioni, file di log e così via)

Ecco cosa ho visto, come ‘dopo’ rispetto al ‘prima’ pubblicato sopra: notate che il punto di partenza ha meno spazio libero su disco, probabilmente a causa del backup:

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G   19G  5.1G  79% /
# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 mesi fa           2.7GB
discourse/base        2.0.20210415-1332   30e4746e631e        3 mesi fa           2.23GB
<none>                <none>              1e6bf44c2762        5 mesi fa           2.46GB
discourse/base        2.0.20201221-2020   c0704d4ce2b4        7 mesi fa           2.11GB
# /var/discourse/launcher cleanup
ATTENZIONE! Questo rimuoverà tutti i container fermi.
Sei sicuro di voler continuare? [y/N] y
Spazio totale recuperato: 0B
ATTENZIONE! Questo rimuoverà tutte le immagini senza almeno un container associato.
Sei sicuro di voler continuare? [y/N] y
Immagini eliminate:
untagged: discourse/base:2.0.20201221-2020
untagged: discourse/base@sha256:e18*
deleted: sha256:1e6*
deleted: sha256:a22*
deleted: sha256:c07*
deleted: sha256:9b7*
deleted: sha256:87c*
untagged: discourse/base:2.0.20210415-1332
untagged: discourse/base@sha256:b3b*

Spazio totale recuperato: 2.456GB
# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 mesi fa           2.7GB
<none>                <none>              30e4746e631e        3 mesi fa           2.23GB
# docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 mesi fa           2.7GB
# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G   17G  7.8G  68% /
# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   1                   2.699GB             0B (0%)
Containers          1                   1                   1.13GB              0B (0%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B
# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G   17G  7.8G  68% /
# du -shc /var/lib/docker/overlay2/*
4.9G	/var/lib/docker/overlay2/627*
40K 	/var/lib/docker/overlay2/627*-init
2.3G	/var/lib/docker/overlay2/91d*
592M	/var/lib/docker/overlay2/d81*
76M 	/var/lib/docker/overlay2/fb9*
24K 	/var/lib/docker/overlay2/l
7.8G	total
# du -shc /var/lib/docker/overlay2/*/diff
20K 	/var/lib/docker/overlay2/627*-init/diff
1.2G	/var/lib/docker/overlay2/627*/diff
2.3G	/var/lib/docker/overlay2/91d*/diff
592M	/var/lib/docker/overlay2/d81*/diff
76M 	/var/lib/docker/overlay2/fb9*/diff
4.2G	total

1 Mi Piace

Direi che servono almeno 25 GB, ma @Ed_S ha detto che è riuscito a farlo funzionare con 20. E anche 25, nella mia esperienza, sono un po’ stretti.

1 Mi Piace

Ciao a tutti,
grazie per la risposta.

Ho controllato il journal con

# journalctl --disk-usage
Archived and active journals take up 1.5G in the file system.

e ho eseguito questo comando per liberare spazio:
# journalctl --vacuum-time=10d

Ora ho 1 GB in più.
La mia domanda vera era riguardo allo spazio effettivamente necessario per Discourse.
In realtà, i miei backup, dato che non sono in produzione, sono di circa 10 MB ciascuno, per un totale di 3 backup (30 MB).

Capisco la necessità di spazio durante l’aggiornamento, ma durante l’esecuzione mi aspetto di salvare la versione corrente e avere la possibilità di eliminare le vecchie versioni.
Abbiamo davvero bisogno di tutte le differenze nell’overlay o possiamo unire in qualche modo tutto il contenuto per recuperare spazio? Inoltre, non vedo alcun volume montato, quindi immagino che Discourse salvi tutti i dati lì.

@Ed_S ecco il risultato del comando

~# du -kx / | sort -n | tail -33
431172  /usr/bin
482000  /var/lib/snapd
499660  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse/vendor/bundle/ruby/2.7.0/gems
533056  /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff/var/www/discourse
533060  /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff/var/www
556800  /usr/lib/firmware
570876  /usr/lib/modules
574032  /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff/var
593840  /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff
593856  /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****
626400  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse/vendor/bundle/ruby/2.7.0
626404  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse/vendor/bundle/ruby
626408  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse/vendor/bundle
634964  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse/vendor
845496  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/usr/lib
863600  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www/discourse
863612  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var/www
936876  /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/var
1004276 /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff/var/www/discourse
1004284 /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff/var/www
1032452 /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff/var
1091584 /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff
1091604 /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****
1426272 /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff/usr
1579980 /usr/lib
2398720 /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff
2398736 /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****
2607528 /usr
4161292 /var/lib/docker/overlay2
4171308 /var/lib/docker
4816636 /var/lib
5509688 /var
10220684        /
1 Mi Piace

Nel thread collegato vediamo una situazione in cui ./launcher cleanup non ha aiutato, mentre docker system prune --all --volumes --force ha funzionato. Non so perché sia successo.

Non capisco come si impilano le immagini Docker, perché le directory diff siano così grandi o perché l’utilizzo del disco di Docker risulti molto superiore a quanto riportato da Docker stesso.

Tuttavia, vale la pena notare che minimizzare l’utilizzo del disco richiede impegno: né Docker né Discourse danno priorità alla riduzione dell’utilizzo del disco. Entrambi i progetti preferiscono concentrarsi sul miglioramento del prodotto e sulla semplicità.

Sto eseguendo con successo su un’istanza da 20 GB. Considerando la necessità di mantenere 5 GB liberi per gli aggiornamenti, il limite effettivo per lo spazio su disco utilizzato è di 15 GB. Nel tuo caso, con un’istanza da 15 GB, dovresti cercare di rimanere entro 10 GB di spazio utilizzato. Possiamo aspettarci che questo sia più difficile, forse addirittura impossibile. Sicuramente esiste un minimo.

Sono quasi certo di aver visto un thread in cui si consigliava di rimuovere completamente Docker e Discourse, lasciando solo la configurazione del sito e il database, e poi reinstallare. Non lo farei alla leggera e certamente non lo farei senza un backup! Purtroppo al momento non riesco a trovare quel thread.

Il mio “docker volume ls” è vuoto; dipende da se gli utenti hanno montato i volumi.

Sarebbe utile avere una specifica più ufficiale o una dimensione attesa per l’installazione; forse esiste da qualche parte, ma non l’ho trovata.
Capisco che nel mondo di oggi 20 GB non siano molti, ma quando si tratta di backup, trasferimento remoto, duplicazione e così via, è uno spreco di spazio che forse si potrebbe evitare se sapessimo come risparmiare questo spazio fin dall’inizio.

L’installazione senza Docker è possibile, ma per quanto ne so non è supportata in caso di problemi.

E 25 GB sono ciò che ottiene il tipico utente principiante e a basso budget che utilizza Digital Ocean. È davvero il pubblico di riferimento.

L’insieme di persone che hanno le competenze per gestire uno spazio su disco inferiore a 25 GB e che non hanno il budget per 25 GB di spazio su disco è molto ridotto. Penso che tu sia la prima persona ad aver fatto questa richiesta negli ultimi 5 anni.

Potresti risparmiare un po’ gestendo i tuoi backup e eseguendo il backup in remoto. Un singolo backup richiede tre copie: la copia vecchia, la copia nuova non compressa e la copia nuova compressa. È il modo più efficace per risparmiare spazio che mi viene in mente, ma non pretendo di avere molte conoscenze speciali su Docker.

Potresti anche organizzare di costruire la nuova immagine in remoto su un server temporaneo e spingerla in un repository. In tal caso, non avresti bisogno dello spazio Docker aggiuntivo in locale. Questa è probabilmente la soluzione migliore, ma non esiste un metodo ben documentato per farlo ed è per lo più non supportato (anche se più di un’installazione senza Docker). Se mi assumeresti per farlo, mi costerebbe anni rispetto a quanto costano 10 GB di spazio su disco. Ho considerato un servizio in cui costruisco quelle immagini (essenzialmente una versione Bitnami meglio supportata), ma non ci sono ancora arrivato perché non penso che ci sia un mercato che giustifichi il tempo di sviluppo.

Sarei interessato a sapere quanto costa il tuo server da 15G e da quale fornitore. La mia macchina da 25G mi costa 6 dollari al mese da Digital Ocean, e quella da 20G mi costa 3 dollari da Hetzner.

Se non prevedi di dover eseguire il debug di comportamenti dai log di sistema, puoi essere molto drastico nella pulizia dei journal.

# journalctl --rotate
# journalctl --vacuum-time=1s

anche se quello che ho fatto io è cambiare la policy:

/etc/systemd/journald.conf:
[Journal]
SystemMaxUse=50M

L’utilizzo del disco sulla macchina da 20G, che ospita un forum molto piccolo a bassa attività, è questo:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  9.9G  8.1G  56% /

sistema operativo:

15M /bin
16M /sbin
43M /boot/
135M /var/cache/
223M /var/log
435M /lib
464M /var/lib/apt
1.1G /usr
2.1G /swapfile
4.3G total

discourse:

# du -hs /var/discourse/ /var/lib/docker/
1.5G /var/discourse/
7.5G /var/lib/docker/

modifica: ah, ma stiamo contando due volte, vedi invece

# du -hxs /var/discourse/ /var/lib/docker/
1.5G /var/discourse/
4.1G /var/lib/docker/

il forum stesso, all’interno di quanto sopra:

201M	/var/discourse/shared/standalone/uploads
315M	/var/discourse/shared/standalone/postgres_data
930M	/var/discourse/shared/standalone/backups

Sto eseguendo Ubuntu 18.04, mentre sembra che tu stia eseguendo qualcosa di più simile alla 20.04, che probabilmente è più grande.

Utilizzo diversi VPS: ho alcune VM su Contabo e altre su Azure. Per me la domanda è: ciò che gestisco è mantenuto e configurato come previsto (dimensioni, pulizia, ecc.)?

Grazie per il consiglio sulla modifica della policy per journald; l’ho fatto (avevo già pulito prima, quindi il risparmio è minimo, ma almeno ora non devo più controllarlo).

Il tuo utilizzo del disco è più o meno uguale al mio:

# du -hxs /var/discourse/ /var/lib/docker/
181M    /var/discourse/
4.0G    /var/lib/docker/

Sarei propenso a eliminare Docker e ricostruire tutto, ma dato che non è montato alcun volume fisso per Docker, ho il timore di perdere i dati del forum durante la fase di eliminazione. Aspetterò una procedura ufficiale più dettagliata.

Sì, vale la pena cercare conferma. Sono quasi certo che tutti i dati del forum si trovino in /var/discourse.

Un altro approccio che potrebbe essere a tua disposizione è avviare una nuova istanza e installare Discourse da zero, per vedere come si presenta. (In ogni caso, si dovrebbero testare i propri backup!)

1 Mi Piace