Nextcloud Installation | Performant / Imaginary mit WebP / Memcache APCu & Redis
In diesem Beitrag geht es um eine leistungsstarke Einrichtung von Nextcloud.
Erfahren Sie, wie Sie mit Hilfe von WebP, Imaginary und einer alternativen Foto-App nicht nur die Performance optimieren, sondern auch das Scrollen nach Datum ermöglichen und hochwertige Vorschauen in voller Qualität beim Zoomen laden können.
Warum sollten Sie Nextcloud anstelle gängiger Cloud-Anbieter nutzen?
Ganz einfach: Sie möchten die volle Kontrolle über Ihre Daten behalten und unabhängig von einem Dienst sein.
Nextcloud bietet genau das, wonach Sie suchen.
Es handelt sich bei Nextcloud um einen komplett Open-Source-Fork von ownCloud (AGPL-3.0) und ist frei nutzbar.
Nextcloud hat sich zum Ziel gesetzt, Ihnen die gleichen Möglichkeiten wie die großen kommerziellen Anbieter zu bieten.
Was benötigen Sie für Ihre private Nextcloud?
Im Grunde genommen benötigen Sie ein gewisses Maß an Linux-Kenntnissen. Wenn Sie bereits einmal WordPress eingerichtet und gewartet haben, wird Ihnen auch die Einrichtung einer Nextcloud-Instanz nicht schwerfallen.
Keine Sorge, wir werden den Prozess gemeinsam durchgehen.
Hinweis:
Falls sich die Installation ändert, verlinke ich euch die entsprechende Dokumentation.
System Voraussetzungen
Configuration Parameters
Server Tuning
Background jobs
Installation aller wichtigen Programme für Nextcloud
sudo apt update -y && sudo apt upgrade -y && sudo apt-get install apache2 ffmpeg mariadb-server -y && sudo apt install software-properties-common && sudo add-apt-repository ppa:ondrej/php && sudo apt update && sudo apt install php8.3-{common,curl,gd,xml,mbstring,zip,bz2,intl,ldap,smbclient,imap,bcmath,gmp,apcu,fpm,readline,cli,memcached,opcache,igbinary,mysql,redis,imagick} imagemagick --allow-change-held-packages libapache2-mod-php -y
Einrichtung der PHP Config:
post_max_size & upload_max_filesize sind für die maximale Uploadgröße, ihr solltet bedenken, PHP speichert die Dateien im Temp Verzeichnis beim Upload und prüft erst im Nachhinein, ob dieser Upload genutzt wird.
Daher solltet ihr diesen Speicher auch verfügbar haben.
max_execution_time sagt wie lange ein PHP Script ausgeführt werden darf.
opcache wird zu Steigerung der Performanz genutzt.
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.3/apache2/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.3/apache2/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1G/" /etc/php/8.3/apache2/php.ini
sed -i "s/post_max_size =.*/post_max_size = 20G/" /etc/php/8.3/apache2/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 20G/" /etc/php/8.3/apache2/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.3/cli/php.ini
sed -i "s/output_buffering =.*/output_buffering = '0'/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.validate_timestamps=.*/opcache.validate_timestamps=0/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=256/" /etc/php/8.3/apache2/php.ini
sed -i '$aapc.enable_cli=1' /etc/php/8.3/mods-available/apcu.ini
sed -i '$aopcache.jit=1255' /etc/php/8.3/mods-available/opcache.ini
sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.3/mods-available/opcache.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=256/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=100000/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=60/" /etc/php/8.3/apache2/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.3/apache2/php.ini
sed -i "s|;emergency_restart_threshold.*|emergency_restart_threshold = 10|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i "s|;emergency_restart_interval.*|emergency_restart_interval = 1m|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i "s/rights=\"none\" pattern=\"PS\"/rights=\"read|write\" pattern=\"PS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"EPS\"/rights=\"read|write\" pattern=\"EPS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"PDF\"/rights=\"read|write\" pattern=\"PDF\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"XPS\"/rights=\"read|write\" pattern=\"XPS\"/" /etc/ImageMagick-6/policy.xml
Einrichtung der Datenbank in unserem Fall MariaDB.
mysql_secure_installation
Enter current password for root (enter for none): Enter Drücken
unix_socket authentication [Y/n] n
Change the root password? [Y/n] y
New password: < Dein Passwort >
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Datenbank Terminal öffnen
mysql
Erstellen der Nextcloud Database
CREATE DATABASE nextcloud;
Datenbank Nutzer Passwort und Erreichbarkeit festlegen
< nextclouduser > und ein Passwort bei < password_here > festlegen
< localhost > sagt dass das Konto es nur lokal nutzbar ist
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_here';
Dem < nextclouduser > alle Rechte auf die < nextcloud > datenbank geben.
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
Speichern und beenden
FLUSH PRIVILEGES;
EXIT;
Nextcloud Seite zu Apatche2 hinzufügen
nano /etc/apache2/sites-available/nextcloud.conf
Als Verzeichnis oder Alias:
DocumentRoot /var/www/nextcloud/
ServerName download.example.org
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; strict-origin; preload"
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
Redirect 301 /.well-known/webfinger /nextcloud/index.php/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Als Subdomain:
<VirtualHost *:80>
ServerAdmin mail@gmail.com
DocumentRoot /var/www/nextcloud/
ServerName download.example.org
ServerAlias download.example.org
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; strict-origin; preload"
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Hinzufügen der NextCloud (Rewrite Module) & Neustart Apache & dem www-data Rechte für Nextcloud Ordner erteillen.
a2ensite nextcloud.conf && a2enmod rewrite headers env dir mime php8.3 && service apache2 restart
install certbot
apt install certbot python3-certbot-apache
Zertifikat hinzufügen
certbot --apache -m < deine-email > -d < deine-domain >
Download der neuesten Version von Nextcloud
cd /tmp/ && wget https://download.nextcloud.com/server/releases/latest.zip && unzip latest.zip && mv nextcloud /var/www/ && mkdir /home/data/ && chown -R www-data:www-data /var/www/nextcloud/ /home/data/ && chmod -R 755 /var/www/nextcloud/
Jetzt richten wir unsere Nextcloud ein. Die Einrichtungsseite befindet sich unter www.example.org/nextcloud oder subdomain.example.org.
Zuerst legen wir ein Admin-Konto mit Benutzernamen und Passwort an.
Dann ändern wir den Speicherpfad und die Datenbank in den Einstellungen für Speicher & Datenbank.
Ändert "/var/www/nextcloud/data" zu "/home/data".
Bei Datenbank-Benutzer tragt den Benutzernamen für die Nextcloud-Datenbank ein < nextclouduser >.
Das Datenbank-Passwort ist das Passwort für euren < nextclouduser >.
Bei Datenbank-Name gebt den Namen eurer Nextcloud-Datenbank ein < nextcloud >.
Der Datenbank-Host localhost ist in Ordnung, wenn die Datenbank auf dem gleichen Server oder im gleichen Netzwerk erreichbar ist.
Einstellen der Config
Konfigurationseinstellungen:
"filesystem_check_changes" kann auf 1 gesetzt werden, wenn ihr möchtet, dass Nextcloud prüft, ob Änderungen am Dateisystem ohne Verwendung von Nextcloud vorgenommen wurden. Dies kann nützlich sein, wenn ihr häufig Daten auf andere Weise zu eurer Nextcloud hinzufügt und nicht immer manuell den Befehl zum Hinzufügen in Nextcloud ausführen möchtet.
"activity_expire_days" legt fest, wie lange Änderungen an Dateien in der Datenbank gespeichert werden. Wenn ihr nicht möchtet, dass diese Änderungen nach 14 Tagen gelöscht werden, könnt ihr diese Zeile einfach entfernen.
"trashbin_retention_obligation" löscht automatisch Daten, die sich seit 7 Tagen im Papierkorb befinden.
"preview_max_x" und "preview_max_y" legen fest, wie viele Pixel ein Vorschaubild maximal haben darf.
Weitere Informationen zu den Einstellungen findet ihr in der Nextcloud-Dokumentation oder in der config.sample.php.
sudo -u www-data cat <<EOF >>/var/www/nextcloud/config/tweaks.config.php
<?php
\$CONFIG = array (
'activity_expire_days' => 14,
'allow_local_remote_servers' => true,
'auth.bruteforce.protection.enabled' => true,
'forbidden_filenames' =>
array (
0 => '.htaccess',
1 => 'Thumbs.db',
2 => 'thumbs.db',
),
'cron_log' => true,
'default_phone_region' => 'DE',
'defaultapp' => 'files,dashboard',
'enable_previews' => true,
'preview_format' => 'webp',
'enabledPreviewProviders' =>
array (
0 => 'OC\\Preview\\Imaginary',
1 => 'OC\\Preview\\JPEG',
2 => 'OC\\Preview\\GIF',
3 => 'OC\\Preview\\BMP',
4 => 'OC\\Preview\\XBitmap',
5 => 'OC\\Preview\\Movie',
6 => 'OC\\Preview\\PDF',
7 => 'OC\\Preview\\MP3',
8 => 'OC\\Preview\\TXT',
9 => 'OC\\Preview\\MarkDown',
10 => 'OC\\Preview\\PNG',
11 => 'OC\\Preview\\WebP',
12 => 'OC\\Preview\\HEIC',
13 => 'OC\Preview\OpenDocument',
14 => 'OC\Preview\Krita',
20 => 'OC\\Preview\\Movie',
),
'preview_imaginary_url' => 'http://127.0.0.1:9000',
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '/var/log/nextcloud/nextcloud.log',
'loglevel' => 2,
'logtimezone' => 'Europe/Berlin',
'log_rotate_size' => '104857600',
'memcache.local' => '\OC\Memcache\APCu',
'overwriteprotocol' => 'https',
'preview_max_x' => 1024,
'preview_max_y' => 1024,
'preview_max_scale_factor' => NULL,
'profile.enabled' => false,
'quota_include_external_storage' => false,
'share_folder' => '/Freigaben',
'skeletondirectory' => '',
'theme' => '',
'trashbin_retention_obligation' => 'auto, 7',
'updater.release.channel' => 'stable',
);
EOF
Damit sind die ersten Schritte erledigt und die Nextcloud ist installiert.
Einrichtung von Imaginary mit optionaler WebP-Unterstützung.
Da ich bereits erwähnt habe, dass ich von der Standardinstallation abweichen möchte, werde ich nun den Teil mit Imaginary, WebP und der alternativen Foto-App Memory behandeln.
Imaginary docker-compose einrichten
apt-get install docker python3 docker-compose -y
mkdir /home/imaginary/
sudo -u www-data cat <<EOF >>/home/imaginary/docker-compose.yml
version: '3.1'
services:
aio-imaginary:
image: nextcloud/aio-imaginary:latest
restart: always
environment:
- PORT=9000
ports:
- 127.0.0.1:9000:9000
command: -concurrency 50 -enable-url-source -log-level debug
EOF
cd /home/imaginary/ && docker-compose up -d
Noch inoffizieller WebP-Nextcloud-Mod für Imaginary
Nicht mehr nötig, es wurde in Nextcloud hinzugefügt.
wget -O /var/www/nextcloud/lib/private/Preview/Imaginary.php https://raw.githubusercontent.com/JanisPlayer/server/master/lib/private/Preview/Imaginary.php
wget -O /var/www/nextcloud/lib/private/Preview/Generator.php https://raw.githubusercontent.com/JanisPlayer/server/master/lib/private/Preview/Generator.php
Ändern der Qualitätseinstellung von WebP Vorschaubildern
sudo -u www-data php /var/www/nextcloud/occ config:app:set preview webp_quality --value="30"
Redis Installation
Redis hilft, Datenbankzugriffe zu reduzieren und dadurch die Performance der Nextcloud zu steigern.
apt install -y redis-server -y
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sed -i 's/port 6379/port 0/' /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i 's/unixsocketperm 700/unixsocketperm 770/' /etc/redis/redis.conf
sed -i 's/# maxclients 10000/maxclients 10240/' /etc/redis/redis.conf
# Das Passwort muss auf jeden Fall geändert werden auf ein sicheres Passwort.
sed -i 's/# requirepass foobared/requirepass < Passwortmussgeändertwerden > /' /etc/redis/redis.conf
usermod -aG redis www-data
cp /etc/sysctl.conf /etc/sysctl.conf.bak
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf
sudo service redis-server restart
sudo service apache2 restart
# Bitte nicht vergessen < Passwortmussgeändertwerden > in das gleiche Passwort zu ändern.
# memcache.local' => '\OC\Memcache\APCu', kann auch zu 'memcache.local' => '\OC\Memcache\Redis', gändert werden falls gewünscht.
sed -i '/);/d' /var/www/nextcloud/config/tweaks.config.php && echo -e "'memcache.distributed' => '\\\OC\\\Memcache\\\Redis',\n'memcache.locking' => '\\\OC\\\Memcache\\\Redis',\n'redis' =>\narray (\n'host' => '/var/run/redis/redis-server.sock',\n'port' => 0,\n'password' => '<Passwortmussgeändertwerden>',\n'timeout' => 0.5,\n'dbindex' => 1,\n),\n);" >> /var/www/nextcloud/config/tweaks.config.php
Einrichtung der Nextcloud Apps
Eine bessere Foto-App mit einer einfacheren Bedienung Memories
sudo -u www-data php /var/www/nextcloud/occ app:install memories
sudo -u www-data php /var/www/nextcloud/occ memories:index
Recognition um Objekte oder Gesichter zu erkennen.
Die Gesichtserkennung mit der Funktion facerecognition soll besser sein, um nur Gesichter zu erkennen. Jedoch ist dies zum aktuellen Zeitpunkt des Artikels nicht mit der neuesten Version von Nextcloud möglich.
sudo -u www-data php /var/www/nextcloud/occ app:install retention
Hintergrund Job über Cron
sudo -u www-data php /var/www/nextcloud/occ background:cron
crontab -u www-data -l > /tmp/tmp_crontab && echo "*/5 * * * * php -f /var/www/nextcloud/cron.php" >> /tmp/tmp_crontab
crontab -u www-data /tmp/tmp_crontab && rm /tmp/tmp_crontab
Preview Generator
Lohnt sich bei vielen Nutzern, generiert alle Bilder ohne Nutzerinteraktion.
sudo -u www-data php /var/www/nextcloud/occ app:install previewgenerator
# Beispiel einstelllung:
# Dies wird nur generieren:
# Quadratische Vorschauen von: 64x64, 256x256 und 1024x1024
# Seitenverhältnis-Vorschauen mit einer Breite von: 64, 256 und 1024
# Seitenverhältnis-Vorschauen mit einer Höhe von: 64, 256 und 1024
# Hinweis:
# Vorschaugrößen sind immer eine Potenz von 4.
# Die kleinste Größe ist 64.
# Die maximale Größe wird durch Ihre Vorschaueinstellungen in der Datei "config.php" bestimmt.
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="64 256 1024" previewgenerator squareSizes
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="64 256 1024" previewgenerator widthSizes
sudo -u www-data php /var/www/nextcloud/occ config:app:set --value="64 256 1024" previewgenerator heightSizes
# einmaliges ausführen
sudo -u www-data php /var/www/nextcloud/occ preview:generate-all
# Um 0 Uhr alle 24h ausführen
sudo -u www-data php /var/www/nextcloud/occ background:cron
crontab -u www-data -l > /tmp/tmp_crontab && echo "0 /24 * * * * php -f /var/www/nextcloud/occ.php preview:pre-generate" >> /tmp/tmp_crontab
Danke an alle, die bis hierhin dabei geblieben sind, und ich wünsche euch viel Spaß mit eurer neuen Nextcloud.
Das Tutorial ist doch umfangreicher geworden als zuerst gedacht.
Allerdings hatte ich auch viele Probleme mit Makedown, weil ich ein Zeichen wohl verwechselt habe und musste die Installation selbst testen.
Es gibt noch viel mehr, was man machen könnte, aber ich dachte, ich bleibe vorerst bei einer einfachen Einrichtung von Nextcloud.
Ich habe mir auch ab und zu etwas bei anderen Anleitungen abgsehen.
c-rieger.de -Nextcloud Installationsanleitung
apfelcast.com - Nextcloud 25 auf Linux Server (Ubuntu 22.04) installieren – Einfache Anleitung
okxo.de - Speed up Nextcloud preview generation with imaginary
vaahsen.de - Redis für Nextcloud konfigurieren Memory Caching
Probier mal:
```
<html></html>
```
Ergibt dann:
Danke, Code funktioniert ja doch mit dem Steemit Makedown fail und ich habe da Stunden versucht das hinzubekommen. 😀
Ich habe dann wohl gestern Abend nur die flaschen Zeichen genutzt.