Kein HEIC support für Nextcloud 27 mit PHP 8.2 und nginx auf Debian 12 Bookworm

Ich bin/war mir sicher ich hätte das auch schon gemacht, daher hab ich es einfach noch einmal komplett durchlaufen lassen.

Du kannst mal ausprobieren, ob die App HEIC/HEIF Image Converter funktioniert.
Diese nutzt/benötigt ImagickMagick und PHP Imagick.

Wäre ein mögliches Anzeichen, dass diese nicht funktionieren.

grafik

Hab vor der Installation heute über:

php -r 'phpinfo();' | grep HEIC

keinen Eintrag angezeigt bekommen. Das gibt nach der Installation heute nun etwas aus.

Ob das wirklich in den PHP Module auftaucht, kann ich dir nicht sagen.
Aber die Module brauchst du.

Wie gesagt, bei mir läuft es mittlerweile. Ich bekomme jetzt allerdings immer wieder mehrere upstream timed out (110: Connection timed out). Ich weiß aber nicht genau woran das liegt.
/apps/photos/api/v1/preview/128351?etag=c3ba390ff79a11e87766be445624cb52&x=512&y=512
Denke es liegt an der Erstellung der reviews. Nginx habe ich ein wenig angepasst und die Settings gesetzt:

fastcgi_read_timeout 180;
proxy_read_timeout 180;

Hab das Gefühl das hat ein wenig geholfen…
Im Netz hab ich gefunden, dass manche diesen auf eine Stunde setzen, ich werde aber einen Teufel tun das zu machen…

Wahrscheinlich, weil es so in der offiziellen Dokumentation steht: https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html#configuring-your-web-server

Das bleibt natürlich dir überlassen :wink:

php_value max_input_time 3600
php_value max_execution_time 3600

Diese Werte sind auch besonders wichtig für den intern Updater, falls der Download der nextcloud-*.zip bei einer schlechten Internetverbindung einmal länger dauert. Seitdem gab es auch keine Abbrüche mehr bei mir.

Das Modul ist für die Anzeige von *.heic Dateien essenziell.

Hier auch noch ein Auszug aus meiner config.php.

  'enable_previews' => true,
  'preview_max_x' => 2048,
  'preview_max_y' => 2048,
  'preview_max_memory' => 4096,
  'preview_max_filesize_image' => 256,
  'enabledPreviewProviders' => [
	0 => 'OC\\Preview\Imaginary',
	1 => 'OC\\Preview\\Image',
	2 => 'OC\\Preview\\HEIC',
    3 => 'OC\\Preview\\TIFF',
    4 => 'OC\\Preview\\Movie',
    5 => 'OC\\Preview\\MKV',
    6 => 'OC\\Preview\\MP4',
    7 => 'OC\\Preview\\AVI',
	8 => 'OC\\Preview\XBitmap',
	9 => 'OC\\Preview\MP3',
	10 => 'OC\\Preview\TXT',
	11 => 'OC\\Preview\MarkDown',
	12 => 'OC\\Preview\OpenDocument',
	13 => 'OC\\Preview\Krita',
  ],  

Der erste Punkt " 0 => ‘OC\Preview\Imaginary’," muss weg und kann nur mit Imaginary verwendet werden.

Beispiel aus einem Synology NAS mit Imaginary im Docker:

  'preview_imaginary_url' => 'http://192.168.1**.1**:9000',
  'preview_ffmpeg_path' => '/volume1/@appstore/ffmpeg6/bin/ffmpeg',

Bei deinem Link geht es aber um dem php_value max_input_time 3600 nicht um den timeout bei NGINX. Ich bekomme keinen PHP timeout.

Sorry ja, da hast du natürlich recht, das sind die PHP Settings, nicht die NGINX Settings.

Trotzdem bleibt die Frage warum du es nicht wenigstens mal testweise mit deutlich höheren Werten versuchst. Denkst du nicht es hat einen Grund, das andere das so machen? :wink:

Hier mal ein Beispiel: https://www.c-rieger.de/nextcloud-installationsanleitung/#c01

Der relevante Teil:

fastcgi_request_buffering off;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
fastcgi_connect_timeout 3600;
fastcgi_max_temp_file_size 0;

Ich hab es mal hochgesetzt, allerdings auf 360 nicht gleich auf 3600. Ich meine mich zu erinnern, dass es bei zu langen timeout Zeiten Sicherheitsbedenken gibt. Vorsicht ist im Bereich Sicherheit immer besser als Nachsicht.

Die Frage ist halt am Ende des Tages warum es überhaupt zu einem upstream timed out (110: Connection timed out) kommt.

Ich bin kein Experte aber ich denke schon auch, dass das massive Erhöhen des fastcgi_read_timeout eher ein Workaround ist, um etwas zu verhindern, dass gar nicht erst auftreten sollte. Ob es tatsächlich auch ein Sicherheitsproblem darstellt, kann ich nicht beurteilen.

Gründe warum der Webserver in ein Timeout läuft, können z.B. eine hohe CPU Last des Servers sein (evtl. wegen zuvielen PHP-FPM Prozessen), eine langsame Datenbankverbindung, langsames Storage, hohe RAM Auslastung (auch wieder wegen vieler gleichzeitiger Prozesse). Oder halt eben das Backend selbst (Nextcloud), welches aus was für Gründen auch immer, die Requests nicht besser handeln kann, und es deshalb diese hohen Timeoutwerte zwingend braucht.

Was kann dagegen helfen?

  • Klar erstmal die Timeouts erhöhen, bis zu einem gewissen Punkt warscheinlich zwingend mit Nextcloud als Backend.

  • Mehr RAM, mehr CPU Kerne, schnelleres Storage

  • PHP Prozesse optimieren: https://spot13.com/pmcalculator/

  • Und, falls du es noch nicht getan hast, mal versuchen PHP-FPM auf “ondemand” anstatt “dynamic” zu stellen in der www.conf.

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives. With this process management, there will be
;             always at least 1 children.
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
;             pm.max_spawn_rate    - the maximum number of rate to spawn child
;                                    processes at once.
;  ondemand - no children are created at startup. Children will be forked when
;             new requests will connect. The following parameter are used:
;             pm.max_children           - the maximum number of children that
;                                         can be alive at the same time.
;             pm.process_idle_timeout   - The number of seconds after which
;                                         an idle process will be killed.
; Note: This value is mandatory.
pm = ondemand

Danke für die ausführliche Auflistung und Beschreibung. Ich werde es auf jeden Fall mal im Auge behalten und die Logs mal öfter durchgehen.
Wie gesagt, danke!

Bei mir funktioniert es leider noch immer nicht. Und komme nicht darauf was es sein könnte.
Frage an alle diejenigen wo Heic-Dateien angezeigt werden:
Nutzt ihre nginx oder Apache2 ?

Bei mir werden HEIC-Dateien korrekt angezeigt und ich verwende Apache 2.4

Gerade mit einer neuen Installation ausprobiert und funktioniert einwandfrei.
grafik

Debian Bookworm und mit diesem Script.
https://s2011.de/nc_doku2/nc_install.php

grafik

Womit installierst du Nextcloud oder nach welcher Anleitung?

Ich habe diese Anleitung verwendet. Das hat bis jetzt auch einwandfrei funktioniert.
Nextcloud Installationsanleitung - Carsten Rieger IT-Services (c-rieger.de)

Danke für den Link. Den kannte ich noch gar nicht. Werde es mir mal anschauen. Eventuell komme ich dann darauf was noch fehlt.

1 Like

Hast du es mittlerweile gelöst?

Edit: [Solved] Image Previews only working for HEIC photos - #8 by Lucas_E hat es für mich gelöst.

Wobei ich immernoch gespannt bin auf die “Privacy concerns” die zum Deaktivieren vom HEIC-Preview-Support im Standard geführt haben (siehe https://github.com/nextcloud/server/pull/28079).

Ich habe mir in der config.php die Preview Proiders angeschaut.
Folgende sind bei mir eingetragen gewesen:

‘OC\Preview\PNG’,
‘OC\Preview\JPEG’,
‘OC\Preview\GIF’,
‘OC\Preview\BMP’,
‘OC\Preview\XBitmap’,
‘OC\Preview\MP3’,
‘OC\Preview\TXT’,
‘OC\Preview\MarkDown’,
‘OC\Preview\OpenDocument’,
‘OC\Preview\Krita’,

Also habe ich die Zeile " ‘OC\Preview\HEIC’, " eingefügt und den Server neugestartet.
Danach hat diese Zeile wieder gefehlt. Irgendetwas setzt bei mir dies Preview Provider wieder zurück. :face_with_raised_eyebrow::face_vomiting:

Update: Die App Erinnerungen (Memories) überschreibt die Preview Provider, wenn man in den Einstellungen der App etwas ändert.

So ich habe des Rätsels Lösung:
Ich hatte mit Herrn Rieger von c-rieger.de E-Mail Kontakt.
Das Installationsskript , das er bereitstellt, legt zwei Nextcloud config-Dateien an. Eine config.php und eine tweaks.config.php.
Die “Preview Proiders” sind in tweaks.config.php gewandert und müssen dort angepasst werden. Trägt man sie in config.php ein, werden diese ignoriert.
Es hat sich herausgestellt, dass in diesem Skript der Eintrag " ‘OC\Preview\HEIC’, " gefehlt hat. Dies wurde nun korrigiert.