|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +DOMAIN=$1 |
| 4 | +EMAIL=$2 |
| 5 | + |
| 6 | +if [ -z "$DOMAIN" ] || [ -z "$EMAIL" ]; then |
| 7 | + echo "Uso: bash scripts/setup-ssl.sh <seu-dominio.com> <seu-email@exemplo.com>" |
| 8 | + exit 1 |
| 9 | +fi |
| 10 | + |
| 11 | +echo "==========================================" |
| 12 | +echo "1. Instalando Certbot no Amazon Linux 2023" |
| 13 | +echo "==========================================" |
| 14 | +sudo dnf install -y python3 augeas-libs |
| 15 | +sudo python3 -m venv /opt/certbot/ |
| 16 | +sudo /opt/certbot/bin/pip install --upgrade pip |
| 17 | +sudo /opt/certbot/bin/pip install certbot |
| 18 | +sudo ln -sf /opt/certbot/bin/certbot /usr/bin/certbot |
| 19 | + |
| 20 | +echo "==========================================" |
| 21 | +echo "2. Parando o servidor web para liberar a porta 80" |
| 22 | +echo "==========================================" |
| 23 | +docker compose stop web |
| 24 | + |
| 25 | +echo "==========================================" |
| 26 | +echo "3. Gerando certificado SSL para $DOMAIN" |
| 27 | +echo "==========================================" |
| 28 | +# O Certbot vai subir um servidor temporário na porta 80 para validar o domínio |
| 29 | +sudo certbot certonly --standalone -d $DOMAIN -m $EMAIL --agree-tos --non-interactive |
| 30 | + |
| 31 | +if [ ! -d "/etc/letsencrypt/live/$DOMAIN" ]; then |
| 32 | + echo "❌ Falha ao gerar o certificado SSL. Verifique se o DNS propagou." |
| 33 | + docker compose start web |
| 34 | + exit 1 |
| 35 | +fi |
| 36 | + |
| 37 | +echo "==========================================" |
| 38 | +echo "4. Configurando Nginx para usar SSL" |
| 39 | +echo "==========================================" |
| 40 | +# Substitui o domínio no template de configuração e gera o arquivo de produção |
| 41 | +sed "s/YOUR_DOMAIN/$DOMAIN/g" apps/web/nginx-ssl.template.conf > apps/web/nginx-prod.conf |
| 42 | + |
| 43 | +echo "==========================================" |
| 44 | +echo "5. Iniciando os containers com suporte a SSL" |
| 45 | +echo "==========================================" |
| 46 | +docker compose -f docker-compose.yaml -f docker-compose.prod.yaml up -d |
| 47 | + |
| 48 | +echo "==========================================" |
| 49 | +echo "6. Configurando renovação automática (Cron)" |
| 50 | +echo "==========================================" |
| 51 | +# O cron rodará todo dia de madrugada, parando o container apenas se for renovar, e depois ligando novamente. |
| 52 | +CRON_CMD="0 3 * * * root /opt/certbot/bin/certbot renew -q --pre-hook \"cd $(pwd) && docker compose stop web\" --post-hook \"cd $(pwd) && docker compose -f docker-compose.yaml -f docker-compose.prod.yaml start web\"" |
| 53 | +echo "$CRON_CMD" | sudo tee /etc/cron.d/certbot-renew > /dev/null |
| 54 | + |
| 55 | +echo "==========================================" |
| 56 | +echo "✅ SSL configurado com sucesso para https://$DOMAIN!" |
| 57 | +echo "==========================================" |
0 commit comments