#!/bin/bash # Script para configurar SSL com Let's Encrypt para bcards.site set -e DOMAIN="bcards.site" EMAIL="admin@bcards.site" # Altere para um email válido # Cores para output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } error() { echo -e "${RED}[ERROR] $1${NC}" exit 1 } warn() { echo -e "${YELLOW}[WARNING] $1${NC}" } # Verificar se Docker está rodando if ! docker info >/dev/null 2>&1; then error "Docker não está rodando" fi # Criar diretórios necessários log "Criando diretórios para SSL..." sudo mkdir -p /etc/letsencrypt /var/www/certbot # Criar configuração temporária do NGINX para validação log "Criando configuração temporária do NGINX..." cat > /tmp/nginx-temp.conf << EOF events { worker_connections 1024; } http { server { listen 80; server_name $DOMAIN www.$DOMAIN; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://\$server_name\$request_uri; } } } EOF # Parar NGINX se estiver rodando log "Parando NGINX existente..." docker stop bcards-nginx 2>/dev/null || true docker rm bcards-nginx 2>/dev/null || true # Iniciar NGINX temporário para validação log "Iniciando NGINX temporário para validação Let's Encrypt..." docker run -d \ --name nginx-temp \ -p 80:80 \ -v /tmp/nginx-temp.conf:/etc/nginx/nginx.conf:ro \ -v /var/www/certbot:/var/www/certbot \ nginx:alpine # Aguardar NGINX inicializar sleep 5 # Obter certificado SSL log "Obtendo certificado SSL para $DOMAIN..." docker run --rm \ -v /etc/letsencrypt:/etc/letsencrypt \ -v /var/www/certbot:/var/www/certbot \ certbot/certbot \ certonly \ --webroot \ --webroot-path=/var/www/certbot \ --email $EMAIL \ --agree-tos \ --no-eff-email \ -d $DOMAIN \ -d www.$DOMAIN # Verificar se o certificado foi criado if [ ! -f "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" ]; then error "Falha ao obter certificado SSL" fi log "Certificado SSL obtido com sucesso!" # Parar NGINX temporário docker stop nginx-temp docker rm nginx-temp # Testar configuração NGINX principal log "Testando configuração NGINX principal..." docker run --rm \ -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro \ -v /etc/letsencrypt:/etc/letsencrypt:ro \ nginx:alpine \ nginx -t log "Configuração NGINX válida!" # Criar script de renovação automática log "Criando script de renovação automática..." cat > /tmp/renew-ssl.sh << 'EOF' #!/bin/bash # Script de renovação automática de certificados SSL docker run --rm \ -v /etc/letsencrypt:/etc/letsencrypt \ -v /var/www/certbot:/var/www/certbot \ certbot/certbot renew # Recarregar NGINX se certificados foram renovados if [ $? -eq 0 ]; then docker exec bcards-nginx nginx -s reload fi EOF sudo mv /tmp/renew-ssl.sh /usr/local/bin/renew-ssl.sh sudo chmod +x /usr/local/bin/renew-ssl.sh # Configurar cron para renovação automática log "Configurando renovação automática..." (crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/renew-ssl.sh >> /var/log/letsencrypt/renew.log 2>&1") | crontab - # Criar diretório de logs sudo mkdir -p /var/log/letsencrypt log "SSL configurado com sucesso!" log "Certificados localizados em: /etc/letsencrypt/live/$DOMAIN/" log "Renovação automática configurada para executar diariamente às 02:00" # Mostrar informações do certificado log "Informações do certificado:" sudo openssl x509 -in /etc/letsencrypt/live/$DOMAIN/fullchain.pem -text -noout | grep -A 2 "Validity"