O container do Discourse-app inicia e depois para silenciosamente

Prezada Comunidade,

Tentei instalar uma instância privada do Discourse, seguindo as instruções oficiais em https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md. Mesmo que os scripts pareçam totalmente complexos, tive que modificar manualmente os arquivos container.yml e discourse-setup para definir minhas próprias configurações…

1º problema: apesar de sua complexidade, o script de instalação não permite a modificação da porta exposta! As portas 80/443 não podem ser usadas em meu servidor, pois já estão em uso pelo nginx. Então, tive que ajustar o script de configuração novamente para definir as portas 3080/3443 como as portas necessárias para acessar o Discourse.

Então consegui ter todos os contêineres funcionando. Olhando a pilha com o Portainer, descobri que o aplicativo inicia e para silenciosamente, e os logs não fornecem muitas informações sobre o motivo. Como redis e postgres não publicam nenhuma porta, o aplicativo discourse pode falhar porque não consegue se conectar a esses componentes? O que eu perdi ou fiz de errado?

_discourse-app_logs.txt (10,4 Ko)

Agradeço antecipadamente por qualquer ajuda!

Causado por:

Errno::EADDRNOTAVAIL: Não é possível atribuir o endereço solicitado - connect(2) para [::1]:6379

Portanto, ele não consegue se conectar ao Redis no endereço de loopback IPv6.

Oi Richard, obrigado pela resposta rápida! Não sou um profissional de TI, apenas gosto de brincar com ferramentas: qual seria a correção para este problema?

Agradeço antecipadamente por seu conselho!

Parece que você se desviou da instalação padrão ao configurar contêineres separados para Redis e Postgres, então receio não ter uma resposta imediata para você. Como você configurou as configurações do Redis dentro do Discourse?

Outra coisa: vejo redis:4-alpine. Receio que você precisará migrar para uma versão mais recente do Redis, pois o Discourse requer a versão 6.20 ou superior. No entanto, não acho que essa seja a causa do seu problema.

2 curtidas

O script de configuração funciona apenas para uma configuração padrão. Se você estiver fazendo algo mais complexo, terá que editar o yml manualmente. Isso é muito mais simples do que modificar o script.

O Discourse não funcionará em uma porta não padrão. Você precisará de um proxy reverso na frente. Veja tópicos como Execute outros sites na mesma máquina que o Discourse.

Se você não for usar o postgres e o redis fornecidos, você está por sua conta para descobrir por que o seu não funciona. Há muitas coisas que podem ser que não podemos adivinhar ou inferir. Eu recomendaria uma instalação padrão em uma VM separada para ver como as coisas funcionam antes de tentar uma configuração muito complexa.

3 curtidas

Eu não realizei nenhuma instalação ‘não padrão’! Eu, como descrito na documentação, baixei todo o material do Github, alterei apenas as portas expostas e executei o script:

  • Não alterei nada na configuração do redis, nem do postgres.
  • Não alterei nada para a versão do redis.
    Essas peças de software foram instaladas pelo script genuíno discourse-setup.

@pfaffman o que você quer dizer com “editar o yml manualmente”? De qual yml você está falando? Existem muitos arquivos .yml em “containers”…

A propósito, eu tenho um proxy reverso na máquina, que parece ter uma configuração simples: múltiplos arquivos subdomain.conf que definem a redireção subdomain:80 → porta XXX. É isso que é necessário?

Eu recomendaria uma instalação padrão em uma VM separada para ver como as coisas funcionam antes de tentar uma configuração muito complexa.

Eu não quero uma configuração complexa :blush:, apenas preciso executar o Discourse junto com outros contêineres, que é para o que o Docker foi projetado…

Obrigado novamente pela sua ajuda!

Em geral, discourse-setup não instala instâncias separadas de postgres e redis e certamente não as versões 12 e 4.

Você poderia, por favor, postar sua configuração e as alterações que você fez em container.yml e nos scripts? Certifique-se de redigir quaisquer configurações confidenciais.
Além disso, por favor, informe-nos em qual commit do repositório discourse_docker você está.

3 curtidas

Você editou tanto o discourse-setup quanto um arquivo que será sobrescrito quando você atualizar o discourse-docker. Alterar qualquer coisa além do seu app.yml é decididamente não padrão.

Por quê? E o que quer que você precisasse mudar lá, não é assim que se faz. Você precisará colocar essas alterações no seu app.yml.

O Discourse não funcionará em uma porta não padrão, então esta não é uma instalação padrão.

A instalação padrão inclui postgres e redis no contêiner único. Como apontado, você está usando versões não suportadas de redis e postgres. Você também pode fazer uma instalação de dois contêineres, como descrito aqui Mover de contêiner autônomo para contêineres web e de dados separados (e você pode usar ./discourse-setup --two-container para que discourse-setup crie contêineres de dados e web separados, embora seja um pouco mais complicado de manter (você tem que saber quando atualizar o contêiner de dados).

1 curtida

OK, então preciso:\n- remover todo o software que foi instalado com os scripts modificados (espero que isso seja facilmente reversível).\n- baixar o script novamente. Usei git clone https://github.com/discourse/discourse_docker.git /var/discourse para a instalação atual: está OK?\n- alterar possivelmente algumas configurações apenas no arquivo app.yml, antes de executar ./discourse-setup.\n- executar o script de instalação para instalação padrão (prefiro um único contêiner).\n- configurar o proxy nginx para rotear discourse.example.com:80/443 para o contêiner apropriado. A documentação dá dicas para esta parte?\n\nPor favor, complete a lista se eu pulei alguma etapa!\n\nObrigado novamente pela sua ajuda!

:white_check_mark:

Veja Run other websites on the same machine as Discourse

2 curtidas

A única coisa que ele instalará é o docker.

Parece bom.

O app.yml é criado pelo discourse-setup. Você não pode executar o discourse-setup se ele não conseguir acessar as portas, mas se você ler o código-fonte, verá que pode executar ./discourse-setup --skip-connection-test e executá-lo mesmo assim.

Seu nginx será responsável pelo let’s encrypt, então você vai querer comentar o template do let’s encrypt. Suspeito que isso seja descrito no tópico do proxy reverso vinculado acima e abaixo.

Veja Usando o Nginx Proxy Manager para gerenciar vários sites com Discourse ou Execute outros sites na mesma máquina que o Discourse (que já foi vinculado).

1 curtida

Olá @pfaffman,

Lendo a documentação em Execute outros sites na mesma máquina que o Discourse, preciso de algumas confirmações:

  • A postagem diz

Você não pode usar ./discourse-setup para configurar o Discourse se outro servidor estiver usando as portas 80 ou 443. Você precisará copiar e editar samples/standalone.yml com seu editor de texto favorito.

e entendo que preciso modificar o app.yml antes de executar o discourse-setup, como já dito no preâmbulo

Você não pode usar ./discourse-setup para configurar o Discourse se outro servidor estiver usando as portas 80 ou 443. Você precisará copiar e editar samples/standalone.yml com seu editor de texto favorito.

Você pode então confirmar o seguinte processo:

  • baixar todo o material do Github
  • executar o discourse-setup uma vez com a opção --skip-connection-test → isso criará o containers/app.yml
  • modificar o app.yml conforme descrito na documentação acima
  • atualizar o software com /var/discourse/launcher rebuild app
  • criar o site nginx para apontar para o socket do Discourse e reiniciar o nginx
  • finalmente, iniciar um navegador para acessar o Discourse em https://discourse.mydomain.com, que simplesmente aponta para o IP do servidor.

Obrigado antecipadamente por seu conselho!

Atualização:

  • baixar tudo do Github: FEITO
  • executar discourse-setup uma vez com a opção --skip-connection-test: tudo correu bem até o final, onde o script retornou
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.

Isso parece normal para mim, pois o contêiner tenta acessar as mesmas portas que o servidor web existente. No entanto, como nenhum contêiner discourse foi criado (conforme retornado por docker container ls), gostaria que você confirmasse isso antes de prosseguir com a configuração do nginw…

Obrigado antecipadamente pela sua ajuda!

Eu acho que você precisa comentar as portas.

Você quer dizer “antes de executar o discourse-setup”? Nesse caso, qual arquivo devo modificar, já que o app.yml não existe antes de eu executar o script? Quero instalar um aplicativo de 1 contêiner: devo executar o mesmo script discourse-setup novamente ou o comando /var/discourse/launcher rebuild app?

A propósito, meu processo acima está correto?

Edite o arquivo existente com nano ou similar e comente as portas. ./launcher rebuild app.

Provavelmente, no seu caso, você também pode usar --skip-rebuild, então você executaria

./discourse-setup --skip-connection-test --skeip-rebuild
nano containers/app.yml
./launcher rebuild app

Desculpe incomodar, preciso ter 100% de certeza, pois definitivamente não sou um especialista :wink::

  • Eu executo mais uma vez ./discourse-setup --skip-connection-test --skip-rebuild (a execução anterior foi sem a opção --skip-rebuild). Não preciso excluir o que foi instalado pela execução anterior.
  • Em seguida, edito o arquivo app.yml existente e comento as portas (elas já estão comentadas)
  • Em seguida, executo ./launcher rebuild app

Obrigado novamente pelo seu tempo!

Você não precisará mais executar o discourse-setup (a menos que, talvez, você altere a quantidade de RAM que possui e queira que ele atualize as configurações de memória para os padrões recomendados).

Basta editar as portas e reconstruir.

Olá Jay,

Aqui está o resultado da reconstrução desta manhã:

  • ./launcher rebuild app = OK, alguns avisos, mas o docker diz que local_discourse/up está ativo e em execução.
  • Configurei um site nginx de acordo com as instruções em Run other websites on the same machine as Discourse e reiniciei o nginx = OK.
  • Configurei uma entrada DNS para que discourse.mydomain.com aponte para o endereço IP do servidor = OK.
  • Abrir um navegador em discourse.mydomain.com me leva para… a instância Nextcloud rodando no servidor. Parece que a configuração precisa ser corrigida, pois o tráfego não está sendo roteado corretamente para o contêiner discourse…

Não quero instalar o NPM, pois li que não é uma ferramenta robusta e a configuração para discourse envolve codificação fixa de IP: devo instalar mesmo assim?

Obrigado antecipadamente por seus conselhos!

Então, isso parece ser um problema no seu proxy reverso nginx que você tem na frente da sua instalação do Discourse.

Espere…? O quê? E por que você precisaria instalar o NPM fora do contêiner?

2 curtidas