diff --git a/scripts/server-httpd/install-php8-3.sh b/scripts/server-httpd/install-php8-3.sh index 05ba287..b968470 100755 --- a/scripts/server-httpd/install-php8-3.sh +++ b/scripts/server-httpd/install-php8-3.sh @@ -1,165 +1,103 @@ #!/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; } +echo -e "${YELLOW}Mise à jour du système...${RESET}" +apt update && apt upgrade -y -# Détection de la version de Debian VERSION=$(lsb_release -sc) -SUPPORTED_VERSIONS=("buster" "bullseye" "bookworm") - +SUPPORTED_VERSIONS=("trixie") TIMEZONE=$(timedatectl show --value --property=Timezone) +TIMEZONE=${TIMEZONE:-UTC} if [[ ! " ${SUPPORTED_VERSIONS[@]} " =~ " ${VERSION} " ]]; then - echo -e "${RED}Version de Debian non supportée : $VERSION${RESET}" + echo -e "${RED}Version 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 +# Dépôt Sury (Format moderne avec signed-by pour Trixie) 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 install -y ca-certificates apt-transport-https curl + curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg + echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $VERSION main" > /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" +echo -e "${YELLOW}Installation de PHP $PHP_VERSION...${RESET}" -PHP_INI_CLI="/etc/php/${PHP_VERSION}/cli/php.ini" -PHP_INI_APACHE="/etc/php/${PHP_VERSION}/apache2/php.ini" - -# Vérification de l'installation de PHP -echo -e "${YELLOW}Installation de PHP $PHP_VERSION et des modules courants...${RESET}" - -# Base des modules PHP à installer PHP_MODULES=( - php${PHP_VERSION} - php${PHP_VERSION}-cli - php${PHP_VERSION}-fpm - 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 - php${PHP_VERSION}-exif - php${PHP_VERSION}-gmp - php${PHP_VERSION}-apcu - php${PHP_VERSION}-opcache - php${PHP_VERSION}-sqlite3 + php${PHP_VERSION} php${PHP_VERSION}-cli php${PHP_VERSION}-fpm php${PHP_VERSION}-common + 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 php${PHP_VERSION}-gmp + php${PHP_VERSION}-apcu php${PHP_VERSION}-opcache php${PHP_VERSION}-sqlite3 ) -# Vérification MySQL / MariaDB -if dpkg -l | grep -qE 'mysql-server|mariadb-server'; then - echo -e "${GREEN}MySQL/MariaDB détecté. Ajout du module php-mysql.${RESET}" - PHP_MODULES+=(php${PHP_VERSION}-mysql) -fi +dpkg -l | grep -qE 'mysql-server|mariadb-server' && PHP_MODULES+=(php${PHP_VERSION}-mysql) +dpkg -l | grep -q postgresql && PHP_MODULES+=(php${PHP_VERSION}-pgsql) -# Vérification PostgreSQL -if dpkg -l | grep -q postgresql; then - echo -e "${GREEN}PostgreSQL détecté. Ajout du module php-pgsql.${RESET}" - PHP_MODULES+=(php${PHP_VERSION}-pgsql) -fi +apt install -y "${PHP_MODULES[@]}" -# Installation des modules PHP -echo -e "${GREEN}Installation des modules PHP...${RESET}" -apt install -y "${PHP_MODULES[@]}" || { - echo -e "${RED}❌ Échec de l'installation de PHP ou des modules.${RESET}" - exit 1 -} +# 1. Optimisation des fichiers php.ini (CLI, FPM, Apache) +for INI in "/etc/php/${PHP_VERSION}/fpm/php.ini" "/etc/php/${PHP_VERSION}/cli/php.ini" "/etc/php/${PHP_VERSION}/apache2/php.ini"; do + if [ -f "$INI" ]; then + sed -i 's/memory_limit = .*/memory_limit = 512M/' "$INI" + sed -i 's/upload_max_filesize = .*/upload_max_filesize = 100M/' "$INI" + sed -i 's/post_max_size = .*/post_max_size = 100M/' "$INI" + sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$INI" + sed -i "s|^;*date.timezone =.*|date.timezone = ${TIMEZONE}|" "$INI" + fi +done -# 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" -PHP_INI_DIR="/etc/php/${PHP_VERSION}/fpm/conf.d" - -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 - -# Configuration OPCache -OPCACHE_INI="${PHP_INI_DIR}/10-opcache.ini" +# 2. Optimisation OPcache (incluant le JIT pour PHP 8.3) +OPCACHE_INI="/etc/php/${PHP_VERSION}/fpm/conf.d/10-opcache.ini" cat > "$OPCACHE_INI" < Fichier $OPCACHE_INI mis à jour." -# Configuration APCu -APCU_INI="${PHP_INI_DIR}/20-apcu.ini" +# 3. Optimisation APCu +APCU_INI="/etc/php/${PHP_VERSION}/fpm/conf.d/20-apcu.ini" cat > "$APCU_INI" < Fichier $APCU_INI mis à jour." -# Définir la timezone PHP pour CLI et Apache -sed -i "s|^;*date.timezone =.*|date.timezone = ${TIMEZONE}|" "${PHP_INI_CLI}" -sed -i "s|^;*date.timezone =.*|date.timezone = ${TIMEZONE}|" "${PHP_INI_APACHE}" - -# Test de la configuration Apache -if systemctl is-active --quiet apache2; then - read -rp "Voulez-vous tester le support de PHP par Apache ? (o/n) : " test_php - if [[ "$test_php" =~ ^[oOyY]$ ]]; then - echo -e "${YELLOW}Vérification du support de PHP par Apache...${RESET}" - echo "" > /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:///info.php${RESET}" - else - echo -e "${YELLOW}Test PHP annulé.${RESET}" - fi -else - echo -e "${RED}Le service Apache n'est pas actif.${RESET}" +# 4. Optimisation du Pool PHP-FPM (www.conf) +FPM_POOL="/etc/php/${PHP_VERSION}/fpm/pool.d/www.conf" +if [ -f "$FPM_POOL" ]; then + echo -e "${YELLOW}Optimisation des processus FPM...${RESET}" + sed -i 's/^pm = .*/pm = dynamic/' "$FPM_POOL" + sed -i 's/^pm.max_children = .*/pm.max_children = 80/' "$FPM_POOL" + sed -i 's/^pm.start_servers = .*/pm.start_servers = 10/' "$FPM_POOL" + sed -i 's/^pm.min_spare_servers = .*/pm.min_spare_servers = 5/' "$FPM_POOL" + sed -i 's/^pm.max_spare_servers = .*/pm.max_spare_servers = 20/' "$FPM_POOL" + sed -i 's/^;pm.max_requests = .*/pm.max_requests = 1000/' "$FPM_POOL" fi -echo -e "${GREEN}Installation terminée avec succès ! 🚀${RESET}" +# Finalisation +systemctl restart php${PHP_VERSION}-fpm +if systemctl list-units --type=service --all | grep -q "apache2.service"; then + apt install -y libapache2-mod-php${PHP_VERSION} + systemctl restart apache2 +fi + +echo -e "${GREEN}Installation et optimisations PHP $PHP_VERSION terminées ! 🚀${RESET}" \ No newline at end of file