Como configurar certificado SSL gratuito Let's Encrypt em uma instância Discourse no Vultr?

Olá,

Gostaria de saber como configurar um certificado SSL gratuito do Let’s Encrypt em uma instância do Discourse no Vultr?
Tentei fazer isso durante a execução da configuração, mas falhou!

Acabei de configurar uma instância de $5 na VULTR com Ubuntu 18.04. Criei o seguinte registro DNS no Cloudflare:
image
Em seguida, fiz login via SSH e instalei as atualizações (apt update && apt upgrade). Reiniciei o sistema. Depois:

root@test:~# git clone https://github.com/discourse/discourse_docker.git /var/discourse
Clonando em '/var/discourse'...
remote: Enumerando objetos: 22, concluído.
remote: Contando objetos: 100% (22/22), concluído.
remote: Compactando objetos: 100% (22/22), concluído.
remote: Total 4545 (delta 7), reutilizados 9 (delta 0), pacotes reutilizados 4523
Recebendo objetos: 100% (4545/4545), 981,86 KiB | 13,83 MiB/s, concluído.
Resolvendo deltas: 100% (2902/2902), concluído.
root@test:~# cd /var/discourse
root@test:/var/discourse# ./discourse-setup
Docker não instalado. Pressione Enter para instalar em https://get.docker.com/ ou Ctrl+C para sair
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13185  100 13185    0     0  94856      0 --:--:-- --:--:-- --:--:-- 94856
# Executando script de instalação do Docker, commit: 6bf300318ebaab958c4adc341a8c7bb9f3a54a1a
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
Aviso: a saída do apt-key não deve ser analisada (stdout não é um terminal)
+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sh -c docker version
Cliente: Docker Engine - Community
 Versão:           19.03.2
 Versão da API:       1.40
 Versão do Go:        go1.12.8
 Commit do Git:        6a30dfc
 Construído:             Qui 29 Ago 05:29:11 2019
 SO/Arquitetura:           linux/amd64
 Experimental:      falso

Servidor: Docker Engine - Community
 Engine:
  Versão:          19.03.2
  Versão da API:      1.40 (versão mínima 1.12)
  Versão do Go:       go1.12.8
  Commit do Git:       6a30dfc
  Construído:            Qui 29 Ago 05:27:45 2019
  SO/Arquitetura:          linux/amd64
  Experimental:     falso
 containerd:
  Versão:          1.2.6
  Commit do Git:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Versão:          1.0.0-rc8
  Commit do Git:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Versão:          0.18.0
  Commit do Git:        fec3683
Se você deseja usar o Docker como um usuário não root, agora deve considerar
adicionar seu usuário ao grupo "docker" com algo como:

  sudo usermod -aG docker seu-usuario

Lembre-se de que você precisará sair e entrar novamente para que isso surta efeito!

AVISO: Adicionar um usuário ao grupo "docker" concederá a capacidade de executar
         containers que podem ser usados para obter privilégios de root no
         host do Docker.
         Consulte https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         para mais informações.
AVISO: O Discourse requer pelo menos 2GB de swap ao executar com 2GB de RAM
ou menos. Este sistema parece não ter espaço de swap suficiente.

Sem espaço de swap suficiente, seu site pode não funcionar corretamente, e futuras
atualizações do Discourse podem não ser concluídas com sucesso.

Ctrl+C para sair ou aguarde 5 segundos para que um arquivo de swap de 2GB seja criado.
Configurando espaço de swap versão 1, tamanho = 2 GiB (2147479552 bytes)
sem rótulo, UUID=7296ed32-7333-4a05-96c2-a5814d9e933b
/swapfile       swap    swap    auto      0       0
vm.swappiness = 10
As portas 80 e 443 estão livres para uso
'samples/standalone.yml' -> 'containers/app.yml'
Foram encontrados 1GB de memória e 1 núcleo de CPU físico
configurando db_shared_buffers = 128MB
configurando UNICORN_WORKERS = 2
parâmetros de memória de containers/app.yml atualizados.

Nome de host para seu Discourse? [discourse.example.com]: test.freenas-community.org
Endereço de e-mail para conta(s) de administrador? [me@example.com,you@example.com]: danb35@gmail.com
Endereço do servidor SMTP? [smtp.example.com]: smtp.mailgun.org
Porta SMTP? [587]: 
Nome de usuário SMTP? [postmaster@test.freenas-community.org]: 
Senha SMTP? [pa$$word]: 05ef745f09d198eee105b2cddbe424f1-bbbc8336-a4d37742
Endereço de e-mail opcional para configurar o Let's Encrypt? (ENTER para pular) [me@example.com]: danb35@gmail.com

Verificando seu nome de domínio . . .

Conexão com test.freenas-community.org bem-sucedida.

Isso parece correto?

Nome de host      : test.freenas-community.org
E-mail         : (oculto)
Endereço SMTP  : smtp.mailgun.org
Porta SMTP     : 587
Usuário SMTP : postmaster@test.freenas-community.org
Senha SMTP : 05ef745f09d198eee105b2cddbe424f1-bbbc8336-a4d37742
Let's Encrypt : (oculto)

ENTER para continuar, 'n' para tentar novamente, Ctrl+C para sair: 
Let's Encrypt será habilitado para (oculto)
web.ssl.template.yml habilitado

…omitido muito conteúdo…

2019-09-17 23:56:10.984 UTC [64] LOG:  recebida solicitação de desligamento rápido
181:signal-handler (1568764570) Recebido SIGTERM agendando desligamento...
181:M 17 Set 2019 23:56:10.987 # Usuário solicitou desligamento...
181:M 17 Set 2019 23:56:10.987 * Salvando o snapshot RDB final antes de sair.
2019-09-17 23:56:10.988 UTC [64] LOG:  abortando qualquer transação ativa
2019-09-17 23:56:10.998 UTC [64] LOG:  processo worker: lançador de replicação lógica (PID 73) saiu com código de saída 1
2019-09-17 23:56:11.006 UTC [68] LOG:  desligando
181:M 17 Set 2019 23:56:11.006 * Banco de dados salvo no disco
181:M 17 Set 2019 23:56:11.007 # Redis está pronto para sair, tchau tchau...
2019-09-17 23:56:11.342 UTC [64] LOG:  sistema de banco de dados desligado
sha256:9902b3b87ef8554416de9bd18cb319d16f3f987a708a59a72bd03a119a04bd9c
715b777d15bc45a61960ab68e9356556b6fe6555ed93a319cb0f65d856d1fa4d

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=2 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_HOSTNAME=test.freenas-community.org -e DISCOURSE_DEVELOPER_EMAILS=danb35@gmail.com -e DISCOURSE_SMTP_ADDRESS=smtp.mailgun.org -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=postmaster@test.freenas-community.org -e DISCOURSE_SMTP_PASSWORD=05ef745f09d198eee105b2cddbe424f1-bbbc8336-a4d37742 -e LETSENCRYPT_ACCOUNT_EMAIL=danb35@gmail.com -h test-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:fb:6d:f6:c7:45 local_discourse/app /sbin/boot
2b1d2b621a42c553eb753cdfb5c67c0d2af7fc50e1eefc22d7c7f8fc47c1d2ed
root@test:/var/discourse# 

Agora, acesse http://test.freenas-community.org:


Como você pode ver, o SSL está ativo. O certificado é do Let’s Encrypt:

Tudo na saída acima é literal; as únicas censuras são o endereço de e-mail usado para o administrador e para o Let’s Encrypt—eles foram substituídos por (oculto). Não se preocupe; esta instância Vultr e a configuração de domínio no Mailgun já foram destruídas.

Olá,

Eu segui os mesmos passos, tudo correu bem. O log foi semelhante ao seu: Discourse installation for beginners but are willing to be part of the community - #61 by Earlie

Tentei abrir o link para a sua instância do Discourse e o resultado foi: Screenshot by Lightshot

Como disse em minha postagem:

essa instância do Vultr e a configuração de domínio no Mailgun já foram destruídas.

Foi um teste para garantir que funcionaria (e funcionou). Não há nada de único em um VPS da Vultr em comparação com DigitalOcean ou Contabo (ou, eu esperaria, qualquer outro provedor de VPS). Como confirmei isso, não quis gastar mais dinheiro mantendo o VPS em execução. Portanto, o problema não é falta de documentação adequada. Também não é um problema relacionado à Vultr. As etapas na documentação oficial (que se resumem a um git clone e execução de um script) funcionam perfeitamente. Talvez você esteja fazendo algo errado, talvez haja algo único na sua instalação, ou talvez ambas as coisas sejam verdadeiras, mas a resposta à pergunta que você levanta no título é: “siga as instruções.”

Havia uma instância completa do Discourse (com SSL) instalada anteriormente em um domínio específico, com as mesmas configurações de Mailgun, Cloudflare e hospedagem. Isso foi feito por outra pessoa para mim.

Mais tarde, algo deu errado, então decidi fazer sozinho desta vez, com o objetivo prático de aprender, para adquirir conhecimento não apenas sobre como executar o Discourse, mas também sobre como configurá-lo.

P.S. Apenas o IP foi alterado desta vez, e ele foi reconfigurado no domínio no Cloudflare.