Kay0u пре 4 година
родитељ
комит
3ca5858000
6 измењених фајлова са 208 додато и 0 уклоњено
  1. 203 0
      scripts/_ynh_add_fpm_config.sh
  2. 1 0
      scripts/actions/reset_default_system
  3. 1 0
      scripts/config
  4. 1 0
      scripts/install
  5. 1 0
      scripts/restore
  6. 1 0
      scripts/upgrade

+ 203 - 0
scripts/_ynh_add_fpm_config.sh

@@ -0,0 +1,203 @@
+#!/bin/bash
+
+# To be removed after the 4.3
+
+ynh_add_fpm_config () {
+    # Declare an array to define the options of this helper.
+    local legacy_args=vtufpd
+    local -A args_array=( [v]=phpversion= [t]=use_template [u]=usage= [f]=footprint= [p]=package= [d]=dedicated_service )
+    local phpversion
+    local use_template
+    local usage
+    local footprint
+    local package
+    local dedicated_service
+    # Manage arguments with getopts
+    ynh_handle_getopts_args "$@"
+    package=${package:-}
+
+    # The default behaviour is to use the template.
+    use_template="${use_template:-1}"
+    usage="${usage:-}"
+    footprint="${footprint:-}"
+    if [ -n "$usage" ] || [ -n "$footprint" ]; then
+        use_template=0
+    fi
+    # Do not use a dedicated service by default
+    dedicated_service=${dedicated_service:-0}
+
+    # Set the default PHP-FPM version by default
+    phpversion="${phpversion:-$YNH_PHP_VERSION}"
+
+    local old_phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
+
+    # If the PHP version changed, remove the old fpm conf
+    if [ -n "$old_phpversion" ] && [ "$old_phpversion" != "$phpversion" ]
+    then
+        local old_php_fpm_config_dir=$(ynh_app_setting_get --app=$app --key=fpm_config_dir)
+        local old_php_finalphpconf="$old_php_fpm_config_dir/pool.d/$app.conf"
+
+        ynh_backup_if_checksum_is_different --file="$old_php_finalphpconf"
+
+        ynh_remove_fpm_config
+    fi
+
+    # If the requested PHP version is not the default version for YunoHost
+    if [ "$phpversion" != "$YNH_DEFAULT_PHP_VERSION" ]
+    then
+        # If the argument --package is used, add the packages to ynh_install_php to install them from sury
+        if [ -n "$package" ]
+        then
+            local additionnal_packages="--package=$package"
+        else
+            local additionnal_packages=""
+        fi
+        # Install this specific version of PHP.
+        ynh_install_php --phpversion="$phpversion" "$additionnal_packages"
+    elif [ -n "$package" ]
+    then
+        # Install the additionnal packages from the default repository
+        ynh_add_app_dependencies --package="$package"
+    fi
+
+    if [ $dedicated_service -eq 1 ]
+    then
+        local fpm_service="${app}-phpfpm"
+        local fpm_config_dir="/etc/php/$phpversion/dedicated-fpm"
+    else
+        local fpm_service="php${phpversion}-fpm"
+        local fpm_config_dir="/etc/php/$phpversion/fpm"
+    fi
+
+    # Create the directory for FPM pools
+    mkdir --parents "$fpm_config_dir/pool.d"
+
+    ynh_app_setting_set --app=$app --key=fpm_config_dir --value="$fpm_config_dir"
+    ynh_app_setting_set --app=$app --key=fpm_service --value="$fpm_service"
+    ynh_app_setting_set --app=$app --key=fpm_dedicated_service --value="$dedicated_service"
+    ynh_app_setting_set --app=$app --key=phpversion --value=$phpversion
+
+    # Migrate from mutual PHP service to dedicated one.
+    if [ $dedicated_service -eq 1 ]
+    then
+        local old_fpm_config_dir="/etc/php/$phpversion/fpm"
+        # If a config file exist in the common pool, move it.
+        if [ -e "$old_fpm_config_dir/pool.d/$app.conf" ]
+        then
+            ynh_print_info --message="Migrate to a dedicated php-fpm service for $app."
+            # Create a backup of the old file before migration
+            ynh_backup_if_checksum_is_different --file="$old_fpm_config_dir/pool.d/$app.conf"
+            # Remove the old PHP config file
+            ynh_secure_remove --file="$old_fpm_config_dir/pool.d/$app.conf"
+            # Reload PHP to release the socket and allow the dedicated service to use it
+            ynh_systemd_action --service_name=php${phpversion}-fpm --action=reload
+        fi
+    fi
+
+    if [ $use_template -eq 1 ]
+    then
+        # Usage 1, use the template in conf/php-fpm.conf
+        local phpfpm_path="$YNH_APP_BASEDIR/conf/php-fpm.conf"
+        # Make sure now that the template indeed exists
+        [ -e "$phpfpm_path" ] || ynh_die --message="Unable to find template to configure PHP-FPM."
+    else
+        # Usage 2, generate a PHP-FPM config file with ynh_get_scalable_phpfpm
+
+        # Store settings
+        ynh_app_setting_set --app=$app --key=fpm_footprint --value=$footprint
+        ynh_app_setting_set --app=$app --key=fpm_usage --value=$usage
+
+        # Define the values to use for the configuration of PHP.
+        ynh_get_scalable_phpfpm --usage=$usage --footprint=$footprint
+
+        local phpfpm_path="$YNH_APP_BASEDIR/conf/php-fpm.conf"
+        echo "
+[__APP__]
+user = __APP__
+group = __APP__
+chdir = __FINALPATH__
+listen = /var/run/php/php__PHPVERSION__-fpm-__APP__.sock
+listen.owner = www-data
+listen.group = www-data
+pm = __PHP_PM__
+pm.max_children = __PHP_MAX_CHILDREN__
+pm.max_requests = 500
+request_terminate_timeout = 1d
+" > $phpfpm_path
+
+        if [ "$php_pm" = "dynamic" ]
+        then
+            echo "
+pm.start_servers = __PHP_START_SERVERS__
+pm.min_spare_servers = __PHP_MIN_SPARE_SERVERS__
+pm.max_spare_servers = __PHP_MAX_SPARE_SERVERS__
+" >> $phpfpm_path
+
+        elif [ "$php_pm" = "ondemand" ]
+        then
+            echo "
+pm.process_idle_timeout = 10s
+" >> $phpfpm_path
+        fi
+
+        # Concatene the extra config.
+        if [ -e $YNH_APP_BASEDIR/conf/extra_php-fpm.conf ]; then
+            cat $YNH_APP_BASEDIR/conf/extra_php-fpm.conf >> "$phpfpm_path"
+        fi
+    fi
+
+    local finalphpconf="$fpm_config_dir/pool.d/$app.conf"
+    ynh_add_config --template="$phpfpm_path" --destination="$finalphpconf"
+
+    if [ -e "$YNH_APP_BASEDIR/conf/php-fpm.ini" ]
+    then
+        ynh_print_warn --message="Packagers ! Please do not use a separate php ini file, merge your directives in the pool file instead."
+        ynh_add_config --template="$YNH_APP_BASEDIR/conf/php-fpm.ini" --destination="$fpm_config_dir/conf.d/20-$app.ini"
+    fi
+
+    if [ $dedicated_service -eq 1 ]
+    then
+        # Create a dedicated php-fpm.conf for the service
+        local globalphpconf=$fpm_config_dir/php-fpm-$app.conf
+
+echo "[global]
+pid = /run/php/php__PHPVERSION__-fpm-__APP__.pid
+error_log = /var/log/php/fpm-php.__APP__.log
+syslog.ident = php-fpm-__APP__
+include = __FINALPHPCONF__
+" > $YNH_APP_BASEDIR/conf/php-fpm-$app.conf
+
+        ynh_add_config --template="$YNH_APP_BASEDIR/conf/php-fpm-$app.conf" --destination="$globalphpconf"
+
+        # Create a config for a dedicated PHP-FPM service for the app
+        echo "[Unit]
+Description=PHP __PHPVERSION__ FastCGI Process Manager for __APP__
+After=network.target
+[Service]
+Type=notify
+PIDFile=/run/php/php__PHPVERSION__-fpm-__APP__.pid
+ExecStart=/usr/sbin/php-fpm__PHPVERSION__ --nodaemonize --fpm-config __GLOBALPHPCONF__
+ExecReload=/bin/kill -USR2 \$MAINPID
+[Install]
+WantedBy=multi-user.target
+" > $YNH_APP_BASEDIR/conf/$fpm_service
+
+        # Create this dedicated PHP-FPM service
+        ynh_add_systemd_config --service=$fpm_service --template=$fpm_service
+        # Integrate the service in YunoHost admin panel
+        yunohost service add $fpm_service --log /var/log/php/fpm-php.$app.log --description "Php-fpm dedicated to $app"
+        # Configure log rotate
+        ynh_use_logrotate --logfile=/var/log/php
+        # Restart the service, as this service is either stopped or only for this app
+        ynh_systemd_action --service_name=$fpm_service --action=restart
+    else
+        # Validate that the new php conf doesn't break php-fpm entirely
+        if ! php-fpm${phpversion} --test 2>/dev/null
+        then
+            php-fpm${phpversion} --test || true
+            ynh_secure_remove --file="$finalphpconf"
+            ynh_die --message="The new configuration broke php-fpm?"
+        fi
+        ynh_systemd_action --service_name=$fpm_service --action=reload
+    fi
+}

+ 1 - 0
scripts/actions/reset_default_system

@@ -8,6 +8,7 @@
 
 source scripts/_common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config.sh
 
 #=================================================
 # MANAGE SCRIPT FAILURE

+ 1 - 0
scripts/config

@@ -8,6 +8,7 @@
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config.sh
 
 #=================================================
 # RETRIEVE ARGUMENTS

+ 1 - 0
scripts/install

@@ -11,6 +11,7 @@ source _variables
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config.sh
 
 #=================================================
 # MANAGE FAILURE OF THE SCRIPT

+ 1 - 0
scripts/restore

@@ -11,6 +11,7 @@ source ../settings/scripts/_variables
 
 source ../settings/scripts/_common.sh
 source /usr/share/yunohost/helpers
+source ../settings/scripts/_ynh_add_fpm_config.sh
 
 #=================================================
 # MANAGE SCRIPT FAILURE

+ 1 - 0
scripts/upgrade

@@ -11,6 +11,7 @@ source _variables
 
 source _common.sh
 source /usr/share/yunohost/helpers
+source _ynh_add_fpm_config.sh
 
 #=================================================
 # LOAD SETTINGS