Configuração de Implantação de Discurso Opinativo do MKJ

Se você fizer as atualizações pela UX, eventualmente receberá uma mensagem dizendo que precisa fazer uma atualização pela linha de comando. Não depende do Debian, mas da imagem base do Discourse.

2 curtidas

E com o método de 2 contêineres não haveria botão de atualização da GUI, correto?

A atualização da GUI vem do plugin discourse_docker. Se você tiver esse plugin, terá a atualização da GUI.

Quando há vulnerabilidades descobertas em ferramentas de manipulação de imagem, a exceção de código remoto definitivamente aconteceu no passado, o que significa que você está a um upload de imagem de um sistema comprometido.

O Clear Linux estabeleceu o padrão de quão rápido você pode inicializar no Linux. É um trabalho incrível, endosso de todo o coração.

1 curtida

Ah, isso muda um pouco as coisas então. Por algum motivo, eu estava pensando que o atualizador da GUI não funcionaria com uma instalação não padrão de 2 contêineres. Nesse caso, desde que o administrador seja tecnicamente competente, parece que não há muitas desvantagens em uma instalação de 2 contêineres. Eu definitivamente quero ter atualizações da GUI, por exemplo, se eu estiver viajando apenas com meu telefone e uma grande atualização de segurança do Discourse for lançada, eu posso pelo menos aplicá-la sem acesso SSH.

1 curtida

Essa é a minha crença. Você basicamente precisa prestar atenção o suficiente apenas para saber quando há uma atualização do Postgres ou Redis que exige a reconstrução do contêiner de dados. Você também precisa saber como executar ./launcher bootstrap web_only && ./launcher destry web_only; ./launcher start web_only, mas isso não é tão difícil. Você pode simplesmente executar um ./launcher rebuild web_only, mas isso tira o site do ar enquanto ele está sendo reconstruído.

2 curtidas

Para completar: a interface web normalmente não tem tempo de inatividade; o bootstrap/destroy/start tem tempo de inatividade mínimo e eu só faria isso normalmente com uma página de manutenção fornecida externamente, como com nginx externo, conforme documentado aqui. Mas isso é uma boa prática de qualquer maneira, se apenas para obter endereços IPv6 no contêiner.

Muito bom, obrigado. E com uma instalação de 2 contêineres, você ainda recebe notificações do painel do Discourse quando o contêiner precisa ser reconstruído? E então, nesse caso, eu poderia determinar se devo reconstruir apenas o aplicativo ou também o contêiner de dados?

1 curtida

Sim. Eu a vejo agora porque não apliquei a atualização "apenas a versão mudou" 3.1.0.beta1. :slightly_smiling_face:

1 curtida

Este é um caso de “está tudo bem até que não esteja” — as pessoas entram em pânico quando a atualização falha na interface do usuário e elas não sabem que precisam executar git pull; ./launcher rebuild app para contornar o problema. Isso acontece sempre que há uma alteração que invalida a atualização da GUI, eu acho. Aconteceu novamente:

Sinto que esse pânico destaca o valor de ter um mecanismo de atualização consistente e normal que evita essa experiência.

Ao mesmo tempo, encontrei o também infrequente caso em que o bootstrap quebra o sistema em execução: atualizações com tempo de inatividade zero ocasionalmente quebram assim, uma ou duas vezes por ano, talvez em média? Portanto, não demore entre o bootstrap e o destroy/start.

Devo atualizar o texto para deixar isso claro, então farei isso em seguida.

Ainda não implementei o LibreTranslate, mas estou considerando fazer isso para tornar meu site mais acessível internacionalmente.

Se eu conseguir fazer isso com sucesso, pretendo editar isso na postagem principal. :smiling_face:

2 curtidas

Muito disso está acima da minha compreensão, mas quero agradecer, porque as poucas configurações que você menciona com sugestões de ajuste e uma explicação das consequências sobre como a comunidade funciona já foram super preciosas para mim!

4 curtidas

Fico feliz que tenha sido útil mesmo além do meu público-alvo declarado. :tada: Eu a usei há alguns dias para configurar uma nova instância do Discourse, e me ajudou também, porque eu não me lembro de tudo isso. :smiley:

6 curtidas

Acho que pode haver um problema com a configuração do THP na wiki.

Eu estava tendo problemas com o Redis no Ubuntu:

Your Redis network connection is performing extremely poorly. Last RTT readings were [96585, 101554, 97189, 99769, 94618], ideally these should be < 1000. Ensure Redis is running in the same AZ or dat

Eu acreditei que o THP já estava desabilitado (por seguir a wiki) - mas descobri que ele ainda estava habilitado :sweat_smile:. Desabilitar o THP acabou resolvendo o problema acima para mim, se bem me lembro (final do ano passado).


Ubuntu 24.04 LTS (seguindo a wiki atual):

cat /sys/kernel/mm/transparent_hugepage/enabled
# output:
# [always] madvise never

echo 'sys.kernel.mm.transparent_hugepage.enabled=never' > /etc/sysctl.d/10-huge-pages.conf

cat /etc/sysctl.d/10-huge-pages.conf
# output:
# sys.kernel.mm.transparent_hugepage.enabled=never

sudo sysctl --system
# output:
* Applying /usr/lib/sysctl.d/10-apparmor.conf ...
* Applying /etc/sysctl.d/10-bufferbloat.conf ...
* Applying /etc/sysctl.d/10-console-messages.conf ...
* Applying /etc/sysctl.d/10-huge-pages.conf ...
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
* Applying /etc/sysctl.d/10-map-count.conf ...
* Applying /etc/sysctl.d/10-network-security.conf ...
* Applying /etc/sysctl.d/10-ptrace.conf ...
* Applying /etc/sysctl.d/10-zeropage.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /etc/sysctl.d/99-cloudimg-ipv6.conf ...
* Applying /usr/lib/sysctl.d/99-protect-links.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.apparmor_restrict_unprivileged_userns = 1
net.core.default_qdisc = fq_codel
kernel.printk = 4 4 1 7
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
kernel.kptr_restrict = 1
kernel.sysrq = 176
vm.max_map_count = 1048576
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
kernel.yama.ptrace_scope = 1
vm.mmap_min_addr = 65536
kernel.pid_max = 4194304
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1

cat /sys/kernel/mm/transparent_hugepage/enabled
# output:
# [always] madvise never

AlmaLinux 10 (seguindo a wiki atual):

cat /sys/kernel/mm/transparent_hugepage/enabled
# output:
# [always] madvise never

echo 'sys.kernel.mm.transparent_hugepage.enabled=never' > /etc/sysctl.d/10-huge-pages.conf

cat /etc/sysctl.d/10-huge-pages.conf
# output:
# sys.kernel.mm.transparent_hugepage.enabled=never

sudo sysctl --system
# output:
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /etc/sysctl.d/10-huge-pages.conf ...
* Applying /usr/lib/sysctl.d/10-map-count.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/50-redhat.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.yama.ptrace_scope = 0
vm.max_map_count = 1048576
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
fs.suid_dumpable = 2
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2
net.ipv4.conf.eth1.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.eth0.promote_secondaries = 1
net.ipv4.conf.eth1.promote_secondaries = 1
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.ping_group_range = 0 2147483647
net.core.default_qdisc = fq_codel
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_regular = 1
fs.protected_fifos = 1
net.core.optmem_max = 81920
kernel.pid_max = 4194304
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1

cat /sys/kernel/mm/transparent_hugepage/enabled
# output:
# [always] madvise never

Talvez isto seja adequado para a wiki? Pareceu funcionar no Ubuntu 24.04 e AlmaLinux 10 a partir dos testes agora:

echo 'w /sys/kernel/mm/transparent_hugepage/enabled - - - - never' | sudo tee /etc/tmpfiles.d/10-huge-pages.conf
sudo systemd-tmpfiles --create /etc/tmpfiles.d/10-huge-pages.conf

Para confirmar:

cat /sys/kernel/mm/transparent_hugepage/enabled

Saída esperada:

always madvise [never]

Que bom ouvir isso - se não soubermos se ajuda, podemos estar apenas imitando uns aos outros!

1 curtida

Eu não acho que /etc/sysctl.d tenha sido descontinuado. Você pode verificar os outros arquivos listados lá e ver qual(is) está(ão) substituindo /etc/sysctl.d/10-huge-pages.conf? Talvez um daqueles arquivos 50-priority?

A melhor solução provavelmente será mudar a prioridade da configuração de páginas grandes para prevalecer. Mas eu não estou executando nenhuma dessas versões nos meus sistemas agora.

Verifique também se o tuned está substituindo a configuração.

1 curtida

Tive um problema apenas com a aplicação da configuração do THP, vm.overcommit.memory foi aplicado como esperado via /etc/sysctl.d. Isso foi notado e resolvido em um servidor no final do ano passado. Então, tentei verificar em alguns micro VPS ontem.

Acabei de tentar isto em um micro VPS AlmaLinux 9 novo, na tentativa de ver se algum dos arquivos .conf padrão está afetando a configuração do THP:

echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# always

cat /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# [always] madvise never

sysctl --system
# saída:
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/50-redhat.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.yama.ptrace_scope = 0
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
fs.suid_dumpable = 2
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2
net.ipv4.conf.eth1.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.eth0.promote_secondaries = 1
net.ipv4.conf.eth1.promote_secondaries = 1
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.ping_group_range = 0 2147483647
net.core.default_qdisc = fq_codel
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_regular = 1
fs.protected_fifos = 1
net.core.optmem_max = 81920
kernel.pid_max = 4194304
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1

cat /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# [always] madvise never
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# never

cat /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# always madvise [never]

sysctl --system
# saída:
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/50-redhat.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.yama.ptrace_scope = 0
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
fs.suid_dumpable = 2
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2
net.ipv4.conf.eth1.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.eth0.promote_secondaries = 1
net.ipv4.conf.eth1.promote_secondaries = 1
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.ping_group_range = 0 2147483647
net.core.default_qdisc = fq_codel
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_regular = 1
fs.protected_fifos = 1
net.core.optmem_max = 81920
kernel.pid_max = 4194304
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1

cat /sys/kernel/mm/transparent_hugepage/enabled
# saída:
# always madvise [never]

É por isso que estou pedindo para você analisar os arquivos reais para encontrar o que está substituindo isso, para que eu possa fazer uma alteração informada na prioridade que recomendo para a substituição.

1 curtida

Meu entendimento atual (limitado) é que os comandos/saídas da minha postagem anterior indicam que não há substituição (override).

Analisando os arquivos em uma nova instância do AlmaLinux 9:

Estes retornaram vazios:

grep -r "transparent_hugepage" /usr/lib/sysctl.d/ /etc/sysctl.d/ /etc/sysctl.conf
grep -r "transparent" /usr/lib/sysctl.d/ /etc/sysctl.d/ /etc/sysctl.conf
grep -r "huge" /usr/lib/sysctl.d/ /etc/sysctl.d/ /etc/sysctl.conf
grep -r "page" /usr/lib/sysctl.d/ /etc/sysctl.d/ /etc/sysctl.conf

Valores padrão nos arquivos de configuração:

/usr/lib/sysctl.d/50-redhat.conf:kernel.kptr_restrict = 1
/usr/lib/sysctl.d/50-redhat.conf:net.ipv4.conf.default.rp_filter = 1
/usr/lib/sysctl.d/50-redhat.conf:net.ipv4.conf.*.rp_filter = 1
/usr/lib/sysctl.d/50-redhat.conf:-net.ipv4.conf.all.rp_filter
/usr/lib/sysctl.d/10-default-yama-scope.conf:kernel.yama.ptrace_scope = 0
/usr/lib/sysctl.d/50-libkcapi-optmem_max.conf:net.core.optmem_max = 81920
/usr/lib/sysctl.d/50-coredump.conf:kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
/usr/lib/sysctl.d/50-coredump.conf:kernel.core_pipe_limit=16
/usr/lib/sysctl.d/50-coredump.conf:fs.suid_dumpable=2
/usr/lib/sysctl.d/50-default.conf:kernel.sysrq = 16
/usr/lib/sysctl.d/50-default.conf:kernel.core_uses_pid = 1
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.default.rp_filter = 2
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.*.rp_filter = 2
/usr/lib/sysctl.d/50-default.conf:-net.ipv4.conf.all.rp_filter
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.default.accept_source_route = 0
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.*.accept_source_route = 0
/usr/lib/sysctl.d/50-default.conf:-net.ipv4.conf.all.accept_source_route
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.default.promote_secondaries = 1
/usr/lib/sysctl.d/50-default.conf:net.ipv4.conf.*.promote_secondaries = 1
/usr/lib/sysctl.d/50-default.conf:-net.ipv4.conf.all.promote_secondaries
/usr/lib/sysctl.d/50-default.conf:-net.ipv4.ping_group_range = 0 2147483647
/usr/lib/sysctl.d/50-default.conf:-net.core.default_qdisc = fq_codel
/usr/lib/sysctl.d/50-default.conf:fs.protected_hardlinks = 1
/usr/lib/sysctl.d/50-default.conf:fs.protected_symlinks = 1
/usr/lib/sysctl.d/50-default.conf:fs.protected_regular = 1
/usr/lib/sysctl.d/50-default.conf:fs.protected_fifos = 1
/usr/lib/sysctl.d/50-pid-max.conf:kernel.pid_max = 4194304

Eu estou rodando o AlmaLinux 9 para minhas instâncias do Discourse, e a configuração que forneci desabilitou com sucesso o THP em todas elas. Se desabilitar o THP através do sysctl.d não estiver funcionando quando não há substituições em vigor, e o tuned não estiver substituindo, eu pensaria que isso é um bug.

Eu pensei que você estava dizendo que não funcionava mais no AlmaLinux 10, que é o motivo pelo qual eu estava perguntando o que estava impedindo sua aplicação lá.