Não consigo configurar o nginx: [emerg] não é possível carregar o certificado "/var/discourse/shared/standalone/ssl/ssl.crt": BIO_new_file() falhou

(SSL: erro:02001002:biblioteca do sistema:fopen:Arquivo ou diretório não encontrado:fopen('/var/dis (…)

Estou seguindo o guia, mas não consigo encontrar nada sobre esse erro.

Oi @slivo

Vamos ver a saída disso:

cd   /var/discourse/shared/standalone/ssl
ls -l

Alguma pista?

cd ssl: Arquivo ou diretório não encontrado

Olá @slivo,

Isso indica que sua configuração do Lets Encrypt não criou os certificados na última vez que você reconstruiu seu container.

Claro, tenho certeza de que você já sabia disso!

Tive uma instalação que falhou mais ou menos assim essa semana. Talvez você tente fazer um

./launcher rebuild app

Reconstruí novamente. Configurei de acordo com as diretrizes. SSL certificado definido (/etc/nginx/sites-enabled/discourse.conf), mas tenho um erro:

SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE

Não consigo iniciar o nginx de forma alguma.

 nginx.service: Processo de controle saiu, code=exited status=1
 nginx.service: Falhou com resultado 'exit-code'.

Processo: 3840 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Processo: 25108 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=1/FAILURE)

// Falha ao iniciar um servidor web de alto desempenho e um servidor proxy reverso.

Olá @slivo

Obrigado pela atualização sobre a configuração disso.

Você está configurando o Discourse com a build padrão do Docker sem um proxy reverso externo ao container?

sim, e também estou usando este guia Run other websites on the same machine as Discourse

Olá @slivo

Naquele link acima, trata-se de um esboço para executar o Discourse em um contêiner Docker, expondo o aplicativo por meio de um socket UNIX para um proxy reverso.

Nesse caso, você NÃO deve habilitar o SSL no arquivo yml do contêiner; e DEVE configurar o SSL com o Let’s Encrypt usando o certbot fora do contêiner, apenas no proxy reverso.

A arquitetura geral de alto nível se parece com isto:

USUÁRIOS WEB <-- HTTPS --> PROXY REVERSO <-- HTTP --> CONTÊINER DOCKER

Por favor, poste seu arquivo yml, ocultando sua senha e endereços de e-mail com ‘x’; e vamos ver o que você está fazendo.

Obrigado.

Mas agora eu não entendo. Então, criei um novo certificado usando o certbot. E eu o tenho aqui como:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Seu arquivo de chave foi salvo em:
/etc/letsencrypt/live/myadress.com/privkey.pem

Preciso alterar o endereço neste arquivo ou em /etc/nginx/sites-enabled/discourse.conf, ou estou fazendo tudo completamente errado?

Olá @slivo

Quando você estiver configurando um proxy reverso na frente de outro aplicativo com uma instância do nginx: você deve ser muito específico sobre a localização dos arquivos de configuração, dentro ou fora do container?

Não sei se entendi completamente. Eu só quero um Discourse atrás do nginx. Não tenho outro aplicativo no servidor, mas quero fazer isso para ter mais proteção contra o exterior.

Olá @slivo,

Entendo sua frustração. Deixe-me explicar com gentileza.

Em uma de suas mensagens acima, você diz:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Seu arquivo de chave foi salvo em:
/etc/letsencrypt/live/myadress.com/privkey.pem

Você não mencionou se está dentro do contêiner Docker ou fora dele.

Como você sabe, o nginx (no seu caso) está sendo executado tanto diretamente no host quanto dentro do aplicativo (o contêiner Docker).

Quando você postou:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Seu arquivo de chave foi salvo em:
/etc/letsencrypt/live/myadress.com/privkey.pem

Como podemos, como pessoas de fora, saber exatamente a que você se refere se não fornecer todas as informações? Essa configuração está dentro ou fora do contêiner? Podemos “adivinhar” e “assumir” que você está falando do ambiente externo ao contêiner, mas como você não fornece esses detalhes, não podemos ter certeza. Minha experiência é que o caminho mais curto entre um problema e sua solução é nunca assumir nada e prestar muita atenção aos detalhes.

Além disso, você não postou seu arquivo yml. Também não postou seus arquivos de configuração do nginx fora do contêiner. Portanto, não conseguimos “ver” o que você está realmente fazendo na sua configuração.

Espero que isso ajude.