Nextcloud Installation | Performant / Imaginary mit WebP / Memcache APCu & Redis

in #deutsch2 years ago (edited)

Vorschaubild

<p dir="auto">In diesem Beitrag geht es um eine leistungsstarke Einrichtung von Nextcloud.<br /> 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. <p dir="auto">Warum sollten Sie Nextcloud anstelle gängiger Cloud-Anbieter nutzen?<br /> Ganz einfach: Sie möchten die volle Kontrolle über Ihre Daten behalten und unabhängig von einem Dienst sein.<br /> Nextcloud bietet genau das, wonach Sie suchen. <p dir="auto">Es handelt sich bei Nextcloud um einen komplett Open-Source-Fork von ownCloud (AGPL-3.0) und ist frei nutzbar.<br /> Nextcloud hat sich zum Ziel gesetzt, Ihnen die gleichen Möglichkeiten wie die großen kommerziellen Anbieter zu bieten. <p dir="auto">Was benötigen Sie für Ihre private Nextcloud?<br /> 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. <p dir="auto">Keine Sorge, wir werden den Prozess gemeinsam durchgehen. <h3>Hinweis: <p dir="auto">Falls sich die <a href="https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Installation ändert, verlinke ich euch die entsprechende Dokumentation.<br /> <a href="https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html#server" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">System Voraussetzungen<br /> <a href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Configuration Parameters<br /> <a href="https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Server Tuning<br /> <a href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Background jobs <hr /> <h1>Installation aller wichtigen Programme für Nextcloud <pre><code>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 <hr /> <h1>Einrichtung der PHP Config: <p dir="auto">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.<br /> Daher solltet ihr diesen Speicher auch verfügbar haben.<br /> max_execution_time sagt wie lange ein PHP Script ausgeführt werden darf.<br /> opcache wird zu Steigerung der Performanz genutzt. <pre><code>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 <h3>Einrichtung der Datenbank in unserem Fall MariaDB. <pre><code>mysql_secure_installation <p dir="auto">Enter current password for root (enter for none): Enter Drücken<br /> unix_socket authentication [Y/n] n<br /> Change the root password? [Y/n] y<br /> New password: < Dein Passwort ><br /> Remove anonymous users? [Y/n] y<br /> Disallow root login remotely? [Y/n] y<br /> Remove test database and access to it? [Y/n] y<br /> Reload privilege tables now? [Y/n] y <h3>Datenbank Terminal öffnen <pre><code>mysql <h3>Erstellen der Nextcloud Database <pre><code>CREATE DATABASE nextcloud; <h3>Datenbank Nutzer Passwort und Erreichbarkeit festlegen <p dir="auto">< nextclouduser > und ein Passwort bei < password_here > festlegen<br /> < localhost > sagt dass das Konto es nur lokal nutzbar ist <pre><code>CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_here'; <h3>Dem < nextclouduser > alle Rechte auf die < nextcloud > datenbank geben. <pre><code>GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost'; <h3>Speichern und beenden <pre><code>FLUSH PRIVILEGES; EXIT; <hr /> <h3>Nextcloud Seite zu Apatche2 hinzufügen <pre><code>nano /etc/apache2/sites-available/nextcloud.conf <h3>Als Verzeichnis oder Alias: <pre><code>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 <h3>Als Subdomain: <pre><code><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> <h3>Hinzufügen der NextCloud (Rewrite Module) & Neustart Apache & dem www-data Rechte für Nextcloud Ordner erteillen. <p dir="auto">a2ensite nextcloud.conf && a2enmod rewrite headers env dir mime php8.3 && service apache2 restart <hr /> <h1>install certbot <pre><code>apt install certbot python3-certbot-apache <h3>Zertifikat hinzufügen <pre><code>certbot --apache -m < deine-email > -d < deine-domain > <hr /> <h1>Download der neuesten Version von Nextcloud <pre><code>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/ <p dir="auto">Jetzt richten wir unsere Nextcloud ein. Die Einrichtungsseite befindet sich unter www.example.org/nextcloud oder subdomain.example.org. <p dir="auto">Zuerst legen wir ein Admin-Konto mit Benutzernamen und Passwort an. <p dir="auto">Dann ändern wir den Speicherpfad und die Datenbank in den Einstellungen für Speicher & Datenbank. <p dir="auto">Ändert "/var/www/nextcloud/data" zu "/home/data". <p dir="auto">Bei Datenbank-Benutzer tragt den Benutzernamen für die Nextcloud-Datenbank ein < nextclouduser >. <p dir="auto">Das Datenbank-Passwort ist das Passwort für euren < nextclouduser >. <p dir="auto">Bei Datenbank-Name gebt den Namen eurer Nextcloud-Datenbank ein < nextcloud >. <p dir="auto">Der Datenbank-Host localhost ist in Ordnung, wenn die Datenbank auf dem gleichen Server oder im gleichen Netzwerk erreichbar ist. <h3>Einstellen der Config <p dir="auto">Konfigurationseinstellungen: <ul> <li><p dir="auto">"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. <li><p dir="auto">"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. <li><p dir="auto">"trashbin_retention_obligation" löscht automatisch Daten, die sich seit 7 Tagen im Papierkorb befinden. <li><p dir="auto">"preview_max_x" und "preview_max_y" legen fest, wie viele Pixel ein Vorschaubild maximal haben darf. <p dir="auto">Weitere Informationen zu den Einstellungen findet ihr in der <a href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Nextcloud-Dokumentation oder in der <a href="https://github.com/nextcloud/server/blob/master/config/config.sample.php" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">config.sample.php. <pre><code>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 <p dir="auto">Damit sind die ersten Schritte erledigt und die Nextcloud ist installiert. <hr /> <h1>Einrichtung von Imaginary mit optionaler WebP-Unterstützung. <p dir="auto">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. <h3>Imaginary docker-compose einrichten <pre><code>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 <h3>Noch inoffizieller WebP-Nextcloud-Mod für Imaginary <p dir="auto">Nicht mehr nötig, es wurde in Nextcloud hinzugefügt. <pre><code>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 <h3>Ändern der Qualitätseinstellung von WebP Vorschaubildern <pre><code>sudo -u www-data php /var/www/nextcloud/occ config:app:set preview webp_quality --value="30" <hr /> <h1>Redis Installation <p dir="auto">Redis hilft, Datenbankzugriffe zu reduzieren und dadurch die Performance der Nextcloud zu steigern. <pre><code>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 <h1>Einrichtung der Nextcloud Apps <h3>Eine bessere Foto-App mit einer einfacheren Bedienung <a href="https://github.com/pulsejet/memories" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Memories <pre><code>sudo -u www-data php /var/www/nextcloud/occ app:install memories sudo -u www-data php /var/www/nextcloud/occ memories:index <h4><a href="https://apps.nextcloud.com/apps/recognize" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Recognition um Objekte oder Gesichter zu erkennen. <p dir="auto">Die Gesichtserkennung mit der Funktion <a href="https://apps.nextcloud.com/apps/facerecognition" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">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. <pre><code>sudo -u www-data php /var/www/nextcloud/occ app:install retention <hr /> <h1>Hintergrund Job über Cron <pre><code>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 <hr /> <h1><a href="https://github.com/nextcloud/previewgenerator" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Preview Generator <p dir="auto">Lohnt sich bei vielen Nutzern, generiert alle Bilder ohne Nutzerinteraktion. <pre><code>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 0 * * * php -f /var/www/nextcloud/occ preview:pre-generate" >> /tmp/tmp_crontab crontab -u www-data /tmp/tmp_crontab && rm /tmp/tmp_crontab <hr /> <h3>Danke an alle, die bis hierhin dabei geblieben sind, und ich wünsche euch viel Spaß mit eurer neuen Nextcloud. <p dir="auto">Das Tutorial ist doch umfangreicher geworden als zuerst gedacht.<br /> Allerdings hatte ich auch viele Probleme mit Makedown, weil ich ein Zeichen wohl verwechselt habe und musste die Installation selbst testen.<br /> Es gibt noch viel mehr, was man machen könnte, aber ich dachte, ich bleibe vorerst bei einer einfachen Einrichtung von Nextcloud. <p dir="auto">Ich habe mir auch ab und zu etwas bei anderen Anleitungen abgsehen.<br /> <a href="https://www.c-rieger.de/nextcloud-installationsanleitung/" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">c-rieger.de -Nextcloud Installationsanleitung <br /> <a href="https://apfelcast.com/nextcloud-25-auf-linux-server-ubuntu-22-04-installieren-einfache-anleitung/?cookie-state-change=1684152245717" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">apfelcast.com - Nextcloud 25 auf Linux Server (Ubuntu 22.04) installieren – Einfache Anleitung<br /> <a href="https://okxo.de/speed-up-nextcloud-preview-generation-with-imaginary/" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">okxo.de - Speed up Nextcloud preview generation with imaginary<br /> <a href="https://www.vaahsen.de/redis-fuer-nextcloud-konfigurieren-memory-caching/" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">vaahsen.de - Redis für Nextcloud konfigurieren Memory Caching <p dir="auto"><a href="https://images.hive.blog/DQmfEeVQHxmE45FJiyLAKi9CjZ5fVLtsv3QEKBNbsMS7EPv/TTS%20Audio.m4a">Artikel als Audio