From bbb25fa49ca06708b14d569b437cfdce6854e838 Mon Sep 17 00:00:00 2001 From: nachoparker Date: Thu, 21 Jun 2018 12:28:57 +0200 Subject: nc-limits: autolimits enhancements --- README.md | 2 +- bin/ncp-provisioning.sh | 33 ++++----------------- build-SD-rpi.sh | 2 +- changelog.md | 8 ++++- etc/ncp-config.d/nc-limits.sh | 69 +++++++++++++++++++++++++++++-------------- lamp.sh | 9 +++--- 6 files changed, 67 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 8f53cd12..8df1e8bc 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This code also generates the [NextCloudPi docker images](https://hub.docker.com/ ## Features * Raspbian 9 stretch - * Nextcloud 13.0.2 + * Nextcloud 13.0.4 * Apache 2.4.25, with HTTP2 enabled * PHP 7.0 (double the speed of PHP5!) * MariaDB 10 diff --git a/bin/ncp-provisioning.sh b/bin/ncp-provisioning.sh index 98da3290..ed6be0c8 100644 --- a/bin/ncp-provisioning.sh +++ b/bin/ncp-provisioning.sh @@ -5,6 +5,7 @@ ## redis provisioning CFG=/var/www/nextcloud/config/config.php +CONFDIR=/usr/local/etc/ncp-config.d/ REDISPASS="$( grep "^requirepass" /etc/redis/redis.conf | cut -f2 -d' ' )" ### IF redis password is the default one, generate a new one @@ -46,33 +47,12 @@ EOF sed -i "s|'dbpassword' =>.*|'dbpassword' => '$DBPASSWD',|" "$CFG" } -## CPU core adjustment +## nc.limits.sh (auto)adjustments: number of threads, memory limits... -CURRENT_THREADS=$( grep "^pm.max_children" /etc/php/7.0/fpm/pool.d/www.conf | awk '{ print $3 }' ) - -CFG=/usr/local/etc/ncp-config.d/nc-limits.sh -PHPTHREADS=0 -[[ -f "$CFG" ]] && PHPTHREADS=$( grep "^PHPTHREADS_" "$CFG" | cut -d= -f2 ) - -[[ $PHPTHREADS -eq 0 ]] && PHPTHREADS=$( nproc ) - -[[ $PHPTHREADS -ne $CURRENT_THREADS ]] && { - - echo "PHP threads set to $PHPTHREADS" - - sed -i "s|pm.max_children =.*|pm.max_children = $PHPTHREADS|" /etc/php/7.0/fpm/pool.d/www.conf - sed -i "s|pm.max_spare_servers =.*|pm.max_spare_servers = $PHPTHREADS|" /etc/php/7.0/fpm/pool.d/www.conf - sed -i "s|pm.start_servers =.*|pm.start_servers = $PHPTHREADS|" /etc/php/7.0/fpm/pool.d/www.conf - - # need to restart php - bash -c " sleep 3 - systemctl stop php7.0-fpm - systemctl stop mysqld - sleep 0.5 - systemctl start php7.0-fpm - systemctl start mysqld - " &>/dev/null & -} +source /usr/local/etc/library.sh +cd "$CONFDIR" &>/dev/null +activate_script nc-limits.sh +cd - &>/dev/null ## Check for interrupted upgrades and rollback BKP="$( ls -1t /var/www/nextcloud-bkp_*.tar.gz 2>/dev/null | head -1 )" @@ -82,7 +62,6 @@ BKP="$( ls -1t /var/www/nextcloud-bkp_*.tar.gz 2>/dev/null | head -1 )" } ## Fix permissions on NCP folders. The main reason for this is to make devel docker container work -CONFDIR="/usr/local/etc/ncp-config.d/" [[ -e $CONFDIR ]] && { chown -R root:www-data "$CONFDIR"/* chmod 660 "$CONFDIR"/* diff --git a/build-SD-rpi.sh b/build-SD-rpi.sh index c3617fd6..9852c45f 100755 --- a/build-SD-rpi.sh +++ b/build-SD-rpi.sh @@ -58,7 +58,7 @@ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ activate_script nc-nextcloud.sh install_script ncp.sh activate_script nc-init.sh - install_script post-inst.sh + install_script post-inst.sh # harden SSH further for Raspbian sed -i 's|^#PermitRootLogin .*|PermitRootLogin no|' /etc/ssh/sshd_config diff --git a/changelog.md b/changelog.md index 4f02e8d4..a61c22b2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,11 @@ -[v0.57.9](https://github.com/nextcloud/nextcloudpi/commit/b91d989) (2018-06-20) ncp-web: fix JS docker detection +[v0.57.12](https://github.com/nextcloud/nextcloudpi/commit/b0203ab) (2018-06-21) nc-limits: autolimits enhancements + +[v0.57.11](https://github.com/nextcloud/nextcloudpi/commit/038b260) (2018-06-20) letsencrypt: notify of renewals + +[v0.57.10](https://github.com/nextcloud/nextcloudpi/commit/88843ab) (2018-06-20) ncp-web: fix JS docker detection + +[v0.57.9](https://github.com/nextcloud/nextcloudpi/commit/ad64a4b) (2018-06-21) nc-format-USB: fix when ZRAM active [v0.57.8 ](https://github.com/nextcloud/nextcloudpi/commit/e63523c) (2018-06-19) docker: adapt wizard diff --git a/etc/ncp-config.d/nc-limits.sh b/etc/ncp-config.d/nc-limits.sh index 42442e81..a9bfce03 100644 --- a/etc/ncp-config.d/nc-limits.sh +++ b/etc/ncp-config.d/nc-limits.sh @@ -8,38 +8,63 @@ # More at https://ownyourbits.com/2017/03/13/nextcloudpi-gets-nextcloudpi-config/ # -MAXFILESIZE_=2G -MEMORYLIMIT_=768M +MAXFILESIZE_=10G +MEMORYLIMIT_=0 PHPTHREADS_=0 -REDISMEM_=3gb +REDISMEM_=0 DESCRIPTION="Configure system limits for NextCloudPi" -INFO="Set PHP threads to 0 in order to use all cores" +INFO="Examples: 200M or 2G. Write 0 for autoconfig" configure() { - sed -i "s/post_max_size=.*/post_max_size=$MAXFILESIZE_/" /var/www/nextcloud/.user.ini - sed -i "s/upload_max_filesize=.*/upload_max_filesize=$MAXFILESIZE_/" /var/www/nextcloud/.user.ini - sed -i "s/memory_limit=.*/memory_limit=$MEMORYLIMIT_/" /var/www/nextcloud/.user.ini + # Set auto memory limit to 75% of the total memory + local TOTAL_MEM="$( free | sed -n 2p | awk '{ print $2 }' )" + AUTOMEM=$(( TOTAL_MEM * 75 / 100 )) - # adjust max PHP processes so Apps don't overload the board (#146) + # MAX FILESIZE + local CONF=/var/www/nextcloud/.user.ini + local CURRENT_FILE_SIZE="$( grep "^upload_max_filesize" "$CONF" | sed 's|.*=||' )" + [[ "$MAXFILESIZE_" == "0" ]] && MAXFILESIZE_=10G + + # MAX PHP MEMORY + local CONF=/var/www/nextcloud/.user.ini + local CURRENT_PHP_MEM="$( grep "^memory_limit" "$CONF" | sed 's|.*=||' )" + [[ $MEMORYLIMIT_ -eq 0 ]] && MEMORYLIMIT_=$AUTOMEM && echo "Using ${AUTOMEM}B for PHP" + sed -i "s/post_max_size=.*/post_max_size=$MAXFILESIZE_/" "$CONF" + sed -i "s/upload_max_filesize=.*/upload_max_filesize=$MAXFILESIZE_/" "$CONF" + sed -i "s/memory_limit=.*/memory_limit=$MEMORYLIMIT_/" "$CONF" + + # MAX PHP THREADS + local CONF=/etc/php/7.0/fpm/pool.d/www.conf + local CURRENT_THREADS=$( grep "^pm.max_children" "$CONF" | awk '{ print $3 }' ) + local PHPTHREADS=0 [[ $PHPTHREADS_ -eq 0 ]] && PHPTHREADS_=$( nproc ) && echo "Using $PHPTHREADS_ PHP threads" - sed -i "s|pm.max_children =.*|pm.max_children = $PHPTHREADS_|" /etc/php/7.0/fpm/pool.d/www.conf - sed -i "s|pm.max_spare_servers =.*|pm.max_spare_servers = $PHPTHREADS_|" /etc/php/7.0/fpm/pool.d/www.conf - sed -i "s|pm.start_servers =.*|pm.start_servers = $PHPTHREADS_|" /etc/php/7.0/fpm/pool.d/www.conf - - # need to restart php - bash -c " sleep 3 - service php7.0-fpm stop - service mysql stop - sleep 0.5 - service php7.0-fpm start - service mysql start - " &>/dev/null & + sed -i "s|pm.max_children =.*|pm.max_children = $PHPTHREADS_|" "$CONF" + sed -i "s|pm.max_spare_servers =.*|pm.max_spare_servers = $PHPTHREADS_|" "$CONF" + sed -i "s|pm.start_servers =.*|pm.start_servers = $PHPTHREADS_|" "$CONF" + + # RESTART PHP + [[ $PHPTHREADS -ne $CURRENT_THREADS ]] || \ + [[ "$MEMORYLIMIT" != "$CURRENT_PHP_MEM" ]] || \ + [[ "$MAXFILESIZE_" != "$CURRENT_FILE_SIZE" ]] && { + bash -c " sleep 3 + service php7.0-fpm stop + service mysql stop + sleep 0.5 + service php7.0-fpm start + service mysql start + " &>/dev/null & + } # redis max memory - sed -i "s|maxmemory .*|maxmemory $REDISMEM_|" /etc/redis/redis.conf - service redis restart + local CONF=/etc/redis/redis.conf + local CURRENT_REDIS_MEM=$( grep "^maxmemory" "$CONF" | awk '{ print $2 }' ) + [[ $REDISMEM_ -eq 0 ]] && REDISMEM_=$AUTOMEM && echo "Using ${AUTOMEM}B for Redis" + [[ "$REDISMEM_" != "$CURRENT_REDIS_MEM" ]] && { + sed -i "s|maxmemory .*|maxmemory $REDISMEM_|" "$CONF" + service redis restart + } } install() { :; } diff --git a/lamp.sh b/lamp.sh index 60e163d1..d7b07f2f 100644 --- a/lamp.sh +++ b/lamp.sh @@ -31,7 +31,11 @@ install() $APTINSTALL apt-utils cron $APTINSTALL apache2 - $APTINSTALL php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache php7.0-mbstring php7.0-xml php7.0-zip php7.0-fileinfo php7.0-mcrypt php7.0-ldap + $APTINSTALL php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache \ + php7.0-mbstring php7.0-xml php7.0-zip php7.0-fileinfo php7.0-ldap \ + php7.0-intl libmagickcore-6.q16-2-extra php7.0-imagick php-mcrypt + + mkdir -p /run/php # Randomize mariaDB password @@ -140,9 +144,6 @@ y y y EOF - - # adjust max PHP processes so Apps don't overload the board (#146) - sed -i 's|pm.max_children =.*|pm.max_children = 3|' /etc/php/7.0/fpm/pool.d/www.conf } configure() { :; } -- cgit v1.2.3