Nova instalação falha no Ubuntu 20.04.3 LTS

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”.

Você já tentou reiniciar?

Sim, iniciei e parei a instância e reiniciei pelo terminal. Não ajudou.

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.

Você tem outro Redis instalado?

Quanta RAM você tem? Ele criou swap?

Não tenho nada instalado. É uma nova instância EC2 t2.small, então tem 2 GB de RAM. Preciso ver a swap padrão que ela cria.

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).

Bingo! Você está correto mais uma vez, funcionou.

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.

Você pode tentar seguir Set up Let’s Encrypt with multiple domains / redirects para adicionar um segundo nome de domínio ou aguardar uma semana.

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.