Nova instalação em uma nova instância EC2 com configuração padrão falha. Iniciei uma instância EC2 na AWS com Ubuntu 20.04.3 e apliquei todas as atualizações mais recentes do Ubuntu. Executei a instalação padrão simples encontrada aqui
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
./discourse-setup
A única particularidade é que, ao executar a configuração, ela falhou ao conectar ao servidor via HTTP(S) — eu havia esquecido de abrir as duas portas de entrada na AWS. Então, configurei manualmente o arquivo app.yml e executei ./launcher rebuild app após abrir as portas no grupo de segurança da AWS.
O navegador não consegue se conectar e meu log de produção mostra o seguinte:
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
Iniciei uma nova instância EC2 porque estava usando um servidor reaproveitado, também com Ubuntu 20.04.3, que apresentava exatamente o mesmo problema ao instalar o Discourse. Os mesmos erros apareciam no log de produção. Então pensei: “Vou começar do zero e tornar isso simples”.
OK, agora estou bastante convencido de que há um problema com o instalador do Discourse ao usar o Ubuntu 20.04.3 com as atualizações mais recentes. Acabei de executar o instalador novamente e, desta vez, tomei cuidado para garantir que as portas estivessem abertas, então nunca precisei configurar manualmente o arquivo app.yml (eliminando erros humanos). Tudo parecia ter corrido bem: a instalação encontrou o domínio e tudo mais. No entanto… nenhum site. O log de produção mostra:
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Exceção de Job: Erro ao conectar ao Redis em localhost:6379 (Errno::EADDRNOTAVAIL)
Erro ao conectar ao Redis em localhost:6379 (Errno::EADDRNOTAVAIL) assinatura falhou, reconectando em 1 segundo. Stack trace /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'
Isso é simples demais para eu ter cometido qualquer erro desta vez, e eu apenas executei os scripts.
Aqui estão as informações de RAM e swap. É uma instância AWS recém-lançada, sem modificações, com todas as atualizações padrão do Ubuntu. Trata-se de uma instância EC2 do tipo t2.small. Nada foi alterado, adicionado, configurado ou modificado. Os únicos comandos usados para atualizar antes da instalação foram os básicos sudo apt update e sudo apt upgrade. Na terceira tentativa, tentei a instalação padrão do Discourse em duas instâncias separadas com o mesmo sistema operacional (Ubuntu 20.04.3). Por isso, acredito que possa haver algum problema com o instalador e a versão recente.
$ free -h
total used free shared buff/cache available
Mem: 1.9Gi 973Mi 131Mi 36Mi 875Mi 855Mi
Swap: 2.0Gi 0.0Ki 2.0Gi
Espaço em disco, caso isso seja relevante:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 39G 7.8G 31G 20% /
Acabei de executar uma instalação em um novo droplet da Digital Ocean e funcionou perfeitamente. O problema não está no instalador.
Minha melhor suposição, embora não faça sentido que você tenha o erro do Redis, é que você executou o instalador tantas vezes que atingiu o limite de taxa do Let’s Encrypt, e esse é o verdadeiro problema.
Tente novamente com um nome de domínio diferente (por exemplo, forum2.exemplo.com).
Ok, então estou reconstruindo bastante porque tenho testado a transferência de um fórum de um servidor antigo.
Como diabos resolvo esse problema? Eu nem uso o Let’s Encrypt. Após a instalação bem-sucedida, atualizei o arquivo app.yml para alterar o domínio e certifiquei-me de que o modelo do Let’s Encrypt estava comentado no app.yml, mas a reconstrução não ajudou e continuo com o mesmo erro: falha no Redis. Estou preso porque a chamada ao Let’s Encrypt está embutida no instalador?
A menos que você esteja usando um proxy reverso para fornecer HTTPS, não é possível fazer isso. Você precisa ter HTTPS. E se remover o Lets Encrypt, também deve remover o modelo de HTTPS (independentemente do nome que tenha).
Não entendo muito bem por que você está recebendo o erro do Redis; talvez você tenha comentado o Redis ao comentar o Lets Encrypt? Essa é minha melhor suposição.
Bem, se você ler a thread, verá que foi uma instalação simples em uma instância totalmente nova, então eu não poderia comentar nada, pois é o instalador, com base nas perguntas, que cria o app.yml. Portanto, a falha do Redis está diretamente relacionada ao limite de taxa do Let’s Encrypt. Se isso puder ajudar a equipe de desenvolvimento de alguma forma.
Estou usando um proxy, ou melhor, o Cloudflare, para servir o certificado SSL e conectar/entregar apenas HTTPS.
Testei comentando o template HTTPS — “templates/web.ssl.template.yml” — e fiz um launcher rebuild app, claro, mantendo o template do Let’s Encrypt comentado também, e a mesma coisa aconteceu. Erro do Redis. Então, acho que estou preso, certo? Que decisão ruim do instalador, não ter uma maneira de contornar as chamadas do Let’s Encrypt. A menos que você possa me fornecer algo mais para tentar, a paciência será uma virtude nisso. Agradeço muito toda a ajuda. Estou humildemente frustrado.
Isso torna as coisas muito mais difíceis e você terá outros problemas mais adiante, a menos que pesquise cuidadosamente como usar a Cloudflare sem quebrar o Discourse.