Cert XMPP Single place

touch /etc/ejabberd/ejabberd.sh

#!/bin/bash

# ejabberd SSL tanúsítvány szinkronizáló script
# Használat: /usr/local/bin/ejabberd-cert-sync.sh

# Konfigurációs változók
LETSENCRYPT_DIR="/etc/letsencrypt/live"
EJABBERD_CERT_DIR="/etc/ejabberd/certs"
EJABBERD_USER="ejabberd"
EJABBERD_GROUP="ejabberd"
LOG_FILE="/var/log/ejabberd-cert-sync.log"

# Logging függvény (kikapcsolható)
ENABLE_LOGGING=false  # true = logging BE, false = logging KI

log() {
    if [[ "$ENABLE_LOGGING" == "true" ]]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
    fi
}

# Ellenőrizzük, hogy root-ként futunk-e
if [[ $EUID -ne 0 ]]; then
   log "HIBA: Ezt a scriptet root-ként kell futtatni!"
   exit 1
fi

log "=== ejabberd tanúsítvány szinkronizálás indítása ==="

# Létrehozzuk a cél könyvtárat ha nem létezik
if [[ ! -d "$EJABBERD_CERT_DIR" ]]; then
    mkdir -p "$EJABBERD_CERT_DIR"
    log "Létrehozva: $EJABBERD_CERT_DIR"
fi

# Változók a változások követéséhez
COPIED_COUNT=0
ERROR_COUNT=0

# Végigmegyünk az összes Let's Encrypt tanúsítványon
for domain_dir in "$LETSENCRYPT_DIR"/*; do
    if [[ -d "$domain_dir" ]]; then
        domain=$(basename "$domain_dir")
        
        # Kihagyás ha ez a README könyvtár
        if [[ "$domain" == "README" ]]; then
            log "  Kihagyva: README könyvtár"
            continue
        fi
        
        # Ellenőrizzük, hogy léteznek-e a szükséges fájlok
        if [[ -f "$domain_dir/fullchain.pem" && -f "$domain_dir/privkey.pem" ]]; then
            log "Feldolgozás: $domain"
            
            # Másolás fullchain.pem
            if cp "$domain_dir/fullchain.pem" "$EJABBERD_CERT_DIR/${domain}.pem"; then
                log "  ✓ Másolva: ${domain}.pem"
            else
                log "  ✗ HIBA: ${domain}.pem másolása sikertelen"
                ((ERROR_COUNT++))
                continue
            fi
            
            # Másolás privkey.pem
            if cp "$domain_dir/privkey.pem" "$EJABBERD_CERT_DIR/${domain}-key.pem"; then
                log "  ✓ Másolva: ${domain}-key.pem"
            else
                log "  ✗ HIBA: ${domain}-key.pem másolása sikertelen"
                ((ERROR_COUNT++))
                continue
            fi
            
            # Kombinált fájl létrehozása (fullchain + privkey)
            if cat "$domain_dir/fullchain.pem" "$domain_dir/privkey.pem" > "$EJABBERD_CERT_DIR/${domain}-combined.pem"; then
                log "  ✓ Létrehozva: ${domain}-combined.pem"
            else
                log "  ✗ HIBA: ${domain}-combined.pem létrehozása sikertelen"
                ((ERROR_COUNT++))
            fi
            
            ((COPIED_COUNT++))
        else
            log "  ⚠ Kihagyva: $domain (hiányzó fájlok)"
        fi
    fi
done

# Jogosultságok beállítása
log "Jogosultságok beállítása..."

# Mappa jogosultságok
chown -R "$EJABBERD_USER:$EJABBERD_GROUP" "$EJABBERD_CERT_DIR"
chmod 750 "$EJABBERD_CERT_DIR"

# Fájl jogosultságok
find "$EJABBERD_CERT_DIR" -name "*.pem" -exec chmod 640 {} \;

log "✓ Jogosultságok beállítva: $EJABBERD_USER:$EJABBERD_GROUP"

# ejabberd újratöltése (ha futott változás)
if [[ $COPIED_COUNT -gt 0 ]]; then
    log "ejabberd konfigurációjának újratöltése..."
    
    if systemctl is-active --quiet ejabberd; then
        if systemctl reload ejabberd; then
            log "✓ ejabberd újratöltve"
        else
            log "✗ HIBA: ejabberd újratöltése sikertelen"
            ((ERROR_COUNT++))
        fi
    else
        log "⚠ ejabberd nem fut, újratöltés kihagyva"
    fi
fi

# Összesítés
log "=== Szinkronizálás befejezve ==="
log "Feldolgozott domainok: $COPIED_COUNT"
log "Hibák száma: $ERROR_COUNT"

# Fájlok listázása
log "Létrehozott fájlok:"
ls -la "$EJABBERD_CERT_DIR"/*.pem 2>/dev/null | while read line; do
    log "  $line"
done

# Hibakód visszaadása
if [[ $ERROR_COUNT -gt 0 ]]; then
    exit 1
else
    exit 0
fi

0 3 * * * /etc/ejabberd/ejabberd.sh >/dev/null 2>&1

nano /etc/ejabberd/ejabberd.yml and set

certfiles:
- “/etc/ejabberd/certs/*.pem”