Introdução
Por padrão, uma instalação “standalone” do Discourse se vincula às portas 80 e 443. Para hospedar outra aplicação como o WordPress no mesmo servidor, você deve reconfigurar o Discourse para escutar em uma porta interna e usar um Nginx em nível de Host como Proxy Reverso para gerenciar o tráfego e os certificados SSL.
1. Visão Geral da Arquitetura
-
Nginx do Host: O gateway principal que escuta nas portas 80 e 443. Ele lida com a terminação SSL e roteia as requisições para o contêiner apropriado com base no
server_name. -
Contêiner do Discourse: Reconfigurado para escutar em
localhost:8080. -
Contêiner do WordPress: Gerenciado via Docker Compose, escutando em
localhost:8081.
2. Fase A: Reconfigurando o Discourse
Modifique seu /var/discourse/containers/app.yml para liberar as portas públicas:
-
Alterar Mapeamento de Porta:
YAML
expose: - "8080:80" # Mapeia a porta 8080 do host para a porta 80 do contêiner -
Desativar SSL Interno: Comente os modelos de SSL e Let’s Encrypt:
YAML
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # - "templates/web.letsencrypt.ssl.template.yml" -
Recompilar: Execute
./launcher rebuild app.
3. Fase B: Implantando o WordPress via Docker Compose
Organize seu site WordPress em um diretório dedicado. Garanta que o volume do banco de dados seja persistente para evitar perda de dados.
YAML
services:
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: 'your_secure_password'
volumes:
- ./mysql_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8081:80"
volumes:
- .:/var/www/html
4. Fase C: Configuração Final do Nginx (SSL e Porta 443)
Uma configuração profissional em 2025 exige suporte total a HTTPS e HTTP/2. Após instalar o Nginx no seu host (sudo apt install nginx), crie uma configuração para seus domínios.
Dica Profissional: Execute sudo certbot --nginx para gerar automaticamente os blocos SSL, mas certifique-se de que eles incluam os seguintes cabeçalhos de proxy para que o Discourse funcione corretamente.
Nginx
server {
listen 443 ssl http2;
server_name discourse.com;
# Certificados SSL pelo Certbot
ssl_certificate /etc/letsencrypt/live/discourse.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # Crucial para a detecção de HTTPS do Discourse
}
}
5. Lições Difíceis e Melhores Práticas
-
Credenciais do Banco de Dados: Se suas senhas contiverem caracteres especiais como
&ou?, sempre as coloque entre aspas simples' 'em seus arquivos de configuração e comandos de terminal para evitar erros de interpretação do shell. -
Permissões de Arquivo: Contêineres WordPress são executados como
www-data(UID 33). Se você fizer upload ou descompactar arquivos comoroot, deverá executarchown -R 33:33 .para evitar Erros Internos do Servidor 500. -
Configurações do Cloudflare: Ao usar um certificado SSL no servidor (Let’s Encrypt), defina o SSL/TLS do Cloudflare como Full (Strict). Isso evita o loop “Muitos Redirecionamentos” comumente causado pelo modo “Flexible”.
-
Volumes Persistentes: Nunca execute
docker compose downourebuildsem verificar se os arquivos do seu banco de dados estão armazenados em um volume persistente (ex:./mysql_data).
Conclusão: Desacoplar seus aplicativos das portas 80/443 usando um Proxy Reverso é a maneira mais escalável de gerenciar um VPS com múltiplos sites. Isso permite o gerenciamento centralizado de SSL e depuração fácil através dos logs do Nginx em nível de host.