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?
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?
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.
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.
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.
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 , apenas preciso executar o Discourse junto com outros contêineres, que é para o que o Docker foi projetado…
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á.
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).
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!
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.
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.
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…
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?
Desculpe incomodar, preciso ter 100% de certeza, pois definitivamente não sou um especialista :
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)
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).
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?