Como renovar automaticamente Cerets LetsEncrypt com uma instância do Apache Dockerized?

2

Temos alguns aplicativos PHP dockerizados com imagens de docker personalizadas para que a função PHP mail () realmente funcione.

Quando criamos as imagens, estamos CÓPIAS dos certs na imagem no momento da criação. Isso funciona muito bem ... por 90 dias.

Para renovar, precisamos encerrar o aplicativo da Web, renovar o LetsEncrypt manualmente, reconstruir e reimplantar uma nova imagem com os novos certificados.

Eu sinto que deveria ser capaz de fazer isso com contêineres nomeados para que a renovação seja automática, mas não posso envolver meu cérebro em torno disso.

Alguém tem um manual de trabalho para isso?

    
por DrDamnit 11.04.2018 / 17:46

1 resposta

0

A resposta acabou sendo: use volumes nomeados e adicione um script para copiar certificados nos volumes no disco local do host do docker. Funciona assim:

  1. Crie um volume nomeado montado em /certs .
  2. Certifique-se de que o Apache use os certificados localizados aqui nos seus arquivos de configuração do site.
  3. Configure o cert-bot para renovar automaticamente a partir do host e use os pre-hooks para encerrar a instância do docker.
  4. Depois que o cert-bot renova o certificado, use post-hooks para executar um script para copiar os certificados recém-cunhados / renovados de /etc/letsencrypt/live/foosite.com/ (ou similar) para a localização do volume - sobrescrevendo o que é lá.

Este último passo requer um pouco de esforço. Depois de criar o volume nomeado pela primeira vez, você precisará usar docker volume ls e docker volume inspect para descobrir onde esse volume é mantido no sistema de arquivos do host. Ele estará em algum lugar em / var / lib / docker, geralmente.

Seu script de pós-gancho da etapa 4 acima simplesmente copia diretamente os certificados do diretório ativo para este volume da janela de encaixe e, ENTÃO, reinicia os contêineres.

    
por 27.06.2018 / 17:53