Discourse não carrega com Apache e redirecionamento de proxy

Apesar de ter toda a intenção de seguir em frente com o Discourse, dada a completa falta de documentação atual que não seja hiperfocada em CentOS/Nginx, uma pessoa incrivelmente generosa e paciente da DigitalOcean respondeu a um tópico que criei lá e, após alguns testes e erros, ajudou a montar um tutorial simples de seguir para usuários prospectivos do Discourse nas mesmas circunstâncias que as minhas.

Como lembrete, essas circunstâncias são:

Instalando o Discourse no mesmo servidor que o Apache | Usando Ubuntu 18.04 | DigitalOcean

créditos a Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (primeira resposta)

Pré-requisitos

  • Para garantir a segurança, faça backup do seu Droplet, para que, caso algo dê errado, você possa reverter para uma versão funcional
  • Acesse seu Droplet via SSH
  • Apache instalado; você pode seguir os passos para fazer isso aqui:

Passo 1 - Instalar o Docker

Para instalar o Docker, siga os passos aqui:

Passo 2 - Baixar o Discourse

Primeiro, crie um diretório onde você armazenará os arquivos do Discourse:

mkdir /var/discourse

Em seguida, clone a imagem oficial do Docker do Discourse para /var/discourse.

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Passo 3 - Configurar o Discourse para escutar na porta 8080

Usaremos o modelo standalone.yml, que inclui todos os serviços necessários, como PostgreSQL, Redis, entre outros.

Copie o arquivo de exemplo com o seguinte comando:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Depois, edite o arquivo com seu editor favorito. Abra /var/discourse/containers/app.yml e atualize as portas nas linhas 23 e 24:

## quais portas TCP/IP este container deve expor?
expose:
  - "8080:80"   # encaminha a porta 8080 do host para a porta 80 do container (http)
  - "8443:443"   # encaminha a porta 8443 do host para a porta 443 do container (https)

Além disso, se você ainda não possui um certificado SSL, certifique-se de comentar a linha 16:

  #- "templates/web.ssl.template.yml"

Basta adicionar o símbolo # antes da linha - "templates/web.ssl.template.yml", caso contrário o Discourse não iniciará.

Passo 4 - Configurar o Discourse

Mude o diretório:

cd /var/discourse

Em seguida, inicie o Discourse (como esta é a primeira vez que você está iniciando o serviço, ele irá inicializar o aplicativo com as novas alterações que você fez no seu arquivo app.yml):

./discourse-setup

Observação: Certifique-se de fornecer configurações válidas do servidor de e-mail; caso contrário, a configuração pode falhar.

Passo 5 - Configurar o Apache

Em /etc/apache2/sites-available/, crie um novo arquivo chamado forum.exemplo.com.conf e adicione o seguinte conteúdo de Vhost:

<VirtualHost *:80>
  ServerName forum.exemplo.com
  ServerAlias www.forum.exemplo.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Ative o Vhost com o seguinte comando:
a2ensite forum.exemplo.com
  • Ative o módulo Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Reinicie o Apache:
systemctl restart apache2

Após isso, você poderá acessar o Discourse diretamente pelo nome do seu domínio.


Observação 1: Ao instalar o Discourse, o arquivo app.yml pode ser sobrescrito e as linhas 16/17 (SSL) serão descomentadas. Você precisará comentá-las novamente e depois reconstruir o aplicativo (não se esqueça de mudar o diretório): ./launcher rebuild app

Observação 2: O SSL não está habilitado para o Discourse com este guia. Não surpreendentemente, parece não existir documentação para habilitar o SSL do Let’s Encrypt se você já o tiver habilitado para o Apache. Se alguém encontrar uma solução para isso, por favor, entre em contato.

4 curtidas