2024-03-17 13:51:53 +00:00
#!/bin/bash
# Script Name: cloudpanel-autorenew-letsencrypt-certs.v1.sh
# Beschreibung: Erneuert automatisch Letsencrypt Zertifikate in Cloudpanel
# Aufruf: bash ./cloudpanel-autorenew-letsencrypt-certs.v1.sh
# Autor: Patrick Asmus
2024-05-07 19:09:56 +00:00
# Web: https://www.techniverse.net
# Git-Reposit.: https://git.techniverse.net/scriptos/cloudpanel-autorenew-letsencrypt-certs.git
2024-05-20 10:59:04 +00:00
# Version: 1.3
# Datum: 20.05.2024
# Modifikation: Domains können nun von der Zertifikatenerneuerung ausgeschlossen werden
2024-03-17 13:51:53 +00:00
#####################################################
2024-05-20 10:59:04 +00:00
# Variables
2024-03-18 09:59:07 +00:00
hostname = $( hostname)
2024-03-17 13:51:53 +00:00
config_path = "/etc/nginx/sites-enabled/"
log_dir = "/var/log/script-logs"
log_file = " $log_dir /cloudpanel-letsencrypt-renew.log "
2024-05-20 10:59:04 +00:00
# Email Settings
2024-05-07 19:09:56 +00:00
email_from = "mail@domain.com"
2024-03-18 09:59:07 +00:00
email_from_name = " $hostname | CloudPanel Server "
2024-05-07 19:09:56 +00:00
email_to = "mail@domain.com"
2024-03-18 09:51:17 +00:00
email_subject = " Letsencrypt Zertifikate wurden auf $HOSTNAME erneuert "
2024-05-20 10:59:04 +00:00
# Exclude Domains
exclude_domains = "example.com other.example.com"
2024-03-17 13:51:53 +00:00
# Leite die Ausgaben in das Log-File um
mkdir -p $log_dir
exec > >( tee -i " $log_file " )
exec 2>& 1
# Funktion zur Erneuerung/Erstellung von Zertifikaten
renew_certificate( ) {
local domain = $1
2024-05-20 10:59:04 +00:00
if [ [ ! $exclude_domains = ~ ( ^| [ [ :space:] ] ) $domain ( $| [ [ :space:] ] ) ] ] ; then
echo " Erneuere/Erstelle Zertifikat für: $domain "
bash /usr/bin/clpctl lets-encrypt:install:certificate --domainName= $domain
else
echo " Überspringe $domain , da es ausgeschlossen ist. "
fi
2024-03-17 13:51:53 +00:00
}
# Extrahiere Domains aus den Konfigurationsdateien und führe Zertifikatserneuerung aus
for file in $config_path *; do
domains = $( grep "server_name" $file | awk '{print $2}' | tr -d ';' | sed 's/^www\.//' | tr -d '\r' )
for domain in $domains ; do
if [ " $domain " != "_" ] ; then
renew_certificate $domain
fi
done
done
2024-03-18 09:51:17 +00:00
# Senden einer E-Mail mit dem Logfile als Anhang
2024-03-18 09:59:07 +00:00
echo " Die Letsencrypt Zertifikate wurden auf $HOSTNAME erneuert. Bitte überprüfe das angehängte Log für Details. " | mail -a " $log_file " -s " $email_subject " -r " \" $email_from_name \" < $email_from > " " $email_to "