website/conf/letsencrypt-setup.sh
2025-09-29 08:24:59 +00:00

127 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
# Script pour configurer Let's Encrypt pour 4nk.network
# À exécuter une fois que le DNS est configuré
set -e
DOMAIN="4nk.network"
EMAIL="admin@4nk.network"
NGINX_CONF="/etc/nginx/sites-available/4nk.network.conf"
BACKUP_CONF="/etc/nginx/sites-available/4nk.network.conf.backup"
echo "🔧 Configuration Let's Encrypt pour $DOMAIN"
echo "=============================================="
# Vérifier que le domaine pointe vers ce serveur (prise en charge IPv4/IPv6)
echo "📡 Vérification DNS (A/AAAA) et IP publique (v4/v6)..."
# Récupère les enregistrements DNS A et AAAA
DOMAIN_IPV4S=$(dig +short A $DOMAIN | tr '\n' ' ' | sed 's/ *$//')
DOMAIN_IPV6S=$(dig +short AAAA $DOMAIN | tr '\n' ' ' | sed 's/ *$//')
# Récupère les IP publiques du serveur (si existantes)
SERVER_IPV4=$(curl -4 -s https://api.ipify.org || true)
SERVER_IPV6=$(curl -6 -s https://api64.ipify.org || true)
echo " Domaine A: ${DOMAIN_IPV4S:-none}"
echo " Domaine AAAA: ${DOMAIN_IPV6S:-none}"
echo " Serveur v4: ${SERVER_IPV4:-none}"
echo " Serveur v6: ${SERVER_IPV6:-none}"
DNS_OK=false
# Correspondance IPv4 si disponible
if [ -n "$SERVER_IPV4" ] && echo "$DOMAIN_IPV4S" | grep -q "\b$SERVER_IPV4\b"; then
DNS_OK=true
fi
# Correspondance IPv6 si disponible
if [ -n "$SERVER_IPV6" ] && echo "$DOMAIN_IPV6S" | grep -q "\b$SERVER_IPV6\b"; then
DNS_OK=true
fi
if [ "$DNS_OK" != true ]; then
echo "❌ Erreur: Le domaine $DOMAIN ne pointe pas vers l'IP publique de ce serveur"
echo " Vérifiez les enregistrements DNS A et/ou AAAA selon votre connectivité."
exit 1
fi
echo "✅ DNS configuré correctement (A/AAAA)"
# Sauvegarder la configuration actuelle
echo "💾 Sauvegarde de la configuration nginx..."
sudo cp "$NGINX_CONF" "$BACKUP_CONF"
# Créer une configuration temporaire pour certbot
echo "🔧 Création de la configuration temporaire..."
sudo tee /tmp/4nk.network-temp.conf > /dev/null <<EOF
# Configuration nginx temporaire pour certbot
server {
listen 80;
server_name $DOMAIN www.$DOMAIN;
root /home/debian/website;
index index.html;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
# Remplacer la configuration nginx
sudo cp /tmp/4nk.network-temp.conf "$NGINX_CONF"
sudo nginx -t
sudo systemctl reload nginx
# Générer les certificats Let's Encrypt
echo "🔐 Génération des certificats Let's Encrypt..."
sudo certbot --nginx -d $DOMAIN -d www.$DOMAIN --non-interactive --agree-tos --email $EMAIL
# Vérifier que les certificats ont été générés
if [ -f "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" ]; then
echo "✅ Certificats Let's Encrypt générés avec succès"
# Mettre à jour la configuration nginx avec les vrais certificats
echo "🔧 Mise à jour de la configuration nginx..."
sudo sed -i "s|/etc/ssl/$DOMAIN/fullchain.pem|/etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" "$NGINX_CONF"
sudo sed -i "s|/etc/ssl/$DOMAIN/privkey.pem|/etc/letsencrypt/live/$DOMAIN/privkey.pem|g" "$NGINX_CONF"
sudo sed -i "s|# Configuration SSL (certificats auto-signés temporaires)|# Configuration SSL (Let's Encrypt)|g" "$NGINX_CONF"
sudo nginx -t
sudo systemctl reload nginx
echo "🎉 Configuration terminée avec succès !"
echo " Site accessible sur: https://$DOMAIN"
echo " Redirection HTTP vers HTTPS activée"
echo " Certificats SSL valides et sécurisés"
# Configurer le renouvellement automatique (cron si disponible, sinon systemd timer de certbot)
echo "🔄 Configuration du renouvellement automatique..."
if command -v crontab >/dev/null 2>&1; then
(crontab -l 2>/dev/null; echo "0 12 * * * /usr/bin/certbot renew --quiet") | crontab -
echo " Cron installé pour le renouvellement quotidien."
else
echo " 'crontab' indisponible. Certbot a déjà installé un timer systemd (recommandé)."
echo " Vous pouvez vérifier via: systemctl list-timers | grep certbot"
fi
else
echo "❌ Erreur lors de la génération des certificats"
echo "🔄 Restauration de la configuration de sauvegarde..."
sudo cp "$BACKUP_CONF" "$NGINX_CONF"
sudo systemctl reload nginx
exit 1
fi
echo ""
echo "📋 Résumé de la configuration:"
echo " - Domaine: $DOMAIN et www.$DOMAIN"
echo " - Redirection HTTP → HTTPS"
echo " - Certificats SSL Let's Encrypt"
echo " - Headers de sécurité activés"
echo " - Renouvellement automatique configuré"
echo ""
echo "🌐 Testez votre site: https://$DOMAIN"