Discourse instalado em VM Ubuntu Server UNRAID atrás de NPM reverse proxy não resolvendo hostname

Olá a todos! Li vários posts aqui sem sucesso, então pensei em explicar minha configuração atual em detalhes, na esperança de que alguém possa me dar algum feedback para resolver o problema.

Atualmente, estou executando um servidor Unraid. O Unraid hospeda contêineres Docker, bem como VMs. Tenho um Nginix Reverse Proxy Manager (NPM) rodando em um contêiner Docker que lida com proxies reversos para todos os meus outros contêineres Docker que executo. Meu firewall está configurado para enviar todo o tráfego WAN nas portas 80/443 para o NPM e eu redireciono o tráfego dentro do NPM para meus contêineres.

Segui o seguinte guia: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Ele indica que é para instalação em um servidor na nuvem, embora o meu seja uma máquina bare metal aqui, auto-hospedada.

Informações do sistema em Dom, 28 de janeiro de 2024, 07:35:54 UTC

  Carga do sistema:              0.5126953125
  Uso de /:               45.9% de 13.16GB
  Uso de memória:             6%
  Uso de swap:               0%
  Processos:                125
  Usuários logados:          0
  Endereço IPv4 para docker0: 172.17.0.1
  Endereço IPv4 para enp1s0:  10.30.20.150

Iniciei uma VM no Unraid, instalei o Ubuntu Server, configurei um IP estático, instalei o Docker e baixei o Discourse. Ao executar a configuração, recebo o seguinte erro.

Nome de host para o seu Discourse? [discourse.example.com]: forum.mydomain.net

Verificando seu nome de domínio . . .
AVISO: A porta 443 do computador não parece ser acessível usando o nome de host:
AVISO: A conexão com (porta 80) também falha.

Isso sugere que forum.mydomain.net resolve para algum endereço IP que não alcança esta
máquina onde você está instalando o Discourse.

A primeira coisa a fazer é confirmar que forum.mydomain.net resolve para o endereço IP deste servidor.
Normalmente, você faz isso no mesmo local onde comprou o domínio.

Se você tem certeza de que o endereço IP resolve corretamente, pode ser um problema de firewall.
Uma pesquisa na web por "abrir portas SEU SERVIÇO NA NUVEM" pode ajudar.

Esta ferramenta foi projetada apenas para as instalações mais comuns. Se você não conseguir resolver
o problema acima, precisará editar o arquivo containers/app.yml manualmente e, em seguida, digitar

./launcher rebuild app

Consigo pingar minha VM Ubuntu no IP estático atribuído a ela em 10.30.20.150 a partir do meu contêiner NPM. Configurei minha configuração NPM para direcionar para HTTPS 10.30.20.150 porta 443, bem como porta 80 HTTP, sem sucesso. Quando a configuração falha, parece que o contêiner do Discourse é fechado dentro da VM?

Existe alguma solução alternativa para isso?
Possivelmente, editar as portas do meu firewall para contornar o proxy reverso e direcionar diretamente para a VM para que ela possa obter um certificado e executar o contêiner, e então, uma vez em execução, poder editar manualmente o config.yml para usar meu proxy reverso?
Posso editar a instalação de alguma forma para não pedir um certificado SSL e rodar na porta 80, e então lidar com a obtenção de um certificado SSL através do NPM?

Por último, vi em alguns posts que existe uma versão ‘production’ e ‘development’ do Discourse… parece que a versão dev pode ser executada em HTML em uma porta local? Se isso for verdade, imagino que eu poderia colocar tudo atrás do meu proxy reverso mais facilmente..? Pelo que li, o pacote de produção é mais fácil de manter atualizado e pode ter melhorias de desempenho.

Agradeceria muito alguma ajuda, feedback ou sugestões sobre o assunto.

Esta é a única instalação de produção suportada aqui.

Mas não estou convencido de que seja adequada para sua situação, pois você já tem um proxy reverso.

Você pode investigar o uso da imagem base do Discourse e fazer a engenharia reversa de sua própria composição personalizada:

https://hub.docker.com/r/discourse/base/

1 curtida

Você pode remover no app.yml a referência às portas 80 e 443 com um #?

esse arquivo está localizado em /var/discourse/containers? Não consigo entrar nesse diretório, diz ‘permissão negada’

então o conceito base seria editar o Dockerfile base do Discourse e remover as linhas que instalam/configuram o proxy reverso que vem com o pacote?

Não, eu criaria um docker compose totalmente personalizado (ou o que quer que você esteja usando para orquestração) e usaria um dockerfile personalizado para o Discourse.

Eu nunca fiz isso antes e parece um pouco intimidante. Não tenho ideia de por onde começar. Gostaria de saber se alguém já passou pelo caminho que estou seguindo e já fez e publicou uma solução.

Gostaria de saber se fazer algo semelhante ao que este cara fez aqui poderia isolar os contêineres criados no proxy reverso para que eu pudesse concluir uma instalação, ou resolver corretamente para meu proxy reverso externo rodando em seu próprio contêiner Docker?

2 curtidas

Está no lado avançado do trabalho de sysadmin, mas o Docker Compose é basicamente como brincar com legos muito legais - não é tão difícil quanto parece e há muita ajuda na web.

Seria uma ótima experiência de aprendizado, desenvolvendo uma habilidade muito transferível, vá em frente!

Seu link também parece outro bom lugar para tentar.

2 curtidas

Sim, é esse mesmo.

Não é tão fácil assim, porém. Quando fiz isso, ainda usei o launcher para construir uma imagem, enviá-la para um repositório e, em seguida, iniciá-la. Então você também precisa ter meios para pré-compilar assets, migrar o banco de dados e talvez outras coisas.

Seguir o método de “executar outros sites” é provavelmente o que fazer.

3 curtidas

Sim, não é trivial, mas trabalhei com uma solução Docker Compose bastante boa em um cliente - sem launcher à vista!

Também tenho uma instalação de desenvolvimento em nuvem privada usando DC…

2 curtidas