NgixProxy_Pathfinder/nginx/sites-available/generate_certs.sh

101 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# ==============================================================================
# SCRIPT DE GERAÇÃO DE CERTIFICADOS SSL EM LOTE
#
# Descrição: Este script automatiza a obtenção de certificados Let's Encrypt
# para todos os sites configurados no Nginx.
# ==============================================================================
# --- Variáveis de Configuração ---
SITES_DIR="/etc/nginx/sites-available"
# Use um email válido para as notificações do Let's Encrypt
ADMIN_EMAIL="operacoes@itguys.com.br"
# --- Funções de Ajuda ---
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
error() { echo -e "\e[31m[ERRO]\e[0m $1"; }
warn() { echo -e "\e[33m[AVISO]\e[0m $1"; }
# --- Início da Execução ---
info "Iniciando o processo de geração de certificados para os sites em ${SITES_DIR}..."
if [ "$EUID" -ne 0 ]; then
error "Este script precisa de ser executado como root."
fi
# Arrays para guardar os resultados
SUCCESS_SITES=()
FAILED_SITES=()
# Percorre cada ficheiro de configuração no diretório de sites disponíveis.
for file in "$SITES_DIR"/*.conf; do
# Verifica se é um ficheiro regular.
if [[ ! -f "$file" ]]; then
continue
fi
echo ""
info "----------------------------------------------------------------------"
info "A processar o ficheiro: $(basename "$file")"
info "----------------------------------------------------------------------"
# Extrai todos os server_names do ficheiro, ignorando os comentados.
# Esta regex lida com múltiplas linhas de server_name e múltiplos domínios por linha.
DOMAINS=$(grep -v '^\s*#' "$file" | grep "server_name" | sed 's/server_name//' | sed 's/;//' | xargs)
# Se não encontrar nenhum server_name, salta para o próximo ficheiro.
if [ -z "$DOMAINS" ]; then
warn "Nenhum 'server_name' encontrado em $file. A ignorar."
continue
fi
# Constrói a lista de argumentos '-d' para o Certbot.
CERTBOT_DOMAIN_ARGS=""
for domain in $DOMAINS; do
CERTBOT_DOMAIN_ARGS+=" -d $domain"
done
info "Domínios encontrados: $DOMAINS"
info "A executar o Certbot..."
# Executa o Certbot.
# O comando 'if' verifica o código de saída do Certbot para saber se foi bem-sucedido.
if sudo certbot --nginx --non-interactive --agree-tos --no-eff-email --redirect ${CERTBOT_DOMAIN_ARGS} -m "$ADMIN_EMAIL"; then
info "Certificado para os domínios em $(basename "$file") gerado com sucesso!"
SUCCESS_SITES+=("$(basename "$file")")
else
error "Falha ao gerar o certificado para os domínios em $(basename "$file")."
FAILED_SITES+=("$(basename "$file")")
fi
done
# --- Relatório Final ---
echo ""
echo "======================================================================"
echo " RELATÓRIO FINAL DE GERAÇÃO DE CERTIFICADOS"
echo "======================================================================"
echo ""
if [ ${#SUCCESS_SITES[@]} -ne 0 ]; then
info "Certificados gerados com SUCESSO para:"
for site in "${SUCCESS_SITES[@]}"; do
echo " - $site"
done
fi
echo ""
if [ ${#FAILED_SITES[@]} -ne 0 ]; then
error "FALHA ao gerar certificados para:"
for site in "${FAILED_SITES[@]}"; do
echo " - $site"
done
warn "Verifique se os registos de DNS para os domínios acima estão a apontar corretamente para este servidor e tente novamente."
else
info "Todos os certificados foram gerados sem erros!"
fi
echo ""
info "Processo concluído."