diff --git a/nginx/sites-available/business.itguys.com.br.conf b/nginx/sites-available/business.itguys.com.br.conf index df99eea..fccc50c 100644 --- a/nginx/sites-available/business.itguys.com.br.conf +++ b/nginx/sites-available/business.itguys.com.br.conf @@ -89,4 +89,7 @@ server { #ssl_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # managed by Certbot #ssl_certificate_key /etc/letsencrypt/live/business.itguys.com.br/privkey.pem; # managed by Certbot + + ssl_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/business.itguys.com.br/privkey.pem; # managed by Certbot } diff --git a/nginx/sites-available/cloud.grupopralog.com.br.conf b/nginx/sites-available/cloud.grupopralog.com.br.conf index bdfe2e3..0fd165c 100644 --- a/nginx/sites-available/cloud.grupopralog.com.br.conf +++ b/nginx/sites-available/cloud.grupopralog.com.br.conf @@ -7,11 +7,18 @@ # BLOCO HTTP: Redirecionar para HTTPS # ============================================================================== server { + if ($host = cloud.grupopralog.com.br) { + return 301 https://$host$request_uri; + } # managed by Certbot + + listen 80; listen [::]:80; server_name cloud.grupopralog.com.br; location /.well-known/acme-challenge/ { root /var/www/html; } location / { return 301 https://$host$request_uri; } + + } # ============================================================================== @@ -82,6 +89,9 @@ server { proxy_pass http://172.16.253.12; } + + ssl_certificate /etc/letsencrypt/live/cloud.grupopralog.com.br/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/cloud.grupopralog.com.br/privkey.pem; # managed by Certbot } diff --git a/nginx/sites-available/generate_certs.sh b/nginx/sites-available/generate_certs.sh new file mode 100755 index 0000000..6699e42 --- /dev/null +++ b/nginx/sites-available/generate_certs.sh @@ -0,0 +1,100 @@ +#!/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."