mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge pull request #915 from YunoHost/dedicated_php_service
Use a dedicated php service for each app
This commit is contained in:
commit
268d8629ce
1 changed files with 93 additions and 11 deletions
|
@ -7,14 +7,15 @@ YNH_PHP_VERSION=${YNH_PHP_VERSION:-$YNH_DEFAULT_PHP_VERSION}
|
||||||
|
|
||||||
# Create a dedicated php-fpm config
|
# Create a dedicated php-fpm config
|
||||||
#
|
#
|
||||||
# usage 1: ynh_add_fpm_config [--phpversion=7.X] [--use_template] [--package=packages]
|
# usage 1: ynh_add_fpm_config [--phpversion=7.X] [--use_template] [--package=packages] [--dedicated_service]
|
||||||
# | arg: -v, --phpversion - Version of php to use.
|
# | arg: -v, --phpversion - Version of php to use.
|
||||||
# | arg: -t, --use_template - Use this helper in template mode.
|
# | arg: -t, --use_template - Use this helper in template mode.
|
||||||
# | arg: -p, --package - Additionnal php packages to install
|
# | arg: -p, --package - Additionnal php packages to install
|
||||||
|
# | arg: -d, --dedicated_service - Use a dedicated php-fpm service instead of the common one.
|
||||||
#
|
#
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# usage 2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint [--package=packages]
|
# usage 2: ynh_add_fpm_config [--phpversion=7.X] --usage=usage --footprint=footprint [--package=packages] [--dedicated_service]
|
||||||
# | arg: -v, --phpversion - Version of php to use.
|
# | arg: -v, --phpversion - Version of php to use.
|
||||||
# | arg: -f, --footprint - Memory footprint of the service (low/medium/high).
|
# | arg: -f, --footprint - Memory footprint of the service (low/medium/high).
|
||||||
# low - Less than 20Mb of ram by pool.
|
# low - Less than 20Mb of ram by pool.
|
||||||
|
@ -30,6 +31,7 @@ YNH_PHP_VERSION=${YNH_PHP_VERSION:-$YNH_DEFAULT_PHP_VERSION}
|
||||||
# high - High usage, frequently visited website.
|
# high - High usage, frequently visited website.
|
||||||
#
|
#
|
||||||
# | arg: -p, --package - Additionnal php packages to install for a specific version of php
|
# | arg: -p, --package - Additionnal php packages to install for a specific version of php
|
||||||
|
# | arg: -d, --dedicated_service - Use a dedicated php-fpm service instead of the common one.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.
|
# The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM.
|
||||||
|
@ -56,13 +58,14 @@ YNH_PHP_VERSION=${YNH_PHP_VERSION:-$YNH_DEFAULT_PHP_VERSION}
|
||||||
# Requires YunoHost version 2.7.2 or higher.
|
# Requires YunoHost version 2.7.2 or higher.
|
||||||
ynh_add_fpm_config () {
|
ynh_add_fpm_config () {
|
||||||
# Declare an array to define the options of this helper.
|
# Declare an array to define the options of this helper.
|
||||||
local legacy_args=vtufp
|
local legacy_args=vtufpd
|
||||||
declare -Ar args_array=( [v]=phpversion= [t]=use_template [u]=usage= [f]=footprint= [p]=package= )
|
declare -Ar args_array=( [v]=phpversion= [t]=use_template [u]=usage= [f]=footprint= [p]=package= [d]=dedicated_service )
|
||||||
local phpversion
|
local phpversion
|
||||||
local use_template
|
local use_template
|
||||||
local usage
|
local usage
|
||||||
local footprint
|
local footprint
|
||||||
local package
|
local package
|
||||||
|
local dedicated_service
|
||||||
# Manage arguments with getopts
|
# Manage arguments with getopts
|
||||||
ynh_handle_getopts_args "$@"
|
ynh_handle_getopts_args "$@"
|
||||||
package=${package:-}
|
package=${package:-}
|
||||||
|
@ -74,6 +77,8 @@ ynh_add_fpm_config () {
|
||||||
if [ -n "$usage" ] || [ -n "$footprint" ]; then
|
if [ -n "$usage" ] || [ -n "$footprint" ]; then
|
||||||
use_template=0
|
use_template=0
|
||||||
fi
|
fi
|
||||||
|
# Do not use a dedicated service by default
|
||||||
|
dedicated_service=${dedicated_service:-0}
|
||||||
|
|
||||||
# Set the default PHP-FPM version by default
|
# Set the default PHP-FPM version by default
|
||||||
phpversion="${phpversion:-$YNH_PHP_VERSION}"
|
phpversion="${phpversion:-$YNH_PHP_VERSION}"
|
||||||
|
@ -95,17 +100,46 @@ ynh_add_fpm_config () {
|
||||||
ynh_add_app_dependencies --package="$package"
|
ynh_add_app_dependencies --package="$package"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local fpm_config_dir="/etc/php/$phpversion/fpm"
|
if [ $dedicated_service -eq 1 ]
|
||||||
local fpm_service="php${phpversion}-fpm"
|
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
|
||||||
# Configure PHP-FPM 5 on Debian Jessie
|
# Configure PHP-FPM 5 on Debian Jessie
|
||||||
if [ "$(ynh_get_debian_release)" == "jessie" ]; then
|
if [ "$(ynh_get_debian_release)" == "jessie" ]; then
|
||||||
fpm_config_dir="/etc/php5/fpm"
|
fpm_config_dir="/etc/php5/fpm"
|
||||||
fpm_service="php5-fpm"
|
fpm_service="php5-fpm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create the directory for fpm pools
|
||||||
|
mkdir -p "$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_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_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
|
ynh_app_setting_set --app=$app --key=phpversion --value=$phpversion
|
||||||
finalphpconf="$fpm_config_dir/pool.d/$app.conf"
|
finalphpconf="$fpm_config_dir/pool.d/$app.conf"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
ynh_backup_if_checksum_is_different --file="$finalphpconf"
|
ynh_backup_if_checksum_is_different --file="$finalphpconf"
|
||||||
|
|
||||||
if [ $use_template -eq 1 ]
|
if [ $use_template -eq 1 ]
|
||||||
|
@ -128,7 +162,7 @@ ynh_add_fpm_config () {
|
||||||
ynh_get_scalable_phpfpm --usage=$usage --footprint=$footprint
|
ynh_get_scalable_phpfpm --usage=$usage --footprint=$footprint
|
||||||
|
|
||||||
# Copy the default file
|
# Copy the default file
|
||||||
cp "$fpm_config_dir/pool.d/www.conf" "$finalphpconf"
|
cp "/etc/php/$phpversion/fpm/pool.d/www.conf" "$finalphpconf"
|
||||||
|
|
||||||
# Replace standard variables into the default file
|
# Replace standard variables into the default file
|
||||||
ynh_replace_string --match_string="^\[www\]" --replace_string="[$app]" --target_file="$finalphpconf"
|
ynh_replace_string --match_string="^\[www\]" --replace_string="[$app]" --target_file="$finalphpconf"
|
||||||
|
@ -183,7 +217,44 @@ ynh_add_fpm_config () {
|
||||||
ynh_store_file_checksum "$finalphpini"
|
ynh_store_file_checksum "$finalphpini"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ynh_systemd_action --service_name=$fpm_service --action=reload
|
if [ $dedicated_service -eq 1 ]
|
||||||
|
then
|
||||||
|
# Create a dedicated php-fpm.conf for the service
|
||||||
|
local globalphpconf=$fpm_config_dir/php-fpm-$app.conf
|
||||||
|
cp /etc/php/${phpversion}/fpm/php-fpm.conf $globalphpconf
|
||||||
|
|
||||||
|
ynh_replace_string --match_string="^[; ]*pid *=.*" --replace_string="pid = /run/php/php${phpversion}-fpm-$app.pid" --target_file="$globalphpconf"
|
||||||
|
ynh_replace_string --match_string="^[; ]*error_log *=.*" --replace_string="error_log = /var/log/php/fpm-php.$app.log" --target_file="$globalphpconf"
|
||||||
|
ynh_replace_string --match_string="^[; ]*syslog.ident *=.*" --replace_string="syslog.ident = php-fpm-$app" --target_file="$globalphpconf"
|
||||||
|
ynh_replace_string --match_string="^[; ]*include *=.*" --replace_string="include = $finalphpconf" --target_file="$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
|
||||||
|
" > ../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 --log_type file --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
|
||||||
|
# Reload php, to not impact other parts of the system using php
|
||||||
|
ynh_systemd_action --service_name=$fpm_service --action=reload
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove the dedicated php-fpm config
|
# Remove the dedicated php-fpm config
|
||||||
|
@ -194,6 +265,8 @@ ynh_add_fpm_config () {
|
||||||
ynh_remove_fpm_config () {
|
ynh_remove_fpm_config () {
|
||||||
local fpm_config_dir=$(ynh_app_setting_get --app=$app --key=fpm_config_dir)
|
local fpm_config_dir=$(ynh_app_setting_get --app=$app --key=fpm_config_dir)
|
||||||
local fpm_service=$(ynh_app_setting_get --app=$app --key=fpm_service)
|
local fpm_service=$(ynh_app_setting_get --app=$app --key=fpm_service)
|
||||||
|
local dedicated_service=$(ynh_app_setting_get --app=$app --key=fpm_dedicated_service)
|
||||||
|
dedicated_service=${dedicated_service:-0}
|
||||||
# Get the version of php used by this app
|
# Get the version of php used by this app
|
||||||
local phpversion=$(ynh_app_setting_get $app phpversion)
|
local phpversion=$(ynh_app_setting_get $app phpversion)
|
||||||
|
|
||||||
|
@ -205,13 +278,22 @@ ynh_remove_fpm_config () {
|
||||||
fpm_config_dir="/etc/php/$YNH_DEFAULT_PHP_VERSION/fpm"
|
fpm_config_dir="/etc/php/$YNH_DEFAULT_PHP_VERSION/fpm"
|
||||||
fpm_service="php$YNH_DEFAULT_PHP_VERSION-fpm"
|
fpm_service="php$YNH_DEFAULT_PHP_VERSION-fpm"
|
||||||
fi
|
fi
|
||||||
ynh_secure_remove --file="$fpm_config_dir/pool.d/$app.conf"
|
|
||||||
ynh_secure_remove --file="$fpm_config_dir/conf.d/20-$app.ini" 2>&1
|
|
||||||
|
|
||||||
if ynh_package_is_installed --package="php${phpversion}-fpm"; then
|
if [ $dedicated_service -eq 1 ]
|
||||||
|
then
|
||||||
|
# Remove the dedicated service php-fpm service for the app
|
||||||
|
ynh_remove_systemd_config --service=$fpm_service
|
||||||
|
# Remove the global php-fpm conf
|
||||||
|
ynh_secure_remove --file="$fpm_config_dir/php-fpm-$app.conf"
|
||||||
|
# Remove the service from the list of services known by Yunohost
|
||||||
|
yunohost service remove $fpm_service
|
||||||
|
elif ynh_package_is_installed --package="php${phpversion}-fpm"; then
|
||||||
ynh_systemd_action --service_name=$fpm_service --action=reload
|
ynh_systemd_action --service_name=$fpm_service --action=reload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ynh_secure_remove --file="$fpm_config_dir/pool.d/$app.conf"
|
||||||
|
ynh_exec_warn_less ynh_secure_remove --file="$fpm_config_dir/conf.d/20-$app.ini"
|
||||||
|
|
||||||
# If the php version used is not the default version for YunoHost
|
# If the php version used is not the default version for YunoHost
|
||||||
if [ "$phpversion" != "$YNH_DEFAULT_PHP_VERSION" ]
|
if [ "$phpversion" != "$YNH_DEFAULT_PHP_VERSION" ]
|
||||||
then
|
then
|
||||||
|
|
Loading…
Add table
Reference in a new issue