Este é um guia para ativar o HTTPS em uma instalação existente do Discourse usando o Let’s Encrypt. Ele pressupõe uma instalação anterior sem HTTPS habilitado.
Nível de usuário necessário: Administrador do Sistema
Este guia é apenas para instalações existentes onde o HTTPS não está habilitado. Seguir o guia de configuração oficial habilita o HTTPS automaticamente por padrão.
Então, você gostaria de adicionar HTTPS ao seu Discourse totalmente gratuito, graças aos nossos amigos do Let’s Encrypt?
Tudo mais no seu site está pronto para o HTTPS?
Antes de começar, lembre-se de que, para o HTTPS funcionar corretamente, cada recurso individual na página deve ser compatível com HTTPS. Considere seu CDN, seus logins sociais, seus arquivos de logotipo, qualquer JavaScript de terceiros, imagens, fontes ou CSS — todos eles devem estar disponíveis via HTTPS!
Nota: ./discourse-setup habilitará o Let’s Encrypt. E a partir de março de 2017, você pode executá-lo novamente, pressionar Enter algumas vezes e inserir seu endereço de e-mail; o script incluirá os modelos necessários e inserirá seu e-mail conforme necessário. A menos que você seja um administrador de sistema experiente e saiba um motivo para não fazer isso, você deve executar discourse-setup em vez de ler mais. (Se você instalou o Discourse há muito tempo, ainda pode precisar editar app.yml manualmente.)
Nota: Se o seu Discourse for acessado por meio de algum proxy reverso (por exemplo, Cloudflare), esta configuração não funcionará.
Configurar HTTPS com o Let’s Encrypt
1. Edite app.yml
Acesse o arquivo de configuração do seu Discourse:
cd /var/discourse
nano containers/app.yml
- Adicione os seguintes modelos:
templates: - "templates/web.template.yml" - "templates/web.ssl.template.yml" - "templates/web.letsencrypt.ssl.template.yml"
O Discourse é o único site no seu servidor?
Se você já estiver usando
web.socketed.template.yml, porque hospeda outros sites na porta 80 no mesmo servidor, pare. Você deve usar um cliente Let’s Encrypt no sistema host; a validação falhará, pois o cliente usado não consegue se vincular aos sockets necessários.
2. Expor portas HTTPS
Garanta que as seguintes portas estejam expostas para tráfego HTTPS:
expose:
- "80:80"
- "443:443"
3. Adicione e-mail para o Let’s Encrypt
Insira o endereço de e-mail para notificações do Let’s Encrypt:
env:
LETSENCRYPT_ACCOUNT_EMAIL: 'seu-email@exemplo.com'
4. Recrie o aplicativo
Aplique as alterações recriando o contêiner:
./launcher rebuild app
5. Valide o HTTPS
Acesse seu site via https://seudominio.com. Se bem-sucedido, você verá seu site protegido com HTTPS.
Revise seus recursos:
- Garanta que os ativos (por exemplo, imagens, scripts) sejam carregados via HTTPS.
- Reconfigure logins sociais e CDN para HTTPS conforme necessário.
- Resolva quaisquer avisos no console do navegador sobre ativos inseguros.
O Discourse habilita automaticamente force_https após uma recriação com um certificado HTTPS válido.
Como funciona?
O modelo usa GitHub - acmesh-official/acme.sh: A pure Unix shell script ACME client for SSL / TLS certificate automation · GitHub, que é
O script shell mais simples para o cliente de certificado gratuito LetsEncrypt
Simples e Poderoso, você precisa apenas de 3 minutos para aprender.
Escrito puramente em bash, sem dependências de python, acme-tiny ou cliente oficial do LetsEncrypt. Apenas um script para emitir e renovar seus certificados automaticamente.
Provavelmente é o menor, mais fácil e mais inteligente script shell para emitir e renovar automaticamente os certificados gratuitos do LetsEncrypt.
web.letsencrypt.ssl.template.yml adiciona um script de inicialização ao seu contêiner que
- Inicia um nginx leve para servir desafios ACME na porta
80antes que onginxprincipal esteja ativo. - Emite tanto um certificado RSA (4096 bits) quanto um ECDSA (ec-256) do Let’s Encrypt usando o modo webroot com
/var/www/discourse/publiccomo diretório. - Instala os certificados no diretório
/shared/ssl/que onginxespera. Ao mesmo tempo, configura um trabalho cron para renovação automática de certificados. Isso renovará automaticamente seus certificados. Nada acontece se os certificados não tiverem expirado. Se um certificado expirar, você receberá um e-mail sobre isso do Let’s Encrypt no endereço de e-mail fornecido durante a configuração. - Define
force_httpscomo verdadeiro se certificados válidos forem obtidos.
Solução de problemas
Verificando logs
Se o HTTPS não funcionar, verifique os logs por erros de SSL ou Let’s Encrypt com:
./launcher logs app
Verificando arquivos de certificação
Garanta que os arquivos de certificado e chave estejam no lugar com:
ls -l /var/discourse/shared/standalone/ssl
Você deve ver arquivos como:
seudominio.com.cer(RSA)seudominio.com.key(RSA)seudominio.com_ecc.cer(ECDSA)seudominio.com_ecc.key(ECDSA)
Renovando certificados manualmente
Se a renovação automática falhar, você pode reemitir manualmente seus certificados:
./launcher enter app
sv stop nginx
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d exemplo.com -k 4096 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert -d exemplo.com --fullchainpath /shared/ssl/exemplo.com.cer --keypath /shared/ssl/exemplo.com.key --reloadcmd "sv reload nginx"
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d exemplo.com --keylength ec-256 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert --ecc -d exemplo.com --fullchainpath /shared/ssl/exemplo.com_ecc.cer --keypath /shared/ssl/exemplo.com_ecc.key --reloadcmd "sv reload nginx"
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
Recriando com certificados limpos
Remova os arquivos de certificados antigos e recrie para começar do zero:
rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app
Limitações
Os certificados do Let’s Encrypt validam apenas o domínio e a criptografia. Eles não confirmam a propriedade ou identidade, o que pode ser sinalizado em alguns navegadores. Para mais detalhes, consulte a comunidade do Let’s Encrypt.