SSL grátis na VPS com Let's Encrypt
Let's Encrypt é uma autoridade certificadora gratuita que emite certificados SSL/TLS válidos em segundos. Com Certbot, a geração e renovação são automáticas. A única exigência é que o domínio aponte para o IP da VPS e a porta 80 esteja acessível para o desafio de validação.
Instalar o Certbot via Docker
O jeito mais simples de usar Certbot em uma VPS com Docker é rodar a imagem oficial como container — sem instalar nada no sistema operacional:
# Criar diretórios para certificados
mkdir -p /opt/ssl/certs /opt/ssl/www
# Testar se o Certbot consegue acessar o servidor
docker run --rm \
-v /opt/ssl/certs:/etc/letsencrypt \
-v /opt/ssl/www:/var/www/certbot \
certbot/certbot certificates
# Verificar versão
docker run --rm certbot/certbot --versionGerar certificado (método webroot)
O método webroot valida o domínio colocando um arquivo em .well-known/acme-challenge/ que o Let's Encrypt busca via HTTP. Requer que o Nginx sirva essa pasta:
# Nginx deve ter essa configuração no bloco server:
# location /.well-known/acme-challenge/ {
# root /var/www/certbot;
# }
# Gerar certificado (substitua domínio e e-mail)
docker run --rm \
-v /opt/ssl/certs:/etc/letsencrypt \
-v /opt/ssl/www:/var/www/certbot \
certbot/certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email seu@email.com \
--agree-tos \
--no-eff-email \
-d seudominio.com.br \
-d www.seudominio.com.br
# Certificados em:
ls /opt/ssl/certs/live/seudominio.com.br/
# cert.pem chain.pem fullchain.pem privkey.pemConfigurar Nginx para HTTPS
Após gerar o certificado, atualize o bloco server do Nginx para escutar em 443 e redirecionar HTTP:
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://seudominio.com.br$request_uri;
}
}
server {
listen 443 ssl;
http2 on;
server_name seudominio.com.br www.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
add_header Strict-Transport-Security "max-age=63072000" always;
# ... configuração do seu app aqui
}Renovação automática via cron
Certificados Let's Encrypt expiram em 90 dias e podem ser renovados a partir de 30 dias antes. Configure a renovação automática:
# Crontab do root (crontab -e)
# Renova às 3h da manhã, verifica diariamente (só renova se < 30 dias)
0 3 * * * docker run --rm \
-v /opt/ssl/certs:/etc/letsencrypt \
-v /opt/ssl/www:/var/www/certbot \
certbot/certbot renew --quiet && \
docker exec nginx nginx -s reload
# Testar sem renovar de verdade
docker run --rm \
-v /opt/ssl/certs:/etc/letsencrypt \
-v /opt/ssl/www:/var/www/certbot \
certbot/certbot renew --dry-runMétodo alternativo: Certbot standalone
Se não tiver Nginx rodando na porta 80, use o modo standalone — o Certbot sobe um servidor HTTP temporário para o desafio:
# Para temporariamente (se Nginx estiver rodando, pare antes)
docker stop nginx
# Gerar certificado com standalone
docker run --rm \
-v /opt/ssl/certs:/etc/letsencrypt \
-p 80:80 \
certbot/certbot certonly \
--standalone \
--email seu@email.com \
--agree-tos \
--no-eff-email \
-d seudominio.com.br
# Reiniciar Nginx
docker start nginx$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.