Instale Discourse em uma internet residencial com Cloudflare Tunnel

Como o Discourse agora tem suporte para rodar em um Raspberry Pi, rodar uma pequena instância em seu laboratório doméstico se tornará um caso de uso comum. No entanto, muitos ISPs residenciais bloqueiam o tráfego de entrada para as portas 80/443 que o Discourse necessita.

Para nosso site de demonstração em https://discourse-on-a-pi.falco.dev/, usamos o Cloudflare Tunnel para contornar isso, e você também pode!

Configure seu túnel

Primeiro, siga o seguinte guia:

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide

A única alteração que você precisa é mudar a URL de url: http://localhost:8000 para url: http://localhost:80. Deixe o túnel rodando em segundo plano.

Desative o Rocket Loader

Você deve desativar o Cloudflare Rocket Loader para que o Discourse funcione corretamente.

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Instale o Discourse

Siga Como instalar o Discourse em produção, mas pressione CTRL+C após ele criar o arquivo app.yml e der a contagem regressiva de 5 segundos.

Agora edite as primeiras linhas do arquivo para que ele fique assim:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se desejar adicionar o Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

E adicione a seguinte linha sob a seção env::

DISCOURSE_FORCE_HTTPS: true

E então execute ./launcher rebuild app.

Enquanto você espera, instale uma regra de página para sempre redirecionar para HTTPS, assim:

Em alguns minutos, sua nova instância do Discourse estará disponível no domínio que você usou na configuração do túnel/Discourse :tada:.

38 curtidas

Acho que é melhor mencionar a porta. Se o usuário decidir usar o túnel argo, ele precisará configurar sua porta da mesma forma que as configurações do túnel. Por exemplo:

-80:80
#-443:443

então eles precisam deixar o túnel escutar
http://localhost:80

O que eu uso é usar um socket Unix para conectá-los.

5 curtidas

Não é isso que eu menciono aqui:

?

7 curtidas

Olá Rafael,

Obrigado pelo tutorial.

Segui tudo conforme seu guia acima e tudo funciona bem, no entanto;

Ao clicar no link no e-mail para ativar minha conta, sou levado de volta para a página correta com um botão de ativação, porém este botão não funciona. Pesquisei orientações neste fórum e parece ser um problema de domínio para IP?

Confirmei que force_https está definido como true na configuração.

Alguma ideia / você encontrou este problema (captura de tela anexada) do botão que não faz nada?

3 curtidas

Ok, então consegui consertar isso.

Apenas certifique-se de que o rocket loader esteja desativado :wink:

Valeu!

6 curtidas

Finalmente, instalei o Discourse no Raspberry Pi. Mas tenho problemas com os Cloudflare Tunnels.

Não consigo acessar o site do Discourse pelo domínio, algo estranho na configuração do config.yml?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 curtidas

Qual é a saída do comando tunnel? Deve ser explícito sobre quaisquer erros que você cometeu na configuração.

3 curtidas

cloudflared tunnel info output:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF Não é possível determinar o caminho do certificado de origem padrão. Nenhum arquivo cert.pem em [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR Você precisa especificar o caminho do certificado de origem com a opção --origincert, ou definir a variável de ambiente TUNNEL_ORIGIN_CERT. Veja https://developers.cloudflare.com/argo-tunnel/reference/arguments/ para mais informações. originCertPath=
erro ao analisar o ID do túnel: Erro ao localizar o certificado de origem: o cliente não especificou o caminho do origincert ao executar do terminal
2 curtidas

Parece que você colocou o arquivo do certificado no lugar errado? Se você estiver executando como root, o arquivo deve estar em

/root/.cloudflared/

e não onde você o colocou como

2 curtidas

Já tenho o arquivo cert.pem.

2 curtidas

E você está tentando iniciar o túnel como o usuário pi ou como root?

3 curtidas

Estou usando este comando como usuário pi

cloudflared tunnel run <UUID ou NOME>

2 curtidas

Olá @bekircem,

Parece que seu Cloudflared conseguiu iniciar uma conexão com a borda da Cloudflare.

Você habilitou o Roteamento com um CNAME para seu Argo Tunnel ID na Cloudflare?

Abraços,

Alex.

3 curtidas

Olá @Stigin, obrigado pela resposta.

Sim, habilitei o roteamento da linha de comando

2 curtidas

Interessante, @bekircem - Hmm!!

Qual é o erro atual que você está recebendo ao acessar o endereço do seu site? É apenas uma página genérica de erro do Cloudflare Argo Tunnel?

Você poderia nos mostrar seus contêineres em execução executando o comando: docker ps e nos mostrar seus túneis em execução atuais com cloudflared tunnel list || Certifique-se de borrar sua rota argo / quaisquer contêineres não relevantes! :wink:

Alex.

3 curtidas

Qual erro você está recebendo atualmente ao navegar para o endereço do seu site? É apenas uma página de erro genérica do Cloudflare Argo Tunnel?

Não, não há nenhuma página de erro do Cloudflare Argo Tunnel.

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   “/sbin/boot”   11 hours ago   Up 11 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Quando uso este comando como usuário root cloudflared tunnel list

2022-01-24T15:55:03Z INF Não é possível determinar o caminho padrão do certificado de origem. Nenhum arquivo cert.pem em [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR Você precisa especificar o caminho do certificado de origem com a opção --origincert, ou definir a variável de ambiente TUNNEL_ORIGIN_CERT. Veja https://developers.cloudflare.com/argo-tunnel/reference/arguments/ para mais informações. originCertPath=
Erro ao localizar certificado de origem: o cliente não especificou o caminho do certificado de origem ao executar no terminal

Quando uso este comando como usuário pi cloudflared tunnel list

Você pode obter informações mais detalhadas para cada túnel com `cloudflared tunnel info <nome/uuid>`
ID                                   NOME      CRIADO               CONEXÕES
371dd57c-**************** ze****2022-01-24T03:35:19Z

Isso é normal?

Precisamos usar um subdomínio para DISCOURSE_HOSTNAME no arquivo config.yml, certo?

Atualização: Desinstalei o Cloudflared e o reinstalei com o usuário root e agora funciona. Ainda não entendo onde exatamente errei na minha tentativa anterior.

2 curtidas

Consegui de alguma forma finalmente rodar o site no Raspberry e ele está no ar.

Eu realmente não entendo como. Removi o Cloudflared e o reinstalei com o usuário root. E funcionou…

Tenho duas perguntas:

1- Parece que meu certificado SSL não está funcionando corretamente, então não consigo fazer login na minha conta de administrador no Discourse. (Parece estar rodando em uma aba anônima. Talvez seja algo sobre cache.) Você está usando full ou full(strict)?

2- Tenho perguntas sobre como rodar o cloudflared como um serviço. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

Executei o tunnel com o comando cloudflared tunnel run <UUID ou NAME>. Mas quando fecho a janela do iterm, ele para de funcionar?

Se você já fez login e tem um arquivo de configuração em ~/.cloudflared/, eles serão copiados para /etc/cloudflared/.

Se você não tem um arquivo de configuração, precisará criar um arquivo config.yml com os campos listados acima. Você pode passar um arquivo personalizado executando cloudflared --config CONFIG-FILE service install.

Verifiquei, não tenho um arquivo de configuração em /etc/cloudflared/. Neste caso, o que devo fazer para rodar este serviço automaticamente?

Obrigado.

2 curtidas

Perguntas mais específicas sobre o serviço Cloudflare Tunnel podem receber melhores respostas em https://community.cloudflare.com/tag/cloudflaretunnel

3 curtidas

Olá @bekircem,

Acho que reinstalar teria resolvido o problema do cloudflared não encontrar o certificado…

Em relação à execução do Cloudflare como um serviço - o arquivo de configuração que você criou ao executar o serviço manualmente precisará ser movido para /etc/cloudflared.

Não tenho certeza sobre vincular sites pessoais aqui, então, por favor, me avise se eu precisar remover isso, mas eu cobri isso em um dos meus blogs na seção chamada: ‘Configurar e Executar o Cloudflared como um Serviço

Nos diga como você se sai!

Alex.

4 curtidas

Obrigado pela resposta.

Ótimo post de blog, obrigado por compartilhar.

Executar o Cloudflared como um Serviço

sudo cloudflared service install

O arquivo config.yml é copiado automaticamente para /etc/cloudflared/.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

E está funcionando muito bem. Ainda não tentei reiniciar, mas espero que funcione.

4 curtidas