os_nextcloud

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
os_nextcloud [2025/03/18 01:36] – [Optimized PHP Configuration] Júne Parkos_nextcloud [2025/04/14 08:48] (current) – [Edit - Panel] Júne Park
Line 1: Line 1:
-====== Nextcloud™ ====== +====== Nextcloud™ ======
  
 ----  ---- 
  
 +===== Required packages ===== 
 +
 +<code bash> 
 +sudo apt install php8.x php8.x-common php8.x-gmp php8.x-mbstring php8.x-readline php8.x-xmlrpc php8.x-bcmath php8.x-curl php8.x-igbinary php8.x-mcrypt php8.x-redis php8.x-zip php8.x-bz2 php8.x-fpm php8.x-imagick php8.x-mysql php8.x-soap php8.x-cli php8.x-gd php8.x-intl php8.x-opcache php8.x-xml    
 +</code> 
 +
 +----
 ==== Optimized PHP Configuration ==== ==== Optimized PHP Configuration ====
  
Line 72: Line 79:
 ---- ----
  
 +=== Enable JIT in Opcache === 
 +
 +Edit ''/etc/php/8.x/fpm/conf.d/10-opcache.ini'' 
 +
 +<code php> 
 +; configuration for php opcache module
 +; priority=10
 +zend_extension=opcache.so
 +opcache.enable_cli=1
 +opcache.jit_buffer_size=100M
 +opcache.jit=tracing
 +</code> 
 +
 +Check JIT is enabled 
 +
 +<code bash>
 +sudo php -i | grep -q 'opcache.jit_buffer_size => [^0]' && echo "JIT is enabled" || echo "JIT is disabled" 
 +</code>
 +
 +----
 +
 +==== Optimized PHP-FPM Configuration ==== 
 +
 +PHP-FPM settings are typically in a pool configuration file like ''/etc/php/8.1/fpm/pool.d/www.conf''. The default settings are often too conservative for Nextcloud, leading to slow response times or errors under load.
 +
 +=== Process Manager Settings === 
 +
 +<code ini>
 +pm = dynamic
 +; "dynamic" adjusts the number of child processes based on load; use "static" for dedicated servers with predictable traffic.
 +
 +pm.max_children = 120
 +; Max number of child processes; calculate as (Total RAM - 1G for OS/other services) / 50-100 MB per process.
 +; Example: 4 GB RAM → ~60-80 children; 8 GB RAM → ~120-150 children.
 +
 +pm.start_servers = 12
 +; Initial processes; set to ~10-20% of max_children.
 +
 +pm.min_spare_servers = 6
 +; Minimum idle processes; set to ~5-10% of max_children.
 +
 +pm.max_spare_servers = 18
 +; Maximum idle processes; set to ~15-25% of max_children.
 +
 +pm.max_requests = 500
 +; Restart child processes after this many requests to prevent memory leaks.
 +</code>
 +
 +---- 
 +
 +=== Tuning Tips === 
 +
 +  * Memory Usage: Each PHP-FPM process may use 50-100 MB of RAM, depending on loaded extensions and workload. Monitor with ''htop'' or ''ps'' and adjust ''max_children'' to avoid swapping.
 +
 +  * CPU Cores: Ensure ''start_servers'' + ''min_spare_servers'' doesn’t exceed your CPU core count to avoid contention.
 +
 +  * Static vs. Dynamic: Use ''pm = static'' with ''max_children'' set to a fixed number (e.g., 20-40) if your server is dedicated to Nextcloud and traffic is consistent.
 +
 +
 +----
 +
 +=== Additional PHP-FPM Settings === 
 +
 +Edit ''/etc/php/8.1/fpm/pool.d/www.conf'' 
 +
 +<accordion> 
 +<code ini> 
 +request_terminate_timeout = 300
 +; Match max_execution_time to handle long uploads gracefully.
 +
 +process.priority = -19
 +; Optional: Boost priority (requires root and SYS_NICE capability).
 +</code>
 +
 +----
 +
 +Optimal configuration for ''/etc/php/8.2/fpm/conf.d/10-opcache.ini '' 
 +
 +<panel title="Optimal configuration for 10-opcache.ini">
 +<code ini> 
 +; configuration for php opcache module
 +; priority=10
 +opcache.enable = 1
 +; Enable OPcache.
 +
 +opcache.memory_consumption = 128
 +; Memory for cached scripts (128 MB is a good starting point; increase to 256 MB if RAM allows).
 +
 +opcache.interned_strings_buffer = 8
 +; Memory for string interning (8 MB is sufficient for most cases).
 +
 +opcache.max_accelerated_files = 10000
 +; Max number of files to cache; adjust based on Nextcloud’s file count.
 +
 +opcache.revalidate_freq = 60
 +; How often to check for file changes (60 seconds balances performance and freshness).
 +
 +opcache.save_comments = 1
 +; Required by Nextcloud to preserve code comments in bytecode.
 +
 +zend_extension=opcache.so 
 +opcache.enable_cli = 1
 +; Disable for CLI to avoid unnecessary overhead in cron jobs.
 +;
 +opcache.jit_buffer_size = 100M
 +opcache.jit = tracing
 +; "tracing" mode offers the best performance for web apps like Nextcloud.
 +;
 +opcache.interned_strings_buffer = 16
 +opcache.memory_consumption = 256
 +</code> 
 +</panel>
 +</accordion> 
 +
 +
 +----
 +==== Nextcloud-Specific Tweaks ==== 
 +
 +{{mdi>information-variant?24&color=#be0027}} [[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html|Referral manuals]] --- by Nextcloud Documentation 
 +
 +  * Memory Caching: Use Redis for local and file-locking caches to reduce database load. Edit ''/var/www/nextcloud/config/config.php'':
 +  <code php>
 +'memcache.local' => '\OC\Memcache\Redis',
 +'memcache.locking' => '\OC\Memcache\Redis',
 +'redis' => [
 +    'host' => 'localhost',
 +    'port' => 6379,
 +],
 +  </code> 
 +  
 +  <code php> 
 +  <?php
 +$CONFIG = array (
 +... ... ... 
 +...
 +),
 +'memcache.local' => '\\OC\\Memcache\\Redis',
 +'filelocking.enabled' => 'true',
 +'memcache.distributed' => '\\OC\\Memcache\\Redis',
 +'memcache.locking' => '\\OC\\Memcache\\Redis',
 +'redis' =>
 +array (
 +'host' => 'localhost',
 +'port' => 6379,
 +'timeout' => 0,
 +'dbindex' => 0,
 +),
 +); 
 +</code>
 +
 +Install Redis (sudo apt install redis-server on Debian) and ensure it’s running.
 +
 +<code bash> 
 +sudo apt install redis-server php-redis
 +</code> 
 +
 +<code bash> 
 +sudo ps ax | grep redis
 +sudo netstat -tlnp | grep redis
 +</code>
 +
 +Clearing Redis Cache 
 +
 +<code bash> 
 +sudo redis-cli
 +  SELECT <dbIndex>
 +  FLUSHDB
 +</code> 
 +
 +
 +  * Cron Jobs: Use a system cron job instead of AJAX for background tasks. Add to ''/etc/crontab'':
 +
 +<code bash> 
 +*/5 * * * * www-data php -f /var/www/nextcloud/cron.php
 +</code> 
 +
 +  * Database: Use MySQL/MariaDB with InnoDB, and tune its configuration (e.g., ''innodb_buffer_pool_size = 1G'' for 4 GB RAM).
 +
 +
 +----
 +
 +==== Validation ==== 
 + 
 +  * Check PHP settings: Create a phpinfo.php file with <?php phpinfo(); and access it via your browser.
 + 
 +  * Monitor performance: Use top, htop, or Nextcloud’s admin overview for warnings.
 +
 +  * Test responsiveness: Upload large files and navigate the web interface under load.
 +
 +----
 +
 +==== Scaling Adjustments ==== 
 +
 +  * Low-End Servers (e.g., Raspberry Pi, 2 GB RAM): Reduce ''max_children'' to 10-20, ''memory_limit'' to 256M, and skip JIT.
 +
 +  * High-Traffic Servers (e.g., 16+ GB RAM): Increase ''max_children'' to 200+, ''memory_limit'' to 1-2G, and use Redis with multiple instances if needed.
 +
 +
 +This configuration provides a solid starting point for Nextcloud, balancing performance and resource efficiency. Fine-tune based on your server’s actual usage patterns and hardware capabilities.
 +
 +----
 +===== Alter datadirectory after installation ===== 
 +
 +<code ini> 
 +ncdir='/path/to/nextcloud'
 +olddata='/old/path/to/data'
 +newdata='/new/path/to/data'
 +</code> 
 +
 +Turn maintenance mode on 
 +
 +<code bash> 
 +sudo -u www-data php "$ncdir/occ" maintenance:mode --on
 +</code> 
 +
 +Move / Copy datadirectory for your purpose. 
 +
 +Change ''datadirectory'' value in ''.../config/config.php'' 
 +
 +<code bash> 
 +sudo sed -i "s|$olddata|$newdata|" "$ncdir/config/config.php"
 +</code> 
 +
 +Before change database dataset, backup database for your safety. 
 +
 +Adjust ''oc_storages'' database table to reflect the new data folder location. 
 +
 +<code mysql> 
 +mysql -u"$dbuser" -p"$dbpass" -e "update $dbname.oc_storages set id='local::$newdata/' where id='local::$olddata/';"
 +</code> 
 +
 +----
  
 ===== Solved Problems =====  ===== Solved Problems ===== 
  
-=== mjs configuration error === +==== mjs configuration error ==== 
  
 == Error description ==  == Error description == 
Line 96: Line 335:
 #    } #    }
 </code>  </code> 
 +
 +---- 
 +
 +==== PHP imagick module ==== 
 +
 +== Error description == 
 +
 +<text type="danger">The PHP module “imagick” in this instance has no SVG support</text>
 +
 +== Solution == 
 +
 +Install php-imagick moduel with associated packages 
 +
 +<code bash> 
 +sudo apt install php-imagick imagemagick
 +</code> 
 +
 +----
 +
 +==== Incorrect row format found ==== 
 +
 +== Error description == 
 + 
 +<text type="danger">Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: ... </text> 
 +
 +== Solution == 
 +
 +Create the script and run with root permission with following: 
 +
 +<code bash> 
 +#!/bin/bash
 +
 +# Prompt for database credentials
 +read -p "Enter Database Name: " DB_NAME
 +read -p "Enter Username: " DB_USER
 +read -s -p "Enter Password: " DB_PASS
 +echo
 +
 +# Execute all ALTER TABLE statements in one query
 +mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "
 +SELECT CONCAT('ALTER TABLE \`', TABLE_NAME, '\` ROW_FORMAT=DYNAMIC;'
 +FROM INFORMATION_SCHEMA.TABLES 
 +WHERE TABLE_SCHEMA = '$DB_NAME' 
 +AND ENGINE = 'InnoDB'
 +" | mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME"
 +
 +</code>
 +
 +----
  • os_nextcloud.1742261776
  • Last modified: 2025/03/18 01:36
  • by Júne Park