Após instalar o Discourse, recebo um HTTP 502, e o log diz:
$ sudo ./launcher logs app
x86_64 arch detected.
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[Tue 06 Jun 2023 01:51:07 PM UTC] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:07 PM UTC] Create account key ok.
[Tue 06 Jun 2023 01:51:07 PM UTC] Registering account: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:09 PM UTC] Registered
[Tue 06 Jun 2023 01:51:09 PM UTC] ACCOUNT_THUMBPRINT='V5GxRKC8yO-5jvYjc3WlSSMbTABmaNtxUNs8XVoL1R8'
[Tue 06 Jun 2023 01:51:09 PM UTC] Creating domain key
[Tue 06 Jun 2023 01:51:10 PM UTC] The domain key is here: /shared/letsencrypt/<my domain>/<my domain>.key
[Tue 06 Jun 2023 01:51:10 PM UTC] Single domain='<my domain>'
[Tue 06 Jun 2023 01:51:10 PM UTC] Getting domain auth token for each domain
[Tue 06 Jun 2023 01:51:13 PM UTC] Getting webroot for domain='<my domain>'
[Tue 06 Jun 2023 01:51:13 PM UTC] Verifying: <my domain>
[Tue 06 Jun 2023 01:51:15 PM UTC] Pending, The CA is processing your order, please just wait. (1/30)
[Tue 06 Jun 2023 01:51:19 PM UTC] Pending, The CA is processing your order, please just wait. (2/30)
[Tue 06 Jun 2023 01:51:23 PM UTC] Pending, The CA is processing your order, please just wait. (3/30)
[Tue 06 Jun 2023 01:51:27 PM UTC] <my domain>:Verify error:202.117.43.203: Fetching http://<my domain>/.well-known/acme-challenge/UuD6jm6XJAaoXG7lE_IKfNVuHtqB4dokQXm-ll0bmrk: Timeout during connect (likely firewall problem)
[Tue 06 Jun 2023 01:51:27 PM UTC] Please check log file for more details: /shared/letsencrypt/acme.sh.log
Can't open ca.cer for reading, No such file or directory
140104391968064:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:69:fopen('ca.cer','r')
140104391968064:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:76:
unable to load certificate
Error loading file /dev/fd/63
...
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
Presumo que isso aconteça porque o Discourse tenta gerar um certificado automaticamente e verificá-lo no modo HTTP, acessando o URL listado. No entanto, meu IP está sob um firewall institucional e, portanto, não pode permitir que IPs externos acessem, nem a CA.
Também aprendi no site da Let’s Encrypt que o desafio DNS pode ser usado se o HTTP não estiver disponível, mas não tenho certeza de como fazer isso no Discourse.
Olá @pfaffman , muito obrigado pelas suas informações! Seguindo as instruções desse post, a página de boas-vindas do Discourse finalmente aparece.
Resta apenas um pequeno problema: uso o Cloudflare para gerar um certificado para o servidor de origem. Mas quando tento acessar a página pelo navegador, ele exibe um aviso NET::ERR_CERT_AUTHORITY_INVALID (embora eu possa prosseguir ignorando-o, mas meus usuários provavelmente não vão querer).
Estou me perguntando se esse problema tem algo a ver com o Discourse e estou curioso sobre os métodos para depurar esse problema. Obrigado.
Além disso, como sshd.template.yml está obsoleto, tenho que editar manualmente /etc/nginx/conf.d/discourse..conf para modificar ssl_certificate e ssl_certificate_key para apontar para /shared/ssl/ssh.crt e /shared/ssl/ssh.key (o valor padrão é /shared/ssl/<nome do domínio>.cer), caso contrário, o nginx não funcionará devido a problemas de certificado, reclamando como:
Você só precisa usar o template web.ssl (e não o template web.letsencrypt.ssl). O arquivo yml de exemplo tem as seguintes linhas:
## Descomente estas duas linhas se desejar adicionar Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
Apenas descomente a primeira:
## Descomente estas duas linhas se desejar adicionar Lets Encrypt (https)
- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
Isso configurará o nginx para SSL usando /shared/ssl/ssl.crt e /shared/ssl/ssl.key. Com isso, você só precisa garantir que tenha um certificado e chave válidos nesses caminhos. Assumindo que você instalou no local padrão, o caminho para esse diretório no sistema host é /var/discourse/shared/standalone/ssl/.
No final das contas, descobri que o certificado do Cloudflare era o culpado. Mudar para o desafio DNS via Let’s Encrypt funciona perfeitamente.
Agora tenho um pouco mais de conhecimento sobre como o Discourse funciona internamente. Legal!
–
Atualização: A propósito, é possível permitir que os usuários escolham como gerarão seu certificado no processo de configuração? Para novatos como eu, teremos que realmente ler e encontrar os logs para descobrir que os certificados levam à falha de conexão.
Não. A configuração foi projetada para uma maneira simples de instalar isso que (na maioria das vezes) sempre funciona. Instalar atrás de um firewall que não permite acesso da web pública é uma configuração que será difícil de dar suporte.