33800 Docs

← Retour
#!/bin/bash # =========================================== # Script de déploiement Nginx automatisé # Usage: ./deploy-nginx.sh <config_file> [--dry-run] # =========================================== set -e # Configuration NGINX_HOST="192.168.1.104" NGINX_USER="gouroubleu" NGINX_SITES_AVAILABLE="/etc/nginx/sites-available" NGINX_SITES_ENABLED="/etc/nginx/sites-enabled" # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Vérification des arguments if [ -z "$1" ]; then echo "Usage: $0 <config_file.conf> [--dry-run]" echo "" echo "Options:" echo " --dry-run Affiche ce qui serait fait sans l'exécuter" echo "" echo "Exemple:" echo " $0 /tmp/myapp.33800.nowhere84.com.conf" exit 1 fi CONFIG_FILE="$1" DRY_RUN=false if [ "$2" == "--dry-run" ]; then DRY_RUN=true log_warn "Mode dry-run activé" fi # Vérification du fichier if [ ! -f "$CONFIG_FILE" ]; then log_error "Fichier non trouvé: $CONFIG_FILE" exit 1 fi CONFIG_NAME=$(basename "$CONFIG_FILE") log_info "Déploiement de: $CONFIG_NAME" # Test de connexion SSH log_info "Test connexion SSH vers $NGINX_HOST..." if ! ssh -o ConnectTimeout=5 -o BatchMode=yes "$NGINX_USER@$NGINX_HOST" "echo 'SSH OK'" > /dev/null 2>&1; then log_error "Impossible de se connecter à $NGINX_HOST" exit 1 fi log_info "Connexion SSH OK" # Vérification si le fichier existe déjà REMOTE_FILE="$NGINX_SITES_AVAILABLE/$CONFIG_NAME" if ssh "$NGINX_USER@$NGINX_HOST" "[ -f '$REMOTE_FILE' ]" 2>/dev/null; then log_warn "Le fichier $CONFIG_NAME existe déjà sur le serveur" # Créer un backup if [ "$DRY_RUN" = false ]; then BACKUP_NAME="${CONFIG_NAME}.backup.$(date +%Y%m%d%H%M%S)" log_info "Création backup: $BACKUP_NAME" ssh "$NGINX_USER@$NGINX_HOST" "cp '$REMOTE_FILE' '$NGINX_SITES_AVAILABLE/$BACKUP_NAME'" else log_info "[DRY-RUN] Créerait un backup du fichier existant" fi fi # Copie du fichier if [ "$DRY_RUN" = false ]; then log_info "Copie vers $NGINX_HOST:$REMOTE_FILE" scp "$CONFIG_FILE" "$NGINX_USER@$NGINX_HOST:$REMOTE_FILE" else log_info "[DRY-RUN] Copierait $CONFIG_FILE vers $REMOTE_FILE" fi # Création du symlink si pas déjà présent SYMLINK="$NGINX_SITES_ENABLED/$CONFIG_NAME" if ! ssh "$NGINX_USER@$NGINX_HOST" "[ -L '$SYMLINK' ]" 2>/dev/null; then if [ "$DRY_RUN" = false ]; then log_info "Création symlink vers sites-enabled" ssh "$NGINX_USER@$NGINX_HOST" "ln -sf '$REMOTE_FILE' '$SYMLINK'" else log_info "[DRY-RUN] Créerait symlink $SYMLINK -> $REMOTE_FILE" fi else log_info "Symlink déjà présent" fi # Test de la configuration Nginx log_info "Test de la configuration Nginx..." if [ "$DRY_RUN" = false ]; then if ssh "$NGINX_USER@$NGINX_HOST" "sudo /usr/sbin/nginx -t" 2>&1; then log_info "Configuration Nginx valide" else log_error "Configuration Nginx invalide!" log_error "Restauration du backup..." if [ -n "$BACKUP_NAME" ]; then ssh "$NGINX_USER@$NGINX_HOST" "cp '$NGINX_SITES_AVAILABLE/$BACKUP_NAME' '$REMOTE_FILE'" fi exit 1 fi else log_info "[DRY-RUN] Testerait la configuration Nginx" fi # Reload Nginx if [ "$DRY_RUN" = false ]; then log_info "Rechargement de Nginx..." ssh "$NGINX_USER@$NGINX_HOST" "sudo /usr/bin/systemctl reload nginx" log_info "Nginx rechargé avec succès" else log_info "[DRY-RUN] Rechargerait Nginx" fi # Extraction des server_name pour les tests log_info "Extraction des domaines configurés..." DOMAINS=$(grep -oP 'server_name \K[^;]+' "$CONFIG_FILE" | tr ' ' '\n' | sort -u) echo "" log_info "=== Déploiement terminé ===" echo "" echo "Domaines configurés:" for domain in $DOMAINS; do echo " - https://$domain" done echo "" # Test des URLs (optionnel) if [ "$DRY_RUN" = false ]; then log_info "Test des URLs..." for domain in $DOMAINS; do HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "https://$domain" 2>/dev/null || echo "ERR") if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "301" ] || [ "$HTTP_CODE" = "302" ]; then echo -e " ${GREEN}✅${NC} https://$domain -> $HTTP_CODE" else echo -e " ${RED}❌${NC} https://$domain -> $HTTP_CODE" fi done fi echo "" log_info "Done!"