Imagen de Discourse y tamaño de instalación. ¿Limpiar /var/lib/docker/overlay2?

Hola, instalé Discourse en una máquina nueva y dedicada siguiendo la guía en discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

El servidor tiene 15 GB de disco y, aunque la instalación no está en producción (menos de 10 usuarios, sin archivos adjuntos, algunos posts creados y eliminados), parece que el tamaño de la instalación es bastante grande.

#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

Intenté esto pero no ayudó:

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

Me preocupa que, una vez en producción, la instalación consuma cada vez más espacio y pueda fallar.
¿Podrías indicarme cuál es el tamaño normal de la imagen de Docker y de la instalación, y qué puedo hacer para liberar espacio?
Gracias.

1 me gusta

Me gustaría saber qué significa la imagen de Docker <none>. (Edición: parece que si aparece una imagen <none> en docker images -a, no es muy importante, pero si aparece en docker images, entonces es un desperdicio de espacio. Esperaba que la limpieza del lanzador ayudara, pero no te ha ayudado…)

Ten en cuenta que el uso del sistema de archivos overlay visto por df coincide con el uso del sistema de archivos raíz: hay muchos datos que cumplen una doble función y debes tener cuidado de no contarlos dos veces. En tu caso, el espacio disponible es de 3,2 GB y ese es el dato que debes preocuparte. Probablemente haya que hacer algo de limpieza.

A continuación mostraré mis estadísticas similares. Tengo dos foros, cada uno en un host diferente. Un host tiene 20 GB y el otro 25 GB de espacio. Creo que 15 GB podrían resultar muy justos, especialmente cuando el proceso de actualización requiere 5 GB de espacio libre antes de comenzar.

# 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

Consulta también Arreglar Discourse después de que el disco se llene:

y Requisitos mínimos para usar Discourse?:

y La actualización de 2.6.0 beta 3 falló por falta de espacio en disco y/o memoria:

1 me gusta

Una actualización: después de realizar una copia de seguridad y ejecutar una actualización, también ejecuté una limpieza.

Estoy bastante seguro de que las herramientas para gestionar imágenes de Docker son preferibles a actuar directamente sobre /var/lib/docker/overlay2. Y la limpieza automática es preferible a esas herramientas. (Pero como se señala en las publicaciones vinculadas, hay otras formas en que se utiliza el espacio en disco: copias de seguridad, archivos de intercambio, archivos de registro, subidas, importaciones, archivos de registro, etc.)

Esto es lo que vi, como un “después” del “antes” publicado anteriormente; tenga en cuenta que el punto de partida tiene menos espacio libre en el disco, probablemente debido a la copia de seguridad:

# 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 me gusta

Diría que necesitas al menos 25 GB, pero @Ed_S dijo que lo logró con 20. Y aunque 25 es un poco justo en mi experiencia.

1 me gusta

Hola a todos,
gracias por vuestra respuesta.

He revisado el registro con

# journalctl --disk-usage
Los registros archivados y activos ocupan 1.5G en el sistema de archivos.

y he ejecutado este comando para liberar espacio:
# journalctl --vacuum-time=10d

Ahora tengo 1 GB más.
Mi pregunta pura era sobre el tamaño real necesario de Discourse.
En realidad, mis copias de seguridad, al no estar en producción, son de unos 10 MB, para un total de 3 copias de seguridad (30 MB).

Entiendo la necesidad de espacio durante la actualización, pero durante la ejecución espero guardar la versión actual y tener la oportunidad de eliminar las versiones antiguas.
¿Necesitamos todas las diferencias en el overlay o podemos fusionar todo el contenido de alguna manera para recuperar espacio? Tampoco veo ningún volumen montado, así que imagino que Discourse guarda todos los datos allí.

@Ed_S, aquí está el resultado 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 me gusta

En el hilo enlazado vemos una situación donde ./launcher cleanup no ayudó, pero docker system prune --all --volumes --force sí lo hizo. No sé por qué ocurriría eso.

No entiendo cómo se apilan las imágenes de Docker, por qué los directorios diff son tan grandes, ni por qué el uso de disco de Docker resulta mucho mayor que lo que Docker reporta como tamaños.

Sin embargo, vale la pena señalar que minimizar el uso de disco requiere esfuerzo: ni Docker ni Discourse priorizan la minimización del uso de disco. Ambos proyectos prefieren centrarse en mejorar el producto y mantener las cosas simples.

Estoy ejecutando con éxito en una instancia de 20 GB. Dada la necesidad de mantener 5 GB libres para actualizaciones, eso significa en realidad un límite de 15 GB en el espacio de disco utilizado. En tu caso, con una instancia de 15 GB, estarías intentando mantenerte dentro de 10 GB de uso. Podemos esperar que eso sea más difícil, quizás incluso imposible. Ciertamente existe un mínimo.

Estoy bastante seguro de que vi un hilo donde el consejo era eliminar todo lo relacionado con Docker y Discourse, dejando solo la configuración del sitio y la base de datos, y luego reinstalar. No lo haría a la ligera, y definitivamente no lo haría sin una copia de seguridad. Lamentablemente, no puedo encontrar ese hilo en este momento.

Mi comando “docker volume ls” aparece vacío; depende de si se han montado volúmenes.

Sería útil contar con una especificación más oficial o conocer el tamaño esperado de la instalación. Quizás exista esta información en algún lugar, pero no la he encontrado.

Entiendo que en el mundo actual 20 GB no son muchos, pero cuando se trata de copias de seguridad, transferencias remotas, duplicación y demás, es un desperdicio de espacio que quizás se podría evitar si supiéramos cómo ahorrarlo desde el principio.

La instalación sin Docker es posible, pero, hasta donde sé, no está soportada en caso de que surjan problemas.

Y 25 GB es lo que obtiene el usuario típico novato y de bajo presupuesto que utiliza Digital Ocean. Ese es realmente el público objetivo.

El grupo de personas que tiene la experiencia para gestionar un espacio en disco inferior a 25 GB y que no tiene el presupuesto para 25 GB de espacio en disco es muy pequeño. Creo que eres la primera persona que ha hecho esta solicitud en los últimos cinco años.

Podrías ahorrar un poco gestionando tus propias copias de seguridad y realizándolas de forma remota. Una sola copia de seguridad requiere tres copias: la copia antigua, la nueva copia sin comprimir y la nueva copia comprimida. Ese es el mayor ahorro de espacio que se me ocurre, pero no afirmo tener muchos conocimientos especiales sobre Docker.

También podrías idear una forma de construir la nueva imagen de forma remota en un servidor temporal y enviarla a un repositorio. De ese modo, no necesitarías el espacio adicional de Docker localmente. Esa es probablemente tu mejor opción, pero no hay una forma bien documentada de hacerlo y, en su mayoría, no está soportado (aunque sí más que una instalación sin Docker). Si me contrataras para hacerlo, costaría años de lo que cuestan 10 GB de espacio en disco. He considerado un servicio donde yo construiría esas imágenes (esencialmente un Bitnami mejor soportado), pero no he podido dedicarme a ello porque creo que no hay un mercado que justifique el tiempo de desarrollo.

Me gustaría saber cuánto cuesta tu servidor de 15G y de qué proveedor es. Mi máquina de 25G me cuesta 6 dólares al mes en Digital Ocean, y mi máquina de 20G me cuesta 3 dólares en Hetzner.

Si no esperas tener que depurar ningún comportamiento a partir de los registros del sistema, puedes ser muy drástico al podar los journals.

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

aunque lo que yo hice fue cambiar la política:

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

El uso del disco en la máquina de 20G, que tiene un foro muy pequeño y de baja actividad, es así:

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

edición: aha, pero estamos contando dos veces, mira en su lugar

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

el propio foro, dentro de lo anterior:

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

Estoy ejecutando Ubuntu 18.04, mientras que parece que tú estás ejecutando algo más parecido a 20.04, que probablemente sea más grande.

Uso diferentes VPS; tengo algunas máquinas virtuales en Contabo y otras en Azure. Para mí, la cuestión es saber si lo que mantengo está bien mantenido y configurado como se espera (tamaño, limpieza, etc.).

Gracias por el consejo sobre cambiar la política de journald; lo hice (ya había limpiado antes, así que el ahorro es pequeño, pero al menos ahora no tengo que revisarlo).

El uso de disco es más o menos igual al mío:

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

Consideraría eliminar Docker y reconstruirlo, pero como no hay un volumen fijo montado para Docker, me preocupa perder los datos del foro durante la eliminación. Esperaré a que haya un procedimiento oficial al respecto.

Sí, vale la pena buscar confirmación. Estoy bastante seguro de que todos los datos del foro están en /var/discourse.

Otro enfoque que podría estar disponible para ti es iniciar una nueva instancia e instalar Discourse de nuevo para ver cómo queda. (¡En cualquier caso, se debe probar las copias de seguridad!).

1 me gusta