Taille de l'image et de l'installation de Discourse. Nettoyer /var/lib/docker/overlay2 ?

Bonjour, j’ai installé Discourse sur une nouvelle machine dédiée en suivant le guide à l’adresse discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

Le serveur dispose de 15 Go d’espace disque, et même si l’installation n’est pas en production (moins de 10 utilisateurs, pas de pièces jointes, quelques publications créées et supprimées), il semble que la taille de l’installation soit plutôt importante.

#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

J’ai essayé cela, mais cela n’a pas aidé.

# /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

Je m’inquiète car, une fois en production, l’installation pourrait consommer de plus en plus d’espace et cela pourrait causer des problèmes.
Pourriez-vous me conseiller sur la taille normale de l’image Docker et de l’installation, et ce que je peux faire pour libérer de l’espace ?
Merci

1 « J'aime »

Je serais intéressé de savoir ce que signifie l’image Docker <none>. (Édition : il semble que si une image <none> apparaît dans docker images -a, ce n’est pas très grave, mais si elle apparaît dans docker images, c’est un gaspillage d’espace. J’espérais que le nettoyage du lanceur aiderait, mais cela ne vous a pas aidé…)

Notez que l’utilisation du système de fichiers overlay, telle que vue par df, correspond à l’utilisation du système de fichiers racine : il y a beaucoup de données qui font double emploi et vous devez faire attention à ne pas compter deux fois la même chose. Dans votre cas, l’espace disponible est de 3,2 Go, et c’est ce chiffre qui doit vous inquiéter. Il y a probablement du ménage à faire.

Je vais afficher ci-dessous mes statistiques similaires. J’ai deux forums, chacun sur un hôte différent. Un hôte dispose de 20 Go et l’autre de 25 Go d’espace. Je pense que 15 Go pourraient s’avérer très limités, surtout lorsque le processus de mise à jour exige 5 Go d’espace libre avant de commencer.

# 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

Voir également Correction de Discourse après saturation du disque :

et Exigences minimales pour utiliser Discourse ? :

et Échec de la mise à jour 2.6.0 beta 3 due à un problème d’espace disque et/ou mémoire :

1 « J'aime »

Mise à jour : après avoir effectué une sauvegarde et lancé une mise à jour, j’ai également exécuté un nettoyage.

Je suis assez convaincu que les outils de gestion des images Docker sont préférables à une action directe sur /var/lib/docker/overlay2. Et le nettoyage automatique est préférable à ces outils. (Mais comme indiqué dans les articles liés, il existe d’autres façons dont l’espace disque est utilisé : sauvegardes, fichiers d’échange, fichiers de journalisation, uploads, imports, fichiers journaux, etc.)

Voici ce que j’ai observé, en tant que « après » par rapport au « avant » publié ci-dessus — notez que le point de départ présente moins d’espace disque libre, probablement à cause de la sauvegarde :

# 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
# /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
Deleted Images:
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*

Total reclaimed space: 2.456GB
# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 months ago        2.7GB
<none>                <none>              30e4746e631e        3 months ago        2.23GB
# docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
local_discourse/app   latest              8da0107aba03        2 months ago        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 « J'aime »

Je dirais qu’il vous faut au moins 25 Go, mais @Ed_S a indiqué avoir réussi avec 20. Et même 25 Go est un peu juste selon mon expérience.

1 « J'aime »

Bonjour à tous,

Merci pour votre réponse.

J’ai vérifié l’utilisation du journal avec :

# journalctl --disk-usage
Les journaux archivés et actifs occupent 1,5 Go dans le système de fichiers.

Puis j’ai exécuté cette commande pour libérer de l’espace :
# journalctl --vacuum-time=10d

J’ai maintenant 1 Go de plus.
Ma question pure concernait la taille réelle nécessaire pour Discourse.
En fait, mes sauvegardes, comme elles ne sont pas en production, font environ 10 Mo chacune, soit un total de 3 sauvegardes (30 Mo).

Je comprends le besoin d’espace pendant la mise à jour, mais pendant l’exécution, je m’attends à pouvoir sauvegarder la version actuelle et avoir la possibilité de supprimer les anciennes versions.
Avons-nous besoin de toutes les différences dans le système en couches (overlay) ou pouvons-nous fusionner tout le contenu d’une manière ou d’une autre pour récupérer de l’espace ? Je ne vois également aucun volume monté, donc j’imagine que Discourse y stocke toutes les données.

@Ed_S voici le résultat de la commande :

~# 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 « J'aime »

Dans le fil de discussion lié, nous constatons une situation où ./launcher cleanup n’a pas aidé, mais docker system prune --all --volumes --force a fonctionné. Je ne sais pas pourquoi.

Je ne comprends pas la manière dont les images Docker s’empilent, pourquoi les répertoires diff sont si volumineux, ou pourquoi l’utilisation du disque par Docker est bien supérieure aux tailles rapportées par Docker lui-même.

Cependant, il est important de noter que la minimisation de l’utilisation du disque demande des efforts : ni Docker ni Discourse ne considèrent cela comme une priorité. Les deux projets préfèrent se concentrer sur l’amélioration du produit et le maintien de la simplicité.

Je fonctionne avec succès sur une instance de 20 Go. Étant donné la nécessité de garder 5 Go libres pour les mises à niveau, cela représente en réalité une limite de 15 Go d’espace disque utilisé. Dans votre cas, avec une instance de 15 Go, vous devriez essayer de rester dans une utilisation de 10 Go. Nous pouvons nous attendre à ce que cela soit plus difficile, voire même impossible. Il existe sûrement un minimum incompressible.

Je suis presque certain d’avoir vu un fil de discussion où le conseil était de supprimer tout Docker et Discourse, en ne conservant que la configuration du site et la base de données, puis de réinstaller. Je ne le ferais pas à la légère, et certainement pas sans une sauvegarde ! Malheureusement, je ne parviens pas à retrouver ce fil pour le moment.

Mon docker volume ls est vide ; cela dépend du fait que les utilisateurs aient monté un volume.

Il serait utile d’avoir une spécification officielle plus détaillée ou une estimation de la taille requise pour l’installation. Peut-être que ces informations existent quelque part, mais je ne les ai pas trouvées.

Je comprends que, dans le monde d’aujourd’hui, 20 Go ne représentent pas beaucoup, mais lorsqu’il s’agit de sauvegardes, de transferts distants, de duplication, etc., c’est un gaspillage d’espace qui pourrait être évité si l’on savait comment économiser cet espace dès le départ.

L’installation sans Docker est possible, mais, à ma connaissance, elle n’est pas prise en charge en cas de problème.

Et 25 Go, c’est ce que l’utilisateur typique débutant et à faible budget qui utilise Digital Ocean obtient. C’est vraiment la cible visée.

L’ensemble des personnes ayant l’expertise pour gérer un espace disque inférieur à 25 Go tout en n’ayant pas le budget pour 25 Go d’espace disque est très restreint. Je pense que vous êtes la première personne à avoir formulé une telle demande depuis cinq ans.

Vous pourriez économiser un peu en gérant vos propres sauvegardes et en les stockant à distance. Une seule sauvegarde nécessite trois copies : l’ancienne copie, la nouvelle copie non compressée et la nouvelle copie compressée. C’est la méthode d’économie d’espace la plus importante qui me vienne à l’esprit, mais je ne prétends pas avoir une connaissance approfondie de Docker.

Vous pourriez également imaginer construire la nouvelle image à distance sur un serveur temporaire, puis la pousser vers un dépôt. Ainsi, vous n’auriez pas besoin d’espace Docker supplémentaire localement. C’est probablement votre meilleure option, mais il n’existe aucune méthode bien documentée pour le faire et cela n’est généralement pas pris en charge (bien que davantage qu’une installation sans Docker). Si vous m’embauchiez pour le faire, cela vous coûterait plusieurs années de ce que 10 Go d’espace disque coûtent. J’ai envisagé un service où je construirais ces images (essentiellement une version Bitnami mieux prise en charge), mais je n’ai pas encore eu le temps de le faire car je ne pense pas qu’il existe un marché justifiant le temps de développement.

Je serais intéressé de savoir combien coûte votre serveur de 15 Go et auprès de quel fournisseur. Ma machine de 25 Go me coûte 6 par mois chez Digital Ocean, et celle de 20 Go me coûte 3 chez Hetzner.

Si vous ne prévoyez pas avoir à déboguer un comportement à partir des journaux système, vous pouvez être très radical dans le nettoyage des journaux.

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

Bien que ce que j’ai fait, c’est modifier la stratégie :

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

L’utilisation du disque sur la machine de 20 Go, qui héberge un très petit forum à faible activité, est la suivante :

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

Système d’exploitation :

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/

Édition : ah, mais nous comptons en double, voyez plutôt :

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

Le forum lui-même, dans ce qui précède :

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

Je tourne sous Ubuntu 18.04, alors qu’il semble que vous utilisiez quelque chose de plus proche de 20.04, ce qui est probablement plus volumineux.

J’utilise différents VPS : j’ai quelques VM chez Contabo et d’autres sur Azure. Pour moi, la question est de savoir si ce que je maintiens l’est bien et configuré comme prévu (taille, nettoyage, etc.).

Merci pour l’astuce concernant le changement de politique pour journald, je l’ai appliquée (j’avais déjà nettoyé avant, donc l’économie est minime, mais au moins, je n’ai plus besoin de vérifier).

Votre utilisation du disque est à peu près égale à la mienne :

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

Je pencherais pour supprimer Docker et reconstruire, mais comme aucun volume fixe n’est monté pour Docker, je crains de perdre les données du forum lors de la suppression. J’attendrai donc une procédure officielle à ce sujet.

Oui, il vaut la peine de chercher une confirmation. Je suis presque certain que toutes les données du forum se trouvent dans /var/discourse.

Une autre approche qui pourrait être à votre disposition consiste à lancer une nouvelle instance, à installer Discourse fraîchement et à voir à quoi cela ressemble. (On devrait de toute façon tester ses sauvegardes !)

1 « J'aime »