Executando o Discourse docker junto com o Apache

Olá.

Estou tentando configurar o Discourse em Docker no meu servidor existente. Não estou executando nenhum outro container Docker.

Meu servidor roda o Apache (sites WordPress) e alguns outros serviços web.

Não consigo descobrir como rotear meu subdomínio ‘forum.rebelscience.club’ para o meu container Docker.

Quando me perguntam:

Hostname for your Discourse? [discourse.example.com]: forum.rebelscience.club

Vejo isso:

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:  forum.rebelscience.club.
WARNING: Connection to http://forum.rebelscience.club (port 80) also fails.

This suggests that forum.rebelscience.club resolves to some IP address that does not reach this 
machine where you are installing discourse.

The first thing to do is confirm that forum.rebelscience.club resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

Não tenho certeza de como configurar isso. As portas 80/443 estão disponíveis, mas estão apontadas para meu domínio principal, não para meu subdomínio.

Qualquer dica é muito bem-vinda.

Olá @rebelCoder

Esse tópico foi amplamente discutido aqui no meta; você pode pesquisar no meta por “apache reverse proxy” e encontrar vários tópicos abrangentes e muito detalhados.

Em resumo, você precisa configurar o seu virtual host do servidor Apache para funcionar como um proxy reverso para o Discourse.

As configurações exatas do Apache2 para essa configuração foram postadas no meta várias vezes.

Espero que isso ajude.

Desculpe, eu deveria ter mencionado que já pesquisei e tentei algumas soluções neste fórum e também na Digital Ocean. Mas ainda não consegui fazer funcionar. Nunca configurei o Docker antes.

Vou compartilhar minhas configurações atuais:

/etc/hosts:
127.0.0.1       forum.rebelscience.club

O arquivo hosts e o registro DNS estão funcionando, pois eu tinha o phpBB rodando lá hoje. Agora estou tentando apontá-lo para um container Docker com o Discourse.

Em containers/app.yml

Atualizei as portas:

expose:
  - "8081:80"   # http
  - "8443:443" # https

Em /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
</VirtualHost>

O que mais estou esquecendo? A execução de ./discourse-setup ainda falha com a mensagem mencionada na postagem original.

Acredito que você deva ter um virtualhost na porta 443. Dito isso, o erro na porta 80 é estranho; talvez esteja faltando algo (um CNAME?) no seu DNS.

Isso é estranho. Parece um pouco trabalhoso demais para configurar.

Eu só tenho um Registro A para forum.rebelscience.club.

Atualizei meus arquivos .conf com um certificado também:

cat /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.forum.rebelscience.club [OR]
RewriteCond %{SERVER_NAME} =forum.rebelscience.club
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

cat /etc/apache2/sites-enabled/discourse-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>

SSLCertificateFile /etc/letsencrypt/live/forum.rebelscience.club/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forum.rebelscience.club/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Agora vejo 503 Serviço Indisponível.

Estou completamente perdido, o que mais preciso fazer? O setup.sh ainda falha com a mensagem original.

No caso (configuração de exemplo) acima, você deve expor apenas a porta 8081 no Docker (e não a porta 80 ou a porta 443).

As portas 80 e 443 são expostas pelo proxy reverso fora do contêiner, e esse tráfego é redirecionado para a porta 8081 (no seu exemplo acima), a porta que você expôs dentro (mapeada para a 80 dentro).

Isso funcionará apenas se você tiver mapeado a porta 80 dentro do contêiner para a porta 8081 (exposta ao host).

expose:
  - "8081:80"   # http

Espero que isso ajude.

PS: @rebelCoder, sua configuração do apache2 no lado SSL está faltando muitas informações de configuração necessárias.

Veja este post:

Isso não é mais um problema e pode ser fechado.

Você não pode usar discourse-setup. Você terá que editar o app.yml manualmente, conforme descrito nos tópicos sobre a execução com o Apache.