Imagem e tamanho de instalação do Discourse. Limpar /var/lib/docker/overlay2?

Olá, instalei o Discourse em uma máquina nova e dedicada seguindo o guia em discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub .

O servidor possui 15 GB de disco e, mesmo com a instalação não estando em produção (menos de 10 usuários, sem anexos, algumas postagens criadas e excluídas), o tamanho da instalação parece 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

Tentei o seguinte, mas não ajudou:

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

Estou preocupado de que, em produção, a instalação consuma cada vez mais espaço e possa causar falhas.
Poderia me orientar sobre qual é o tamanho normal da imagem Docker e da instalação, e o que posso fazer para liberar espaço?
Obrigado

1 curtida

Vou ficar interessado em saber o que significa a imagem do Docker <none>. (Edição: parece que, se uma imagem <none> aparecer em docker images -a, isso não é muito importante, mas se aparecer em docker images, então é um desperdício de espaço. Eu esperava que a limpeza do launcher ajudasse, mas não ajudou você…)

Note que o uso do sistema de arquivos overlay, conforme visto pelo df, corresponde ao uso do sistema de arquivos raiz: há muitos dados fazendo dupla função e você precisa tomar cuidado para não contar duas vezes. No seu caso, o espaço disponível é de 3,2 GB e esse é o número que deve preocupar. Pode haver alguma limpeza a ser feita.

Vou mostrar minhas estatísticas semelhantes abaixo. Tenho dois fóruns, cada um em um host diferente. Um host tem 20 GB e o outro tem 25 GB de espaço. Acredito que 15 GB podem ser muito justos, especialmente quando o processo de atualização exige 5 GB de espaço livre antes de começar.

# 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

Veja também Corrigindo o Discourse após disco cheio :

e Requisitos mínimos para usar o Discourse? :

e Atualização 2.6.0 beta 3 falhou em disco e/ou espaço de memória:

1 curtida

Uma atualização: como fiz um backup e executei uma atualização, também realizei uma limpeza.

Tenho bastante certeza de que as ferramentas para gerenciar imagens do Docker são preferíveis à ação direta em /var/lib/docker/overlay2. E a limpeza automática é preferível a essas ferramentas. (Mas, conforme mencionado nos posts vinculados, existem outras formas pelas quais o espaço em disco é utilizado: backups, arquivos de swap, arquivos de journal, uploads, imports, arquivos de log e assim por diante)

Aqui está o que eu vi, como um ‘depois’ em relação ao ‘antes’ postado acima — note que o ponto de partida tem menos espaço livre em disco, provavelmente por causa do 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 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 curtida

Eu diria que você precisa de pelo menos 25 GB, mas @Ed_S disse que conseguiu fazer funcionar com 20. E até 25 GB é um pouco apertado na minha experiência.

1 curtida

Olá a todos,
obrigado pela resposta.

Verifiquei o journal com

# journalctl --disk-usage
Arquivos de journal arquivados e ativos ocupam 1,5G no sistema de arquivos.

e executei este comando para liberar espaço:
# journalctl --vacuum-time=10d

Agora tenho 1GB a mais.
Minha pergunta era sobre o tamanho real necessário para o Discourse.
Na verdade, meus backups, como não estão em produção, têm cerca de 10MB cada, totalizando 3 backups (30MB).

Entendo a necessidade de espaço durante a atualização, mas durante a execução, espero poder salvar a versão atual e ter a chance de excluir as versões antigas.
Precisamos de todo o diff no overlay ou podemos mesclar todo o conteúdo de alguma forma para recuperar espaço? Também não vejo nenhum volume montado, então imagino que o Discourse salve todos os dados lá.

@Ed_S, aqui está o resultado do 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 curtida

No tópico vinculado, vemos uma situação em que ./launcher cleanup não ajudou, mas docker system prune --all --volumes --force sim. Não sei por que isso aconteceria.

Não entendo como as imagens do Docker se empilham, por que os diretórios diff são tão grandes ou por que o uso de disco do Docker resulta em um valor muito maior do que o relatado pelo próprio Docker.

No entanto, vale ressaltar que minimizar o uso de disco exige esforço: nem o Docker nem o Discourse priorizam a minimização do uso de disco. Ambos os projetos preferem focar em melhorar o produto e manter as coisas simples.

Estou executando com sucesso em uma instância de 20 GB. Dada a necessidade de manter 5 GB livres para atualizações, isso significa, na prática, um limite de 15 GB de espaço em disco utilizado. No seu caso, com uma instância de 15 GB, você estaria tentando manter o uso abaixo de 10 GB. Podemos esperar que isso seja mais difícil, talvez até impossível. Com certeza existe um mínimo necessário.

Tenho quase certeza de que vi um tópico onde a recomendação era remover completamente o Docker e o Discourse, deixando apenas a configuração do site e o banco de dados, e reinstalar. Não faria isso de ânimo leve e, certamente, não o faria sem um backup! Infelizmente, não consigo encontrar esse tópico no momento.

Meu “docker volume ls” está vazio, depende se as pessoas montaram volumes.

Seria bom ter uma especificação mais oficial ou o tamanho esperado da instalação; talvez existam informações em algum lugar, mas não encontrei.
Entendo que, no mundo de hoje, 20 GB não é muito, mas quando se trata de backup, transferência remota, duplicação e assim por diante, é um desperdício de espaço que talvez possa ser evitado se soubermos como economizá-lo desde o início.

A instalação sem Docker é possível, mas, até onde sei, não é suportada caso ocorra algum problema.

E 25 GB é o que o usuário típico iniciante e de baixo orçamento que usa o Digital Ocean recebe. Esse é realmente o público-alvo.

O conjunto de pessoas que tem a expertise para gerenciar um espaço em disco menor que 25 GB e que não têm orçamento para 25 GB de espaço em disco é muito pequeno. Acredito que você seja a primeira pessoa a fazer esse pedido nos últimos 5 anos.

Você poderia economizar um pouco gerenciando seus próprios backups e fazendo backup remotamente. Um único backup requer três cópias: a cópia antiga, a nova cópia não comprimida e a nova cópia comprimida. Essa é a maior economia de espaço que consigo pensar, mas não afirmo ter muitos conhecimentos especiais sobre Docker.

Você também poderia construir a nova imagem remotamente em um servidor temporário e enviá-la para um repositório. Assim, não precisaria do espaço extra do Docker localmente. Essa provavelmente é sua melhor opção, mas não há um método bem documentado para fazer isso e, em grande parte, não é suportado (embora seja mais suportado do que uma instalação sem Docker). Se você me contratasse para fazer isso, custaria anos do que 10 GB de espaço em disco custam. Já considerei um serviço onde eu construiria essas imagens (essencialmente uma versão melhor suportada da Bitnami), mas não cheguei a isso porque não acredito que haja um mercado que justifique o tempo de desenvolvimento.

Estou curioso para saber quanto custa o seu servidor de 15G e de qual fornecedor você o adquiriu. Minha máquina de 25G me custa US$ 6 por mês na Digital Ocean, e minha máquina de 20G me custa US$ 3 na Hetzner.

Se você não espera precisar depurar nenhum comportamento a partir dos logs do sistema, pode ser bastante rigoroso ao podar os journals.

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

embora o que eu tenha feito seja alterar a política:

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

O uso de disco na máquina de 20G, que tem um fórum muito pequeno e de baixa atividade, é assim:

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

sistema operacional:

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/

edição: ah, mas estamos contando duas vezes, veja em vez disso

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

o próprio fórum, dentro do acima:

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

Estou rodando Ubuntu 18.04, enquanto parece que você está rodando algo mais como 20.04, que provavelmente é maior.

Eu uso diferentes VPS; tenho algumas VMs na Contabo e outras no Azure. Para mim, a questão é saber se o que mantenho está sendo mantido e configurado conforme o esperado (tamanho, limpeza, etc.).

Obrigado pela dica sobre alterar a política do journald. Fiz isso (eu já havia limpo antes, então a economia foi pequena, mas pelo menos agora não preciso mais verificar isso).

Seu uso de disco é mais ou menos igual ao meu.

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

Eu optaria por excluir o Docker e reconstruir, mas como nenhum volume fixo está montado para o Docker, estou preocupado em perder os dados do fórum na etapa de exclusão. Vou aguardar um procedimento mais oficial sobre isso.

Sim, vale a pena buscar confirmação. Tenho quase certeza de que todos os dados do fórum estão em /var/discourse.

Outra abordagem que pode estar disponível para você é iniciar uma nova instância e instalar o Discourse do zero, para ver como fica. (De qualquer forma, deve-se testar os backups!)

1 curtida