Seit gut einem Jahr läuft meine Nextcloud ohne jegliche Probleme auf meinem Dell Precision 3540 unter macOS Ventura und Docker Desktop v4.47.0. Ventura kann mit maximal Docker Desktop v4.48.0 verwendet werden. Neuere Docker Desktop Versionen benötigen höhere macOS Versionen. Für mich passt das aber so. Ich verwende Nextcloud im Grunde nur für mich alleine im single user Betrieb.

Schon bei der 1st Einrichtung war es mir wichtig die Daten für Nexcloud außerhalb meiner macOS System Partition (/Volumes/Daten/docker/data/nextcloud/data) zu halten während die Docker Instanzen selbst unter meinem user account laufen. Damit Updates einfacher vor allem sicherer sind und ein zurück einfach möglich ist, lege vor jedem Major update ich immer eine Kopie an, die dann die komplette config und ganz wichtig eine Kopie der DB hat. Ganz klar, das die Docker Instanz vor dem Anlegen einer Kopie gestoppt sein muss. Vom Data Verzeichnis mache ich nie eine Kopie. Im Moment, wo diese Seite geschrieben wird, läuft Nextcloud bereits auf Rev. 33. Vor einem Jahr war ich bei Rev. 29.

Im Zuge vom Update auf Rev. 33 gab es diverse Optimierungen. Es kamen 2 Dienste hinzu: RDIS und CRON. Damit CRON innerhalb von NC funktioniert musste ich ein weiteres Volume „nextcloud_apps:/var/www/html/custom_apps“ in meiner YAML für den service nexcloud und cron definieren. Nur so ist es sauber konfiguriert.
services:
nextcloud:
image: nextcloud:33
container_name: nextcloud_app
restart: unless-stopped
depends_on:
- db
- redis
ports:
- 8002:80
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: **********************
REDIS_HOST: redis
NEXTCLOUD_TRUSTED_DOMAINS: cloud.easyr.de 192.168.1.222
TRUSTED_PROXIES: 192.168.1.222
OVERWRITEHOST: cloud.easyr.de
OVERWRITEPROTOCOL: https
volumes:
- /Volumes/Daten/docker/data/nextcloud/data:/var/www/html/data
- ./config:/var/www/html/config
- nextcloud_apps:/var/www/html/custom_apps
networks:
- web
- default
cron:
image: nextcloud:33
container_name: nextcloud_cron
restart: unless-stopped
entrypoint: /cron.sh
depends_on:
- nextcloud
volumes:
- /Volumes/Daten/docker/data/nextcloud/data:/var/www/html/data
- ./config:/var/www/html/config
- nextcloud_apps:/var/www/html/custom_apps
networks:
- default
db:
image: mariadb:11.4
container_name: nextcloud_db
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: **********************
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: **********************
networks:
- default
redis:
image: redis:7-alpine
container_name: nextcloud_redis
restart: unless-stopped
command: redis-server --save "" --appendonly no
networks:
- default
volumes:
nextcloud_apps:
networks:
web:
external: true
Damit RDIS auch funktioniert muss die config.php angepasst werden, die bei mir so aussieht:
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'upgrade.disable-web' => true,
'instanceid' => '***********************',
'passwordsalt' => '***********************',
'secret' => '***********************',
'trusted_domains' =>
array (
0 => 'cloud.easyr.de',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '33.0.0.16',
'overwrite.cli.url' => 'https://cloud.easyr.de',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => '***********************',
'installed' => true,
'overwritehost' => 'cloud.easyr.de',
'overwriteprotocol' => 'https',
'trusted_proxies' =>
array (
0 => '192.168.1.222',
),
'twofactor_enforced' => 'false',
'twofactor_enforced_groups' =>
array (
0 => 'admin',
),
'twofactor_enforced_excluded_groups' =>
array (
),
'mail_smtpmode' => 'smtp',
'mail_smtpsecure' => 'ssl',
'mail_sendmailmode' => 'smtp',
'mail_smtpauth' => 1,
'mail_smtphost' => 'smtp.1blu.de',
'mail_smtpport' => '465',
'mail_from_address' => 'info',
'mail_domain' => 'easyr.de',
'mail_smtpname' => '***********************',
'mail_smtppassword' => '***********************',
'forbidden_filename_basenames' =>
array (
0 => 'con',
1 => 'prn',
2 => 'aux',
3 => 'nul',
4 => 'com0',
5 => 'com1',
6 => 'com2',
7 => 'com3',
8 => 'com4',
9 => 'com5',
10 => 'com6',
11 => 'com7',
12 => 'com8',
13 => 'com9',
14 => 'com¹',
15 => 'com²',
16 => 'com³',
17 => 'lpt0',
18 => 'lpt1',
19 => 'lpt2',
20 => 'lpt3',
21 => 'lpt4',
22 => 'lpt5',
23 => 'lpt6',
24 => 'lpt7',
25 => 'lpt8',
26 => 'lpt9',
27 => 'lpt¹',
28 => 'lpt²',
29 => 'lpt³',
),
'forbidden_filename_characters' =>
array (
0 => '<',
1 => '>',
2 => ':',
3 => '"',
4 => '|',
5 => '?',
6 => '*',
7 => '\\',
8 => '/',
),
'forbidden_filename_extensions' =>
array (
0 => ' ',
1 => '.',
2 => '.filepart',
3 => '.part',
),
'loglevel' => 2,
'maintenance' => false,
'filelocking.enabled' => true,
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'redis',
'port' => 6379,
'timeout' => 0.0,
'password' => '',
),
'enable_previews' => true,
'preview_max_x' => 2048,
'preview_max_y' => 2048,
'preview_max_scale_factor' => 1,
'preview_concurrency_new' => 4,
'preview_concurrency_all' => 2,
'log_type' => 'file',
'logfile' => '/var/www/html/data/nextcloud.log',
'loglevel' => 2, // 2 = WARN, 0 = Debug, 1 = Info
'log_rotate_size' => 104857600, // 100 MB in Bytes
);
Der Preview Generator bringt bei Nextcloud einen der größten sichtbaren Performance-Gewinne überhaupt (Galerie, Thumbnails, Scrollen). Deshalb habe ich den auch installiert und aktiviert.
1. App installieren
docker compose exec nextcloud php occ app:install previewgenerator docker compose exec nextcloud php occ app:enable previewgenerator
2. config.php erweitern (wichtig)
'enable_previews' => true, 'preview_max_x' => 2048, 'preview_max_y' => 2048, 'preview_max_scale_factor' => 1, 'preview_concurrency_new' => 4, 'preview_concurrency_all' => 2,
3. Erste Generierung starten
docker compose exec nextcloud php occ preview:generate-all
das kann je nach Datenmenge etwas dauern.
4. Automatisch über Cron laufen lassen
docker compose exec nextcloud php occ preview:pre-generate
5. Log-Rotation aktivieren
Füge in deine config/config.php (im gemounteten ./config-Ordner) folgende Einträge hinzu:
<?php $CONFIG = array ( // … deine bestehenden Einträge … 'log_type' => 'file', 'logfile' => '/var/www/html/data/nextcloud.log', 'loglevel' => 2, // 2 = WARN, 0 = Debug, 1 = Info 'log_rotate_size' => 104857600, // 100 MB in Bytes );
6. Docker-spezifische Lösung: „Minor Update manuell“
Ich mache Nexcloud updates nur manuell gesteuert und auf gar keinen Fall ein Major update ohne vorherige Sicherung. Dazu wird Docker Nextcloud vorher gestoppt und auf der shell folgende Kommandos im entsprechenden Verzeichnis ausgeführt. Da in meiner YAML „image: nextcloud:33“ definiert ist, erhalte ich auch nur minor updates passend zur Version 33.
docker compose pull nextcloud docker compose up -d
Wenn’s am Ende so aussieht, ist man schon sehr gut aufgestellt und hat eine saubere Nextcloud Installation. Ein Wartungsfenster macht bei meiner Instanz natürlich gar keinen Sinn.

#