127 lines
4.4 KiB
Bash
Executable File
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"
|