Configurar Let's Encrypt com vários domínios / redirecionamentos

Ah, uau, finalmente funcionou:

true | openssl s_client -connect www.starzen.space:443 2>/dev/null \
| openssl x509 -noout -text \
| perl -l -0777 -ne '@names=/\\bDNS:([^\\s,]+)/g; print join("\n", sort @names);'
starzen.space
www.starzen.space

Comentei as instruções if no script do letsencrypt para forçar uma nova emissão. Isso não é uma solução de ‘fábrica’, é claro.

No entanto, isso sugere que houve um problema com o ‘estado’ em vez das opções fornecidas.

Parece que o script atual pode ser acionado dependendo do estado anterior, mas se você forçar uma nova emissão, poderá corrigi-lo.

Mas agora eu tenho um domínio apex funcionando! :tada:

4 curtidas

Faz parte da instalação padrão. Veja User Guide — Certbot 5.1.0 documentation e role para baixo até Gerenciando Certificados e também imediatamente abaixo disso, Recriando e Atualizando Certificados Existentes.

Esses comandos seriam executados de onde você executou o Certbot inicialmente.

1 curtida

Eu tenho uma instalação padrão e o certbot não está em uso. Nem no “nível normal” do servidor, nem se eu disser primeiro ./launcher enter app.

Eu acho que está faltando por causa do acme.sh.

3 curtidas

Acho que estou encontrando um problema semelhante. Pensei que fosse porque usei um sub-subdomínio (Let's Encrypt with sub-subdomain?), mas tentei com um subdomínio regular e o certificado ainda não está sendo gerado para o novo site.

Estou tentando descobrir como você fez para funcionar, mas não consigo acompanhar :grimacing:

O que você fez para que funcionasse para você?

Se foi isso, quais instruções if você comentou?

Além disso, alguma ideia do que pode estar causando esse novo problema?

1 curtida

Meu problema estava relacionado a um nome de domínio expirado na minha configuração de multisite:

2 curtidas

Olá @Brahn,

Obrigado pela atualização recente das suas instruções.

Eu estava vendo um erro de certificado depois de apontar meu domínio raiz para um subdomínio. Atualizei meu arquivo app.yml com a versão mais recente que você queria testar, e o problema foi resolvido. :slightly_smiling_face:

4 curtidas

Tive que implementar isso também, depois de mudar de domínio e o redirecionamento falhar.

Fiz um pequeno ajuste na wiki, removendo as instruções antigas e corrigindo os espaços nas novas.

No entanto, ainda não parece ter funcionado. Suspeito que preciso forçar a emissão de um novo certificado. Alguém pode me orientar sobre como fazer isso facilmente?

Tenho quase certeza de que acabei de fazer uma reconstrução. Pode ser que algo tenha mudado novamente. Você ainda tem o certificado antigo? Qual é o nome do host? Você pode me enviar uma mensagem privada se quiser.

Obrigado Jay - forum.hinz.org.nz é o domínio antigo (e ehealthforum.nz o novo).

Eu fiz uma reconstrução, (apenas web_only como 2-container), mas isso não pareceu corrigi-lo.

Você também alterou o nome do host? Você alterou o nome de domínio ou renomeou seu Discourse?

Conselho não solicitado: A melhor prática parece ser usar o www em vez do domínio apex. Os navegadores que uso tornam quase impossível saber que o www está lá.

Minha única suposição é que o espaço no final dentro das aspas é significativo e você não o tem?

Acho que entraria no contêiner, daria uma olhada e tentaria executar acme da maneira que ele faz e veria o que acontece; nunca me lembro como fazer isso ou onde procurar o comando acme; tenho que descobrir toda vez, então não posso te dizer. Você pode conseguir ver em docker logs web_only.

Juro que isso funcionou sempre que editei isso pela última vez. Acabei de verificar o site ao qual apliquei e ele parece ter seu certificado válido extra funcionando. Mas é concebível que ele tenha uma imagem base diferente da que existe agora e que será quebrada na próxima reconstrução.

Tentarei verificar isso novamente quando tiver uma chance, talvez na próxima semana.

1 curtida

Sim - fiz tudo isso sem problemas.

De fato - mas só vale a pena fazer se você planeja usar um CDN ou subdomínios (eu não uso):
https://hostadvice.com/blog/domains/what-is-apex-domain/

Tentei adicionar isso, mas não fez diferença.

Isso é bastante esclarecedor (clique para revelar)

> root@forumhinz:/var/discourse# docker logs web_only
> 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
> [Sat 9 Sep 08:19:27 UTC 2023] Domains not changed.
> [Sat 9 Sep 08:19:27 UTC 2023] Skip, Next renewal time is: 2023-10-26T08:24:32Z
> [Sat 9 Sep 08:19:27 UTC 2023] Add ‘–force’ to force to renew.
> [Sat 9 Sep 08:19:29 UTC 2023] Installing key to: /shared/ssl/ehealthforum.nz.key
> [Sat 9 Sep 08:19:29 UTC 2023] Installing full chain to: /shared/ssl/ehealthforum.nz.cer
> [Sat 9 Sep 08:19:29 UTC 2023] Run reload cmd: sv reload nginx
> warning: nginx: unable to open supervise/ok: file does not exist
> [Sat 9 Sep 08:19:29 UTC 2023] Reload error for :
> [Sat 9 Sep 08:19:29 UTC 2023] Domains not changed.
> [Sat 9 Sep 08:19:30 UTC 2023] Skip, Next renewal time is: 2023-10-26T08:24:45Z
> [Sat 9 Sep 08:19:30 UTC 2023] Add ‘–force’ to force to renew.
> [Sat 9 Sep 08:19:31 UTC 2023] Installing key to: /shared/ssl/ehealthforum.nz_ecc.key
> [Sat 9 Sep 08:19:31 UTC 2023] Installing full chain to: /shared/ssl/ehealthforum.nz_ecc.cer
> [Sat 9 Sep 08:19:31 UTC 2023] Run reload cmd: sv reload nginx
> warning: nginx: unable to open supervise/ok: file does not exist
> [Sat 9 Sep 08:19:31 UTC 2023] Reload error for :
> Started runsvdir, PID is 570
> supervisor pid: 578 unicorn pid: 590

Isso implica que, se eu não encontrar uma maneira de forçar a renovação, terei que esperar até 2023-10-26T08:24:00Z antes que o problema se resolva sozinho!

Vou tentar algumas coisas - deseje-me sorte.

mais tarde…

Sucesso!

Bem, depois de tentar e falhar várias vezes para iniciar a renovação do certificado, acabei me mudando para um novo servidor (isso já estava planejado).

Para minha surpresa, isso renovou o certificado perfeitamente com as configurações na OP. Quem diria.

Não tenho certeza de como fazer isso melhor no futuro. Talvez estabelecer as configurações de DNS do seu novo domínio com um ou dois meses de antecedência e inserir essas linhas no seu app.yml então.

2 curtidas

Adicionei isto ao meu arquivo app.yml, preciso reconstruir? ou simplesmente funciona?
também em
“from: /-d www.first-domain.com/” devo colocar o domínio que quero redirecionar ou meu subdomínio?

1 curtida

Sim, quaisquer alterações em app.yml geralmente exigem uma reconstrução.

3 curtidas

Reconstruí e agora meu site não pode ser acessado. Devo reconstruir novamente?
Ele diz isto após a reconstrução

"Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile' falhou com retorno #<Process::Status: pid 3575 exit 134>
Localização da falha: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falhou com os parâmetros {\"cd\"=>\"$home\", \"hook\"=>\"assets_precompile\", \"cmd\"=>[\"su discourse -c 'bundle exec rake themes:update assets:precompile'\"]}
bootstrap falhou com código de saída 134
** FALHA AO INICIAR ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma."
1 curtida

O processo de reconstrução ocorreu sem problemas e sem erros?

2 curtidas

Por favor, faça isso e compartilhe as mensagens de erro.

2 curtidas
110:M 10 Dec 2023 13:32:18.543 # Servidor inicializado
110:M 10 Dec 2023 13:32:18.543 # AVISO A memória overcommit deve estar habilitada! Sem isso, um salvamento em segundo plano ou replicação pode falhar sob condição de pouca memória. Estando desabilitado, também pode causar falhas sem condição de pouca memória, veja https://github.com/jemalloc/jemalloc/issues/1328. Para corrigir este problema, adicione 'vm.overcommit_memory = 1' a /etc/sysctl.conf e, em seguida, reinicie ou execute o comando 'sysctl vm.overcommit_memory=1' para que isso tenha efeito.
110:M 10 Dec 2023 13:32:18.544 * Carregando RDB produzido pela versão 7.0.7

Recebi estes avisos, não tenho certeza se são importantes.

warning "@glint/environment-ember-loose@1.1.0" tem dependência de par não atendida "@glimmer/component@^1.1.2".
warning "@glint/environment-ember-template-imports@1.1.0" tem dependência de par não atendida "ember-template-imports@^3.0.0".
warning O campo de resolução "unset-value@2.0.1" é incompatível com a versão solicitada "unset-value@^1.0.0"
warning O padrão ["wrap-ansi@^7.0.0"] está tentando descompactar no mesmo destino "/home/discourse/.cache/yarn/v6/npm-wrap-ansi-cjs-7.0.0-67e145cff510a6a6984bdf1152911d69d2eb9e43-integrity/node_modules/wrap-ansi-cjs" que o padrão ["wrap-ansi-cjs@npm:wrap-ansi@^7.0.0"]. Isso pode resultar em comportamento não determinístico, pulando.
warning " > discourse-markdown-it@1.0.0" tem dependência de par não atendida "xss@*".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @ember/legacy-built-in-components@0.5.0" tem dependência de par incorreta "ember-source@>= 4.8".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3@3.0.6" tem dependência de par incorreta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3-multipart@3.1.3" tem dependência de par incorreta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/xhr-upload@3.1.1" tem dependência de par incorreta "@uppy/core@^3.1.2".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse-plugins > ember-this-fallback@0.4.0" tem dependência de par não atendida "ember-source@^3.28.11 || ^4.0.0".
warning "workspace-aggregator-68bace53-129d-4a2d-85c3-4685b91c92ee > discourse > @uppy/aws-s3 > @uppy/xhr-upload@3.3.0" tem dependência de par incorreta "@uppy/core@^3.2.1".
<--- Últimos GCs --->

[3710:0x6291170]   681247 ms: Scavenge 942.0 (1034.0) -> 940.8 (1034.0) MB, 62.9 / 0.0 ms  (mu média = 0.704, mu atual = 0.878) falha de alocação;
[3710:0x6291170]   681616 ms: Scavenge 942.4 (1034.0) -> 941.4 (1034.0) MB, 18.3 / 0.0 ms  (mu média = 0.704, mu atual = 0.878) falha de alocação;
[3710:0x6291170]   681911 ms: Scavenge 943.0 (1034.0) -> 942.0 (1038.0) MB, 46.8 / 0.0 ms  (mu média = 0.704, mu atual = 0.878) falha de alocação;
ERRO FATAL: Limite do heap atingido Falha na alocação - heap JavaScript sem memória
 1: 0xb83f50 node::Abort() [ember]
 2: 0xa94834  [ember]
 3: 0xd647c0 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [ember]
 4: 0xd64b67 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [ember]
 5: 0xf42265  [ember]
 6: 0xf5474d v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [ember]
 7: 0xf2ee4e v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [ember]
 8: 0xf30217 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [ember]
 9: 0xf113ea v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [ember]
10: 0x12d674f v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [ember]
11: 0x17035b9  [ember]
Aborted (core dumped)
error Comando falhou com código de saída 134.

e meu site diz

Este site não pode ser alcançado

forum.mysite.ca se recusou a conectar.

Tente:

  • Verificar a conexão
  • [Verificar o proxy e o firewall]

ERR_CONNECTION_REFUSED

este é o meu app.yml

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-zoom.git
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: "-d www.mysite.ca/"
        to: "-d www.mysite.ca -d mysite.ca "
## Quaisquer comandos personalizados para executar após a compilação
1 curtida

Quanto de memória o seu servidor tem e você tem swap habilitado (free -h para ver)?

               total        used        free      shared  buff/cache   available
Mem:             957         190         371           3         395         613
Swap:           2047          79        1968

Seu servidor tem 1 GB de RAM e 2 GB alocados para swap. Curiosamente, o processo de reconstrução falharia com essa capacidade de swap.

Você pode tentar reconstruir novamente. Se falhar, talvez precise aumentar a memória do servidor, se possível (apenas para o processo de compilação, você pode diminuir após a conclusão).

1 curtida