Obrigado pelo feedback, realmente agradeço o tempo dedicado. Não quero parecer um sacana, mas:
[2/5] Preparando configuração
✓ As portas 80 e 443 estão livres para uso
Ele realmente diz inicialmente „livres para uso“. Dito isso, minha instância está no ar e funcionando agora, com a ajuda do Gemini (principalmente sobre o uso do Docker, de todas as coisas, lol). Gostaria de oferecer meu „runbook“ para qualquer outro usuário do Virtualmin, porque: „liberar a porta 443“ não é a solução aqui. O restante da minha postagem será isso; caso eu devesse postar em outro lugar, como um novo tópico, por favor, me diga onde ir; acho que não sou o único com essa configuração, e pode ser útil para outros. Obrigado novamente!
Se estiver em um VPS gerenciado pelo Webmin/Virtualmin e usando um subdomínio:
O Runbook Definitivo Virtualmin + Discourse *
-
(1) Limpeza de resíduos (se estiver tentando novamente, como eu estava):
rm -rf /var/discourse/shared/standalone/ssl/*rm -rf /var/discourse/shared/standalone/letsencryptrm -rf /var/discourse/shared/standalone/state -
(2) Exclusão de modelos:
Você deve excluir completamente as linhas
templates/web.ssl.template.ymletemplates/web.letsencrypt.ssl.template.ymldoapp.yml. O analisador personalizado do launcher irá avaliá-las mesmo que prefixadas com#. -
(3) Configuração de e-mail e variáveis:
Altere
DISCOURSE_SKIP_EMAIL_SETUPde'1'para'0', pois seu Discourse não conseguirá se conectar e verificar o DiscordID;Adicione
DISCOURSE_FORCE_HTTPS: truepara que o backend gere URLs seguras.Lembrete amigável: Certifique-se de que
DISCOURSE_SMTP_USER_NAMEesteja definido como o nome da conta de caixa de correio bruta (por exemplo,'logophilia'), não o endereço de e-mail completo (por exemplo,'logophilia@logophilia.eu'), e envolva as credenciais em aspas simples (') para contornar possíveis erros de análise de caracteres YAML. -
(4) Configuração do bloco expose:
Certifique-se de que seu bloco
expose:no app.yml contenha um mapeamento HTTP; mapear443=>8443é opcional/redundante, pois o Virtualmin encerra a lógica SSL antes de repassá-la:expose: - 8080:80Agora você pode começar a reconstruir:
cd /var/discourse ./launcher rebuild app -
(5) Configuração de subdomínio e caminho de proxy:
- Crie seu subdomínio no Virtualmin como de costume e proteja-o com um certificado SSL Let’s Encrypt (feito automaticamente, só para dizer: certifique-se de que não ocorra erro por qualquer motivo não relacionado).
- Navegue até Proxy Paths (Virtualmin → seu subdomínio → Configuração da Web → Proxy Paths), crie um novo mapeamento
/parahttp://localhost:8080/, mantenha „serve locally“ desmarcado, mas ative Proxy WebSocket para Sim para permitir atualizações em tempo real e fluxos de notificação.
-
(6) Diretivas de cabeçalho CSRF:
- Em Webmin ➔ Servidores ➔ Servidor Web Apache ➔ [encontre a configuração do seu subdomínio aqui e clique na configuração para 443] ➔ Editar Diretivas, coloque as seguintes linhas logo acima do próprio bloco de proxy do Virtualmin para Let’s Encrypt (geralmente „ProxyPass /.well-known !") para facilitar o encaminhamento do token CSRF:
ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-For %{REMOTE_ADDR}sProxyPreserveHost On: Informa ao Discourse o nome real do seu domínio em vez de „localhost".
RequestHeader set X-Forwarded-Proto "https": Informa explicitamente ao Discourse que o usuário está usando uma conexão segura, alinhando-se com sua configuraçãoDISCOURSE_FORCE_HTTPS: true.
RequestHeader set X-Forwarded-For: Passa o endereço IP real do visitante para o container para que os logs de segurança funcionem. -
(7) Handshake limpo do container:
Enquanto o longo (desculpe… mas é verdade mesmo;-) processo de reconstrução termina, certifique-se de que qualquer blueprint de container potencialmente travado seja apagado com
docker rm -f app, para que ao executar./launcher start appseja iniciado uma instância totalmente nova vinculada à porta8080. Verifique sedocker psmostra algo sob „ports“ semelhante a:# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d21772a21e36 local_discourse/app "/sbin/boot" 45 minutes ago Up 45 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp app(Como você pode ver, deixei a diretiva 443=>8443 no meu app.yml; funciona de qualquer maneira.)
-
(8) Monitoramento e lançamento:
Acompanhe o fluxo de inicialização com
docker logs -f appaté que as migrações do banco de dados terminem e os workers comecem a processar solicitações. Basicamente, várias linhas „INFO“ em rápida sucessão. -
(9) Finalização:
Carregue seu subdomínio em um navegador, clique em Registrar e deixe o sistema enviar um e-mail de validação para sua caixa de correio.
*) até que se prove o contrário ![]()