Better limiting on nextcloud, crossed things off todo.
This commit is contained in:
@@ -18,6 +18,37 @@ let
|
||||
cfg = config.homey.nextcloud;
|
||||
dataDir = config.homey.storage.mountPoint;
|
||||
domain = homeyConfig.domain;
|
||||
|
||||
# Custom Nextcloud config mounted into the container as an extra config file.
|
||||
# Nextcloud auto-loads all *.config.php files in /var/www/html/config/.
|
||||
nextcloudCustomConfig = pkgs.writeText "zakobar.config.php" ''
|
||||
<?php
|
||||
$CONFIG = [
|
||||
// Throttle preview generation during bulk uploads.
|
||||
// Generating thumbnails re-reads every uploaded file and writes preview
|
||||
// files, roughly doubling disk I/O. Limiting concurrency to 1 prevents
|
||||
// the drive from being hit by simultaneous read+write storms.
|
||||
'preview_concurrency_new' => 1,
|
||||
'preview_concurrency_all' => 1,
|
||||
// Cap preview dimensions to reduce per-preview write size.
|
||||
'preview_max_x' => 1024,
|
||||
'preview_max_y' => 1024,
|
||||
'jpeg_quality' => 75,
|
||||
];
|
||||
'';
|
||||
|
||||
# Limit Apache's prefork MPM so at most 4 PHP processes write to the USB
|
||||
# drive simultaneously. Default is often 150, which causes an I/O storm
|
||||
# on slow USB HDDs. Lower = fewer concurrent writers = more stable I/O.
|
||||
apacheMpmConfig = pkgs.writeText "mpm_prefork.conf" ''
|
||||
<IfModule mpm_prefork_module>
|
||||
StartServers 2
|
||||
MinSpareServers 1
|
||||
MaxSpareServers 3
|
||||
MaxRequestWorkers 4
|
||||
MaxConnectionsPerChild 500
|
||||
</IfModule>
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.homey.nextcloud = {
|
||||
@@ -123,6 +154,10 @@ in
|
||||
|
||||
volumes = [
|
||||
"${dataDir}/nextcloud/html:/var/www/html"
|
||||
# Extra config auto-loaded by Nextcloud (throttles preview generation)
|
||||
"${nextcloudCustomConfig}:/var/www/html/config/zakobar.config.php:ro"
|
||||
# Apache MPM limits (caps concurrent PHP processes / disk writers)
|
||||
"${apacheMpmConfig}:/etc/apache2/mods-available/mpm_prefork.conf:ro"
|
||||
];
|
||||
|
||||
extraOptions = [
|
||||
|
||||
Reference in New Issue
Block a user