Certbot com Cloudflare para Certificados Let's Encrypt
2.7K
Este repositório contém uma solução Dockerizada para gerenciar certificados SSL/TLS gratuitos do Let's Encrypt usando o Certbot, com autenticação via DNS através do plugin para Cloudflare. A imagem é baseada no Alpine Linux para ser leve e eficiente, e é projetada para renovar ou expandir certificados automaticamente para múltiplos domínios wildcard (ex.: *.exemplo.com.br).
O foco principal é facilitar a integração com ambientes como Mailcow (ou outros serviços que precisem de certificados compartilhados), permitindo a cópia automática dos certificados gerados para um diretório montado. O container executa o Certbot via cron a cada 6 horas, garantindo renovação automática, e suporta modo "dry-run" para testes sem impacto real.
Esta solução é ideal para administradores de sistemas que gerenciam múltiplos domínios hospedados no Cloudflare, precisando de certificados wildcard para subdomínios dinâmicos. Ela evita a necessidade de exposição de portas HTTP/HTTPS para validação, usando em vez disso a propagação DNS para autenticação.
/certificates) com nomes padronizados (cert.pem e key.pem)./var/log/certificados.log para depuração.Esta imagem está disponível no Docker Hub como aprendendolinux/certbot-mailcow:latest. Para uso no GitHub, clone o repositório e construa a imagem localmente.
Antes de usar esta solução, certifique-se de ter:
docker-compose.yml.MY_DOMAINS devem estar gerenciados pelo Cloudflare para autenticação DNS funcionar.chmod 700 para diretórios sensíveis).America/Sao_Paulo por padrão, mas pode ser alterado via variável TZ.Atenção: Certificados Let's Encrypt são válidos por 90 dias, mas o cron renova automaticamente. Use domínios wildcard (*.exemplo.com) para cobrir subdomínios ilimitados.
Puxe a imagem pré-construída:
docker pull aprendendolinux/certbot-mailcow:latest
Clone o repositório:
git clone https://github.com/AprendendoLinux/certbot-mailcow.git
cd certbot-mailcow
Construa a imagem:
docker build -t aprendendolinux/certbot-mailcow:latest .
Use o arquivo docker-compose.yml fornecido como base. Edite as variáveis de ambiente conforme necessário.
Exemplo de docker-compose.yml:
services:
certbot:
image: aprendendolinux/certbot-mailcow:latest
restart: always
container_name: certbot
hostname: certbot
volumes:
- /srv/mailcow-dockerized/data/assets/ssl:/certificates # Diretório para copiar certificados (ex.: para Mailcow)
- /srv/certbot/letsencrypt/data:/etc/letsencrypt # Armazenamento persistente de certificados
- /srv/certbot/logs:/var/log/letsencrypt # Logs do Let's Encrypt
environment:
- TZ=America/Sao_Paulo # Timezone do container
- CLOUDFLARE_EMAIL="[email protected]" # E-mail da conta Cloudflare
- CLOUDFLARE_API_KEY="sua-api-da-cloudflare-aqui" # Chave API Global do Cloudflare
- MY_DOMAINS="*.dominio1.com.br,*.dominio2.com.br,*.dominio3.com.br,*.dominio4.com.br,*.dominio5.com.br" # Lista de domínios wildcard separados por vírgula
- DRY_RUN="false" # "true" para modo de teste (sem alterações reais)
Inicie o serviço:
docker-compose up -d
Após configurar o docker-compose.yml, o container inicia automaticamente o script de entrada (entrypoint.sh), que executa o Certbot uma vez e inicia o cron para renovações periódicas.
docker logs certbot para ver a saída inicial. Logs detalhados estão em /var/log/certificados.log (montado via volume).docker exec -it certbot /usr/local/bin/docker-certbot.cert.pem (fullchain) e key.pem (privkey) serão copiados para o diretório /certificates montado.As seguintes variáveis são obrigatórias e devem ser definidas no environment do Docker Compose ou via docker run -e:
TZ: Timezone do container (padrão: America/Sao_Paulo).CLOUDFLARE_EMAIL: E-mail associado à conta Cloudflare. Use aspas se necessário, mas o script remove aspas extras.CLOUDFLARE_API_KEY: Chave API do Cloudflare (Global API Key recomendada para simplicidade).MY_DOMAINS: Lista de domínios separados por vírgula (ex.: *.exemplo1.com,*.exemplo2.com). Suporta wildcards para subdomínios.DRY_RUN: "true" para simular a execução (útil para testes); "false" para modo real.Variáveis opcionais:
CERT_OUTPUT_DIR: Diretório para copiar certificados (padrão: /certificates).Monte os seguintes volumes para persistência:
/etc/letsencrypt: Armazena certificados e configurações do Certbot./var/log/letsencrypt: Logs do Certbot e script customizado./certificates: Diretório de saída para os certificados copiados (integração com outros serviços como Mailcow).Exemplo em Docker Run:
docker run -d \
--name certbot \
-v /srv/certbot/letsencrypt/data:/etc/letsencrypt \
-v /srv/certbot/logs:/var/log/letsencrypt \
-v /srv/mailcow/ssl:/certificates \
-e TZ=America/Sao_Paulo \
-e CLOUDFLARE_EMAIL="[email protected]" \
-e CLOUDFLARE_API_KEY="sua-chave" \
-e MY_DOMAINS="*.exemplo.com" \
-e DRY_RUN="false" \
aprendendolinux/certbot-mailcow:latest
O Dockerfile constrói a imagem a partir do Alpine Linux:
tzdata, bash, python3, py3-pip, etc.ARG TZ./opt/certbot e instala certbot e certbot-dns-cloudflare.entrypoint.sh e docker-certbot./usr/local/bin/docker-certbot a cada 6 horas./etc/letsencrypt e /var/log/letsencrypt./entrypoint.sh.docker-certbot para geração inicial de certificados.crond em foreground com logs nivelados para monitoramento.CLOUDFLARE_EMAIL e MY_DOMAINS (remove aspas e espaços)./etc/cloudflare.ini com credenciais.--dns-cloudflare, --expand para wildcards, --non-interactive, etc.--dry-run se ativado.certbot certonly para obter/renovar certificados./certificates como cert.pem e key.pem./var/log/certificados.log.Configurado no Dockerfile: 0 */6 * * * /usr/local/bin/docker-certbot (executa a cada 6 horas).
DRY_RUN=true./var/log/certificados.log para detalhes. Use docker cp certbot:/var/log/certificados.log . para copiar./etc/letsencrypt/live/<dominio> existe após execução.--dns-cloudflare-propagation-seconds 15; aumente se necessário editando o script.Para mais depuração, entre no container: docker exec -it certbot bash.
Defina MY_DOMAINS="*.site1.com,*.site2.com" e execute. O Certbot gerará um certificado compartilhado para todos.
Monte o volume como no exemplo de docker-compose, e o Mailcow usará /certificates/cert.pem e key.pem para SSL.
Defina DRY_RUN=true e verifique logs para simulação.
Contribuições são bem-vindas! Abra uma issue para reportar bugs ou sugira melhorias. Para pull requests:
git checkout -b feature/nova-funcionalidade.git commit -m 'Adiciona nova funcionalidade'.git push origin feature/nova-funcionalidade.Este projeto é licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.
Mantenedor: Henrique Fagundes [email protected]
Para mais informações, visite o GitHub Repository ou o Docker Hub Page.
Content type
Image
Digest
sha256:10b6e0a60…
Size
231.4 MB
Last updated
6 months ago
docker pull aprendendolinux/certbot-mailcow