#!/bin/bash # info: add php fpm version # options: VERSION # # example: v-add-web-php 8.0 # # Install php-fpm for provided version. #----------------------------------------------------------# # Variables & Functions # #----------------------------------------------------------# # Argument definition version=$1 # Includes # shellcheck source=/etc/hestiacp/hestia.conf source /etc/hestiacp/hestia.conf # shellcheck source=/usr/local/hestia/func/main.sh source $HESTIA/func/main.sh # load config file source_conf "$HESTIA/conf/hestia.conf" source_conf "$HESTIA/install/upgrade/upgrade.conf" #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# check_args '1' "$#" 'VERSION' if [ -z "$WEB_BACKEND" ]; then echo "Multiple php versions are not supported for modphp" fi # Set file locations php_fpm="/etc/init.d/php$version-fpm" # Verify php version format if [ -f /etc/redhat-release ]; then if [[ ! $version =~ ^[0-9][0-9]+ ]]; then echo "The specified PHP version format is invalid, it should look like [0-9][0-9]." echo "Example: 70, 74, 80" exit "$E_INVALID" fi else if [[ ! $version =~ ^[0-9].[0-9]+ ]]; then echo "The specified PHP version format is invalid, it should look like [0-9].[0-9]." echo "Example: 7.0, 7.4, 8.0" exit "$E_INVALID" fi fi # Check if php version already exists if [ -f "$php_fpm" ] && [ -f "$HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl" ]; then echo "ERROR: Specified PHP version is already installed." exit "$E_INVALID" fi # Check if php version is supported if [[ ! "$multiphp_v" =~ $version ]]; then echo "ERROR: Specified PHP version is not supported or does not exist." exit "$E_INVALID" fi # Perform verification if read-only mode is enabled check_hestia_demo_mode #----------------------------------------------------------# # Action # #----------------------------------------------------------# mph="php$version-common php$version-mbstring php$version-bcmath php$version-cli php$version-curl php$version-fpm php$version-gd php$version-intl php$version-mysql php$version-soap php$version-xml php$version-zip php$version-json php$version-bz2 php$version-pspell php$version-imagick php$version-pgsql php$version-imap php$version-ldap" if [ -f /etc/redhat-release ]; then # Packages in Remi repo have names with php$version-php- prefixes mph="php$version-php-fpm php$version-php-cgi php$version-php-mysqlnd php$version-php-pgsql php$version-php-pdo php$version-php-common php$version-php-pecl-imagick php$version-php-imap php$version-php-ldap php$version-php-pecl-apcu php$version-php-pecl-zip php$version-php-cli php$version-php-opcache php$version-php-xml php$version-php-gd php$version-php-intl php$version-php-mbstring php$version-php-pspell php$version-php-readline" if [ "$version" = "56" ]; then mph=$(sed -e "s/php$version-php-pecl-apcu//") fi fi # Check is version is 7.1 or below to add mcrypt if [[ $(echo "$version 7.2" | awk '{print ($1 < $2)}') == 1 ]]; then mph="$mph php$version-mcrypt" fi # Check if version is 8.0 or higher and drop php json. if [[ ${version:0:1} == "8" ]]; then mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-json//") fi if ! echo "$DB_SYSTEM" | grep -w 'mysql' > /dev/null; then mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-mysql//") fi if ! echo "$DB_SYSTEM" | grep -w 'pgsql' > /dev/null; then mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-pgsql//") fi # Install php packages if [ -f '/etc/redhat-release' ]; then dnf install -q -y $mph > /dev/null 2>&1 & else apt-get -qq update apt-get -y -qq -o Dpkg::Options::="--force-confold" install $mph > /dev/null 2>&1 & fi BACK_PID=$! # Check if package installation is done, print a spinner echo "Installing PHP-$version, please wait..." spinner="/-\|" spin_i=1 while kill -0 $BACK_PID > /dev/null 2>&1; do printf "\b${spinner:spin_i++%${#spinner}:1}" sleep 0.5 done # Do a blank echo to get the \n back echo # Check if installation was successful if [ ! -f "$php_fpm" ]; then echo "ERROR: Installation failed, please run the following command manually for debugging:" if [ -f '/etc/redhat-release' ]; then echo "dnf install $mph" else echo "apt-get install $mph" fi fi # Check if required modules for apache2 are enabled if [ "$WEB_SYSTEM" = "apache2" ]; then if [ -f /etc/redhat-release ]; then if ! httpd -M | grep 'proxy_fcgi_module' ; then sed 's/#LoadModule proxy_fcgi_module/LoadModule proxy_fcgi_module/' -i /etc/httpd/conf.modules.d/00-proxy.conf sed 's/#LoadModule proxy_module/LoadModule proxy_module/' -i /etc/httpd/conf.modules.d/00-proxy.conf fi if ! httpd -M | grep 'setenvif_module' ; then sed 's/#LoadModule setenvif_module/LoadModule setenvif_module/' -i /etc/httpd/conf.modules.d/00-base.conf fi else if ! a2query -q -m proxy_fcgi; then a2enmod -q proxy_fcgi fi if ! a2query -q -m setenvif; then a2enmod -q setenvif fi fi $BIN/v-restart-web "yes" fi # Configure fpm v_tpl=${version//./} if [ -f /etc/redhat-release ]; then systemctl enable php${version}-php-fpm rm -f /etc/opt/remi/php${version}/php-fpm.d/* cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf /etc/opt/remi/php${version}/php-fpm.d/ sed -i "s/9999/99$v_tpl/g" /etc/opt/remi/php${version}/php-fpm.d/dummy.conf # Increase max upload and max post size sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/g" /etc/opt/remi/php${version}/php.ini sed -i "s/post_max_size = 8M/post_max_size = 100M/g" /etc/opt/remi/php${version}/php.ini sed -i "s/max_execution_time = 30/max_execution_time = 60/g" /etc/opt/remi/php${version}/php.ini else update-rc.d php$version-fpm defaults > /dev/null 2>&1 rm -f /etc/php/$version/fpm/pool.d/* cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf /etc/php/$version/fpm/pool.d/ sed -i "s/9999/99$v_tpl/g" /etc/php/$version/fpm/pool.d/dummy.conf cp -f $HESTIA_INSTALL_DIR/php-fpm/php-fpm.conf /etc/php/$version/fpm/ sed -i "s/fpm_v/$version/g" /etc/php/$version/fpm/php-fpm.conf # Increase max upload and max post size sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/g" /etc/php/$version/fpm/php.ini sed -i "s/post_max_size = 8M/post_max_size = 100M/g" /etc/php/$version/fpm/php.ini sed -i "s/max_execution_time = 30/max_execution_time = 60/g" /etc/php/$version/fpm/php.ini fi # Install backend template cp -f $HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl \ $HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl #----------------------------------------------------------# # Hestia # #----------------------------------------------------------# # Logging $BIN/v-log-action "system" "Info" "System" "Installed PHP $version." log_event "$OK" "$ARGUMENTS" exit