Implantar Discourse sem Docker

Alguns detalhes sobre minhas soluções:

  1. Configuração do Nginx:
    Por trás de um proxy reverso (haproxy), você precisa copiar o /var/discourse/config/nginx-config-sample.conf para /etc/nginx/sites-enabled/discourse.conf ou um destino semelhante, então substitua listen <suaportadoproxyreverso> (se necessário) e o _ de server_name pelo seu nome de host (subdominio.exemplo.com). Nada mais deve ser alterado.
  2. Páginas não exibidas (mensagem “Oops”) e registro de administrador por e-mail não funcionando:
    Magick foi a causa de não exibir páginas após as páginas de registro de administrador na primeira inicialização. Segui o arquivo indicado no log: /var/www/discourse/lib/letter_avatar.rb:112 na linha 112, havia dois comandos magick que de fato não respondiam. convert respondia, então substituí magick nesta linha por convert. Após essas correções, outro erro foi registrado. Tentando o mesmo procedimento com o comando fornecido do arquivo, o comando magick não funcionou e convert estava falhando. NB: magick --version era 7.x e convert --version deu 6.x. A causa foi que instalei primeiro imagemagick com apt, depois magick 7 a partir do código-fonte. Houve alguns conflitos e magick disse ao comando convert para estar desatualizado. Então, relancei meu script apenas com magick 7. Isso resolveu imediatamente o problema e pude ver as páginas novíssimas esperadas por dias, e o e-mail também funcionou! Magick é realmente mágico.
  3. Ainda resta o problema de conteúdo misto, mas o site funciona bem.
    NB: em puma.rb, a linha bind ENV.fetch("PUMA_BIND", "tcp://#{ENV['PUMA_BIND_ALL'] ? '' : '127.0.0.1:'}3000") deve ser assim (correção da primeira postagem).
  4. EDITAR “3.”, sobre a força do https para o discourse: Não sei exatamente por quê, mas meus navegadores não mostram mais avisos de ‘conteúdo misto’ (talvez por causa da atualização do cache), então está tudo bem agora. Só preciso terminar meu script.
3 curtidas

Confirmado que funciona!!!
ImageMagick v7 resolve o problema Ooops!
Até onde testei, está totalmente funcionando.
Testarei o restante dos recursos e reportarei o mais rápido possível.

1 curtida

O que eu fiz para testar foi definir a variável de ambiente PUMA_BIND ao executar o puma.

Em relação ao ImageMagick, por algum motivo o Discourse está falhando ao executar uma conversão de imagem na interface web, quando eu carrego uma imagem grande ele gentilmente se recusa a convertê-la… Ainda estou depurando o problema.

Algum avanço na depuração? Do meu lado, estou trabalhando em magick.
Em algumas imagens de cerca de 50ko, no navegador um pop-up exibe:
timeout -k 40.0 20 magick gif:/tmp/RackMultipart20250927-23598-xrrp6e.gif -auto-orient -background white -interlace none -flatten -debug all -quality 90 jpg:/tmp/image20250927-23598-9ujq3d.jpg e nenhuma imagem é carregada
Se o tamanho for maior, nenhum pop-up, mas a roda de carregamento gira em loop infinitamente sem resultado. Nenhum erro é registrado em /var/www/discourse/log.

Mesmo problema para mim :joy::sob:

A única maneira que consegui fazer funcionar foi usando o imagemagick do repositório brew.

MAS ele falha quando a imagem tem mais de 3MB… talvez eu tenha configurado uma política muito restritiva.

Dê uma chance!!!

Estou testando a instalação do docker, mas acho que é muito estúpido implantar nginx, unicorn, redis, postgresql e o resto em APENAS um contêiner… não faz sentido algum. E não há documentação de infraestrutura para implantações grandes… Trabalhei com TI por mais de 20 anos e só vejo problemas chegando no futuro próximo usando tal infra.

Sem falar no “docker The Space Eater” (como Dormammu) :rofl::rofl:

Este problema desapareceu com a seguinte solução descrita no final:

Depuração 1: bundle db:create exibe, também nos logs na primeira inicialização:


OID 21096 desconhecido: falha ao reconhecer o tipo de ‘embeddings’. Será tratado como String.
Trabalhador pngquant: pngquant não encontrado; por favor, forneça o binário apropriado ou desative este trabalhador (argumento --no-pngquant ou :pngquant => false através das opções)
Trabalhador oxipng: oxipng não encontrado; por favor, forneça o binário apropriado ou desative este trabalhador (argumento --no-oxipng ou :oxipng => false através das opções)
Trabalhador jhead: jhead não encontrado, jpegtran não encontrado; por favor, forneça o binário apropriado ou desative este trabalhador (argumento --no-jhead ou :jhead => false através das opções)
Trabalhador jpegoptim: jpegoptim não encontrado; por favor, forneça o binário apropriado ou desative este trabalhador (argumento --no-jpegoptim ou :jpegoptim => false através das opções)

Depuração 2: Alguns comandos magick com arquivos exibem:

nenhum delegate de decodificação para este formato de imagem

Este último problema é mencionado aqui.

A solução está aqui (instala magick com plugins de formatos):

t=$(mktemp) && \
wget 'https://dist.1-2.dev/imei.sh' -qO "$t" && \
bash "$t" && \
rm "$t"

Depois disso, meu tamanho de upload pode ser de até 518KB. Acima disso, não. Isso é apenas para imagens. Todos os outros documentos, áudio e vídeo funcionam.

Solução temporária para o problema restante:
Eu verifiquei nas configurações de administrador, discourse.conf, nginx/sites-enables/discourse.conf, na pasta git. Finalmente, em Painel de Admin/Parâmetros/Arquivos, desativei “Otimização de mídia do compositor de imagem ativada”, então tudo está funcionando bem. Posso fazer upload de qualquer imagem.

Sim, IMEI é quase a mesma solução que usar o brew, mas tenho certeza que não vai ocupar cerca de 2 GB de disco :rofl::rofl::sob::sob::sob::face_with_symbols_on_mouth::face_with_symbols_on_mouth::face_with_symbols_on_mouth:

Vou verificar sua solução para o tamanho máximo de arquivos em uploads.

Também estou lutando com uma solução para enviar e-mails “de graça” (estou em um estágio inicial e não quero contratar mailtrap/mailgun/etc…)

Por que você não instala um servidor de e-mail? Eu tenho o meu e automatizei a instalação. Me diga se você está interessado.

Claro! Me envie as instruções ou o repositório do Git por DM! :grinning_face_with_smiling_eyes:

Pare de usar servidores de e-mail auto-hospedados há muitos anos…

Ao executar rake assets:precompile, apareceu a mensagem No such file or directory - brotli, basta instalá-lo com um gerenciador de pacotes.

2 curtidas

Encontrei este erro:

bundler: failed to load command: puma (/home/mry/.rbenv/versions/3.4.6/bin/puma)
/home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/cluster.rb:472:in 'Puma::Cluster#run': undefined method 'wait_readable' for nil (NoMethodError)

            if read.wait_readable([0, @next_check - Time.now].max)
                   ^^^^^^^^^^^^^^
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/launcher.rb:202:in 'Puma::Launcher#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/lib/puma/cli.rb:73:in 'Puma::CLI#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/puma-7.0.4/bin/puma:10:in '<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/bin/puma:25:in 'load'
        from /home/mry/.rbenv/versions/3.4.6/bin/puma:25:in '<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in 'load'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in 'Bundler::CLI::Exec#kernel_load'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in 'Bundler::CLI#exec'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in 'Bundler::Thor.dispatch'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:28:in 'block in <top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in 'Bundler.with_friendly_errors'
        from /home/mry/.rbenv/versions/3.4.6/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:20:in '<top (required)>'
        from /home/mry/.rbenv/versions/3.4.6/bin/bundle:25:in 'load'
        from /home/mry/.rbenv/versions/3.4.6/bin/bundle:25:in '<main>'

então o Puma reinicia sozinho. O que devo fazer para evitar isso?

Editado: Isso parece ser um problema pertencente ao Puma desde o Ruby 3.4.0. Resolvido desabilitando o YJIT.

Então use a versão 3.3.7. Esta é a versão que estou usando.

Estou com muita preguiça de baixar novamente os gems, apenas desabilitando YJIT e continuando a usar 3.4.6.