diff --git a/scripts/server-dhcp/setup_dhcp.sh b/scripts/server-dhcp/setup_dhcp.sh index 4359966..b0c89e9 100644 --- a/scripts/server-dhcp/setup_dhcp.sh +++ b/scripts/server-dhcp/setup_dhcp.sh @@ -19,19 +19,33 @@ else fi -# Obtenir l'adresse IP du serveur sur l'interface principale -IP_SERVEUR=$(ip -4 addr show $(ip route show default | awk '/default/ {print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}') -if [[ -z "$IP_SERVEUR" ]]; then - echo "Impossible de déterminer l'adresse IP du serveur." +# Récupérer toutes les interfaces avec leurs IP v4, sauf loopback +mapfile -t IPS < <(ip -4 -o addr show | awk '!/ lo / {print $2" "$4}') + +if [[ ${#IPS[@]} -eq 0 ]]; then + echo "Aucune interface réseau avec une adresse IPv4 trouvée." exit 1 fi -# Vérifier si l'IP est dans une plage privée autorisée -if [[ "$IP_SERVEUR" =~ ^10\..* || "$IP_SERVEUR" =~ ^192\.168\..* || "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\..* ]]; then - echo "Adresse IP privée détectée : $IP_SERVEUR" +echo "Sélectionnez l'interface et l'IP à utiliser :" +select CHOIX in "${IPS[@]}"; do + if [[ -n "$CHOIX" ]]; then + INTERFACE=$(echo "$CHOIX" | awk '{print $1}') + IP_SERVEUR=$(echo "$CHOIX" | awk '{print $2}' | cut -d'/' -f1) + break + else + echo "Choix invalide." + fi +done + +echo "Interface sélectionnée : $INTERFACE" +echo "Adresse IP sélectionnée : $IP_SERVEUR" + +# Vérifier si l'IP est privée ou publique +if [[ "$IP_SERVEUR" =~ ^10\. ]] || [[ "$IP_SERVEUR" =~ ^192\.168\. ]] || [[ "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]]; then + echo "✅ Adresse IP privée détectée : $IP_SERVEUR" else - echo "Erreur : L'adresse IP $IP_SERVEUR n'est pas dans un réseau privé." - exit 1 + echo "⚠️ Attention : L'adresse IP $IP_SERVEUR semble PUBLIQUE !" fi FORCE=false @@ -40,8 +54,10 @@ if [[ "$1" == "--force" ]]; then echo "Mode forçage activé : reconfiguration complète..." fi -if systemctl is-active --quiet dnsmasq && [ "$FORCE" = false ]; then - echo "dnsmasq est déjà actif et configuré. Utilisez --force pour reconfigurer." +DNSMASQ_CONF="/etc/dnsmasq.conf" + +if grep -q "# CONFIGURE_PAR_CEDRIX" "$DNSMASQ_CONF" && [ "$FORCE" = false ]; then + echo "dnsmasq est déjà configuré. Utilisez --force pour reconfigurer." exit 0 fi @@ -88,7 +104,8 @@ fi # Configurer dnsmasq echo "Configuration de dnsmasq..." -cat <<EOF > /etc/dnsmasq.conf +cat <<EOF > $DNSMASQ_CONF +# CONFIGURE_PAR_CEDRIX # Configuration de dnsmasq # Interface réseau principale diff --git a/scripts/server-httpd/add_domain.sh b/scripts/server-httpd/add_domain.sh index 85461d3..082672c 100644 --- a/scripts/server-httpd/add_domain.sh +++ b/scripts/server-httpd/add_domain.sh @@ -14,15 +14,6 @@ check_dns "$DOMAIN" REVERSED_DOMAIN=$(echo "$DOMAIN" | awk -F. '{for(i=NF; i>0; i--) printf "%s%s", $i, (i>1 ? "." : "")}') VHOST_CONF="/etc/apache2/sites-available/$REVERSED_DOMAIN.conf" -LE_DIR="/etc/letsencrypt/live/$DOMAIN" -BACKUP_DIR="/etc/apache2/backups" -TEMPLATE_DIR="/etc/apache2/templates" -TEMPLATE="$TEMPLATE_DIR/vhost-template.conf" -CHALLENGE_DIR="/var/www/cedrix/.well-known/acme-challenge" -PATH_URL_ACME_CHALLENGE=".well-known/acme-challenge" -TEST_FILE="test-challenge" -TEST_URL="http://${DOMAIN}/${PATH_URL_ACME_CHALLENGE}/${TEST_FILE}" -RANDOM_CONTENT=$(openssl rand -hex 12) # Créer les dossiers nécessaires mkdir -p "$BACKUP_DIR" "$TEMPLATE_DIR" "$CHALLENGE_DIR" @@ -32,8 +23,6 @@ mkdir -p "/var/www/$REVERSED_DOMAIN" chown -R www-data:www-data "/var/www/$REVERSED_DOMAIN" chmod -R 755 "/var/www/$REVERSED_DOMAIN" - - # Vérifier si le VirtualHost HTTP existe déjà if [[ ! -f "$VHOST_CONF" ]]; then echo "=== Création du fichier VirtualHost HTTP pour $DOMAIN ===" @@ -44,11 +33,9 @@ if [[ ! -f "$VHOST_CONF" ]]; then ErrorLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-error.log CustomLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-access.log combined - # Cedrix challenge - Alias /${PATH_URL_ACME_CHALLENGE}/ $CHALLENGE_DIR/ - <Directory $CHALLENGE_DIR> + <Directory /var/www/$REVERSED_DOMAIN> Options +Indexes - AllowOverride None + AllowOverride All Require all granted </Directory> @@ -61,26 +48,5 @@ else echo "✅ VirtualHost HTTP déjà configuré pour $DOMAIN." fi - -# Vérification d'accès au dossier cedric-challenge -echo "Vérification d'accès au dossier ${PATH_URL_ACME_CHALLENGE}" -echo "$RANDOM_CONTENT" | sudo tee "$CHALLENGE_DIR/$TEST_FILE" > /dev/null -chmod 644 "$CHALLENGE_DIR/$TEST_FILE" -RESPONSE=$(curl -s "$TEST_URL") - -if [[ "$RESPONSE" == "$RANDOM_CONTENT" ]]; then - echo "✅ Le dossier est accessible depuis l'extérieur." -else - echo "❌ Le dossier n'est pas accessible depuis l'extérieur." - echo "URL testée : $TEST_URL" - echo "Vérifiez votre configuration Apache/Nginx, les firewalls, les proxy et les permissions." - #sudo rm -f "$CHALLENGE_DIR/$TEST_FILE" - exit 3 -fi - -# Suppression du fichier test -#sudo rm -f "$CHALLENGE_DIR/$TEST_FILE" - - echo "✅ Virtual Host configuré pour $DOMAIN avec succès !" exit 0 diff --git a/scripts/server-httpd/install-php8-3.sh b/scripts/server-httpd/install-php8-3.sh new file mode 100644 index 0000000..095697b --- /dev/null +++ b/scripts/server-httpd/install-php8-3.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0 + +# Importer les fonctions communes +source "$(dirname "$0")/../common/common_utils.sh" + +# Vérifier si le script est exécuté en root +check_root + +# Définition des couleurs pour un affichage clair +GREEN="\e[32m" +YELLOW="\e[33m" +RED="\e[31m" +RESET="\e[0m" + +echo -e "${YELLOW}Mise à jour des paquets...${RESET}" +apt update && apt upgrade -y || { echo -e "${RED}Échec de la mise à jour des paquets${RESET}"; exit 1; } + +# Détection de la version de Debian +VERSION=$(lsb_release -sc) +SUPPORTED_VERSIONS=("buster" "bullseye" "bookworm") + +if [[ ! " ${SUPPORTED_VERSIONS[@]} " =~ " ${VERSION} " ]]; then + echo -e "${RED}Version de Debian non supportée : $VERSION${RESET}" + exit 1 +fi + +echo -e "${GREEN}Version de Debian détectée : $VERSION${RESET}" + +# Vérification de l'existence du dépôt Sury +if ! grep -q "packages.sury.org" /etc/apt/sources.list.d/php.list 2>/dev/null; then + echo -e "${YELLOW}Ajout du dépôt Sury pour PHP...${RESET}" + apt install -y ca-certificates apt-transport-https software-properties-common || { echo -e "${RED}Échec de l'installation des paquets nécessaires${RESET}"; exit 1; } + wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg || { echo -e "${RED}Échec du téléchargement de la clé GPG de Sury${RESET}"; exit 1; } + echo "deb https://packages.sury.org/php/ $VERSION main" | tee /etc/apt/sources.list.d/php.list + apt update +else + echo -e "${GREEN}Le dépôt Sury est déjà installé.${RESET}" +fi + +# Définition de la version PHP souhaitée +PHP_VERSION="8.3" + +# Vérification de l'installation de PHP +echo -e "${YELLOW}Installation de PHP $PHP_VERSION et des modules courants...${RESET}" +apt install -y php$PHP_VERSION php$PHP_VERSION-cli php$PHP_VERSION-fpm \ + php$PHP_VERSION-mysql php$PHP_VERSION-curl php$PHP_VERSION-gd \ + php$PHP_VERSION-mbstring php$PHP_VERSION-xml php$PHP_VERSION-zip \ + php$PHP_VERSION-bcmath php$PHP_VERSION-soap php$PHP_VERSION-intl \ + php$PHP_VERSION-readline php$PHP_VERSION-ldap php$PHP_VERSION-imagick || { echo -e "${RED}Échec de l'installation de PHP${RESET}"; exit 1; } + +# Vérification si Apache est installé et installation du module PHP si nécessaire +if systemctl list-units --type=service --all | grep -q "apache2.service"; then + echo -e "${YELLOW}Apache détecté. Installation de libapache2-mod-php${RESET}" + apt install -y libapache2-mod-php$PHP_VERSION || { echo -e "${RED}Échec de l'installation de libapache2-mod-php${RESET}"; exit 1; } + + echo -e "${YELLOW}Redémarrage d'Apache...${RESET}" + systemctl restart apache2 || { echo -e "${RED}Échec du redémarrage d'Apache${RESET}"; exit 1; } +fi + +# Configuration de PHP-FPM si ce n'est pas déjà fait +PHP_INI="/etc/php/$PHP_VERSION/fpm/php.ini" + +if grep -q "memory_limit = 512M" "$PHP_INI"; then + echo -e "${GREEN}Configuration de PHP-FPM déjà optimisée.${RESET}" +else + echo -e "${YELLOW}Configuration de PHP-FPM...${RESET}" + sed -i 's/memory_limit = .*/memory_limit = 512M/' "$PHP_INI" + sed -i 's/upload_max_filesize = .*/upload_max_filesize = 100M/' "$PHP_INI" + sed -i 's/post_max_size = .*/post_max_size = 100M/' "$PHP_INI" + sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$PHP_INI" + + echo -e "${YELLOW}Redémarrage de PHP-FPM...${RESET}" + systemctl restart php$PHP_VERSION-fpm || { echo -e "${RED}Échec du redémarrage de PHP-FPM${RESET}"; exit 1; } +fi + +# Vérification des modules PHP installés +echo -e "${GREEN}Modules PHP installés :${RESET}" +php -m + +# Test de la configuration Apache +if systemctl is-active --quiet apache2; then + echo -e "${YELLOW}Vérification du support de PHP par Apache...${RESET}" + echo "<?php phpinfo(); ?>" > /var/www/html/info.php + chown www-data:www-data /var/www/html/info.php + chmod 644 /var/www/html/info.php + echo -e "${GREEN}Vous pouvez tester PHP en accédant à : http://<IP_SERVEUR>/info.php${RESET}" +fi + +echo -e "${GREEN}Installation terminée avec succès ! 🚀${RESET}"