mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-05-22 19:30:11 +00:00
Compare commits
1 Commits
copilot/ca
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01046015a9 |
@@ -13,15 +13,6 @@ RUN set -ex; \
|
||||
sed -i "s|#\?PCREMaxFileSize.*|PCREMaxFileSize 2000M|g" /etc/clamav/clamd.conf; \
|
||||
# StreamMaxLength must be synced with av_stream_max_length inside the Nextcloud files_antivirus plugin
|
||||
sed -i "s|#\?StreamMaxLength.*|StreamMaxLength 2000M|g" /etc/clamav/clamd.conf; \
|
||||
# By default clamd keeps the old signature database in RAM while loading the new one,
|
||||
# briefly doubling memory usage (~1 GB extra) during each freshclam update cycle.
|
||||
# Setting ConcurrentDatabaseReload to "no" makes clamd unload the old database first,
|
||||
# eliminating that transient peak and significantly reducing maximum RAM consumption.
|
||||
sed -i "s|#\?ConcurrentDatabaseReload.*|ConcurrentDatabaseReload no|g" /etc/clamav/clamd.conf; \
|
||||
# The default thread pool is 10-12 threads, each reserving its own stack and scan buffers.
|
||||
# The Nextcloud antivirus plugin sends one file at a time, so 2 threads are sufficient
|
||||
# and avoids the idle per-thread memory overhead of the larger default pool.
|
||||
sed -i "s|#\?MaxThreads.*|MaxThreads 2|g" /etc/clamav/clamd.conf; \
|
||||
sed -i "s|#\?TCPSocket|TCPSocket|g" /etc/clamav/clamd.conf; \
|
||||
sed -i "s|^LocalSocket .*|LocalSocket /tmp/clamd.sock|g" /etc/clamav/clamd.conf; \
|
||||
sed -i "s|Example| |g" /etc/clamav/clamav-milter.conf; \
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
nodaemon=true
|
||||
logfile=/var/log/supervisord/supervisord.log
|
||||
pidfile=/var/run/supervisord/supervisord.pid
|
||||
childlogdir=/var/log/supervisord/
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
nc -z 127.0.0.1 "$PORT" || exit 1
|
||||
wget -q -O /dev/null "http://127.0.0.1:${PORT}/health" || exit 1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# Docker CLI is a requirement
|
||||
FROM docker:29.4.1-cli AS docker
|
||||
FROM docker:29.4.0-cli AS docker
|
||||
|
||||
ARG CADDY_REMOTE_HOST_HASH=b21775afa730ffb52a24ddff310c8a6d1fd37276
|
||||
|
||||
|
||||
@@ -244,12 +244,27 @@ RUN set -ex; \
|
||||
imagemagick-tiff \
|
||||
coreutils; \
|
||||
\
|
||||
grep -q '^pm = dynamic' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm = dynamic/pm = ondemand/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
# Sync this with max db connections and MaxRequestWorkers
|
||||
# We don't actually expect so many children but don't want to limit it artificially because people will report issues otherwise.
|
||||
# Also children will usually be terminated again after the process is done due to the ondemand setting
|
||||
# Use dynamic pm mode: spare workers stay alive between requests so every request is served immediately
|
||||
# without waiting for a new process to spawn (unlike ondemand which forks on every request when idle).
|
||||
# pm.max_children: upper bound on worker processes; synced with max DB connections and MaxRequestWorkers.
|
||||
# Set high so users never hit an artificial limit under peak load — spare-server bounds keep idle memory usage low.
|
||||
sed -i 's/^pm.max_children =.*/pm.max_children = 5000/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
# pm.start_servers: number of workers pre-forked at container startup.
|
||||
# Having 2 workers ready immediately means the first requests after boot are served without any spawn delay.
|
||||
sed -i '/^;pm.start_servers/s/^;//' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.start_servers =.*/pm.start_servers = 2/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
# pm.min_spare_servers: floor of idle workers kept alive at all times.
|
||||
# Guarantees at least 1 ready worker so a sudden burst of requests is handled without any fork wait.
|
||||
sed -i '/^;pm.min_spare_servers/s/^;//' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.min_spare_servers =.*/pm.min_spare_servers = 1/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
# pm.max_spare_servers: ceiling of idle workers kept alive during quiet periods.
|
||||
# Capping at 3 limits idle memory consumption while still keeping a small ready pool.
|
||||
sed -i '/^;pm.max_spare_servers/s/^;//' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.max_spare_servers =.*/pm.max_spare_servers = 3/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
# pm.max_requests: recycle each worker after handling 500 requests.
|
||||
# PHP extensions and apps can leak memory over time; recycling prevents those leaks from accumulating indefinitely.
|
||||
sed -i '/^;pm.max_requests/s/^;//' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.max_requests =.*/pm.max_requests = 500/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's|access.log = /proc/self/fd/2|access.log = /proc/self/fd/1|' /usr/local/etc/php-fpm.d/docker.conf; \
|
||||
\
|
||||
echo "[ -n \"\$TERM\" ] && [ -f /root.motd ] && cat /root.motd" >> /root/.bashrc; \
|
||||
|
||||
@@ -12,8 +12,6 @@ class ConfigurationManager
|
||||
|
||||
private array $config = [];
|
||||
|
||||
private int $configMtime = 0;
|
||||
|
||||
private bool $noWrite = false;
|
||||
|
||||
private string $dailyBackupFileCache = '';
|
||||
@@ -301,21 +299,10 @@ class ConfigurationManager
|
||||
|
||||
private function getConfig() : array
|
||||
{
|
||||
$configFile = DataConst::GetConfigFile();
|
||||
if (file_exists($configFile)) {
|
||||
$mtime = filemtime($configFile);
|
||||
if ($mtime !== false && $mtime !== $this->configMtime) {
|
||||
$configContent = (string)file_get_contents($configFile);
|
||||
$this->config = json_decode($configContent, true, 512, JSON_THROW_ON_ERROR);
|
||||
$configContent = (string)file_get_contents(DataConst::GetConfigFile());
|
||||
if ($configContent === '') {
|
||||
throw new \RuntimeException("The config file " . DataConst::GetConfigFile() . " is empty. It may have been truncated due to low disk space. Please restore it from a backup.");
|
||||
}
|
||||
$this->configMtime = $mtime;
|
||||
}
|
||||
} else {
|
||||
$this->config = [];
|
||||
$this->configMtime = 0;
|
||||
if ($this->config === [] && file_exists(DataConst::GetConfigFile()))
|
||||
{
|
||||
$configContent = (string)file_get_contents(DataConst::GetConfigFile());
|
||||
$this->config = json_decode($configContent, true, 512, JSON_THROW_ON_ERROR);
|
||||
}
|
||||
|
||||
return $this->config;
|
||||
@@ -715,29 +702,8 @@ class ConfigurationManager
|
||||
if ($df !== false && (int)$df < $size) {
|
||||
throw new InvalidSettingConfigurationException(DataConst::GetDataDirectory() . " does not have enough space for writing the config file! Not writing it back!");
|
||||
}
|
||||
// Write to a temp file first to avoid truncating the config file if the
|
||||
// disk fills up mid-write. rename() is atomic on POSIX filesystems, so the
|
||||
// original config is never touched until the new content is fully on disk.
|
||||
$tempFile = DataConst::GetConfigFile() . '.tmp';
|
||||
if (file_put_contents($tempFile, $content) === false) {
|
||||
// The file probably wasn't created, but better check nonetheless.
|
||||
if (file_exists($tempFile)) {
|
||||
unlink($tempFile);
|
||||
}
|
||||
throw new InvalidSettingConfigurationException("Failed to write temporary config file: " . $tempFile);
|
||||
}
|
||||
if (!rename($tempFile, DataConst::GetConfigFile())) {
|
||||
unlink($tempFile);
|
||||
throw new InvalidSettingConfigurationException("Failed to rename " . $tempFile . " to " . DataConst::GetConfigFile());
|
||||
}
|
||||
clearstatcache(true, DataConst::GetConfigFile());
|
||||
$mtime = filemtime(DataConst::GetConfigFile());
|
||||
if ($mtime !== false) {
|
||||
$this->configMtime = $mtime;
|
||||
} else {
|
||||
$this->config = [];
|
||||
$this->configMtime = 0;
|
||||
}
|
||||
file_put_contents(DataConst::GetConfigFile(), $content);
|
||||
$this->config = [];
|
||||
}
|
||||
|
||||
private function getEnvironmentalVariableOrConfig(string $envVariableName, string $configName, string $defaultValue) : string {
|
||||
|
||||
Reference in New Issue
Block a user