Immich auf QNAP NAS installieren

Immich ist ein Programm, ähnlich wie Google Fotos, um seine Fotos zu organisieren. In einem anderen Beitrag habe ich Immich schon vorgestellt und gezeigt, wie ich es auf meinem Homeserver installiert habe.

In diesem Tutorial zeige ich dir, wie du Immich auf einem QNAP NAS installieren kannst.

Hardware

In meinem Fall handelt es sich um ein TS-233. Es sollte aber auch mit den meisten anderen QNAP NAS funktionieren. Es muss nur Container Station darauf laufen. Hier findest du die Systemanforderungen dafür: https://www.qnap.com/de-de/software/container-station

Installation von Container Station

Container Station ist die Docker-Umgebung von QNAP, in der wir später Immich installieren werden. Diese kann einfach im App-Center installiert werden:

Beim ersten Start wird gefragt, wohin die Docker-Dateien gespeichert werden sollen. Ansonsten ist keine weitere Konfiguration mehr möglich.

Aktivieren von SSH

Wähle in der Systemsteuerung „Netzwerk und Dateidienste“ → „Telnet / SSH“ und aktiviere dort die SSH-Verbindung. Verbinde dich anschließend per SSH mit dem NAS.

SSH Zugang aktivieren auf QNAP NAS

Vorbereiten der .env Datei

Lade dir die Beispiel-Datei hier herunter. Bearbeite die Datei so, dass die Dateipfade stimmen und wähle ein Passwort. Die Dateipfade beginnen immer mit /share/NameDesFreigabeOrdners. Evtl. musst du die Ordner zuerst noch anlegen. In meinem Fall sieht die Datei so aus:

Erstellen der temporären .env Datei

Wechsle ins Verzeichnis /tmp:

Erstelle anschließend die Datei mit dem Inhalt aus deiner .env Datei:

Verwende dazu deine vorbereitete .env Datei und füge den Inhalt zwischen den Anführungszeichen ein.

Diese Datei wird nur temporär zum Erstellen des Containers gebraucht.

Installation von Immich

Wähle in Container Station „Anwendung“→“Erstellen“.

Lade dir jetzt hier die docker-compose.yml von Immich herunter. Diese kann leider nicht 1:1 so verwendet werden, sondern muss etwas abgeändert werden:

  • Entferne „name: immich“ am Anfang
  • Füge ein „version: '3'“ am Anfang hinzu
  • Ersetze ALLE Platzhalter/Variablen durch die von dir gewählten Werte in der .env-Datei. Aus „${UPLOAD_LOCATION}“ wird also z. B. „/share/DockerData/VolumeData/immich_data_tut“.

Füge diesen Code dann in den Editor des Fensters ein und wähle einen Namen.

Wähle „Erstellen“. Das Erstellen des Containers sollte fehlschlagen, da die Datei .env noch in einem weiteren Verzeichnis erstellt werden muss.

Erstellen der permanenten .env Datei

Wechsle im Terminal (SSH-Verbindung) in das Verzeichnis, das du beim ersten Start von Container Station angegeben hast. Wechsle dort ins Verzeichnis container-station-data/application/namedeinesimmichcontainers. Führe dort denselben Code aus, wie du es auch schon im Verzeichnis /tmp gemacht hast, um die .env Datei zu erstellen.

Installation von Immich – Teil 2

Versuche nun wieder Immich wie vorher zu installieren. Bei diesem Mal sollte es ohne Probleme funktionieren und nach einiger Zeit sollte Immich unter http://IP_DEINES_NAS:2283 erreichbar sein.

36 Kommentare

  1. Hi, hier ist ein gaaanz großer Anfänger.
    Ich habe meinen Docker soweit installiert und denke mal ich muss postgres ebenfalls als Docker zunächst installieren oder? Kann immich den Container so ohne weiteres finden?
    Wo erstelle ich den Pfad denn intelligenterweise?

    Tut mir leid für die Basicfragen – hoffe du kannst mir helfen.

    Gruß,
    Jay

    • Hi, die docker-compose.yml erstellt automatisch einen postgres Container, der auch schon mit dem immich Container korrekt verbunden ist. Da musst du nichts mehr extra installieren.

      Die Pfade erstellst du am besten direkt auf der Oberfläche des NAS, indem du einen Freigabeordner erstellst und darin dann die weitere Ordnerstruktur, falls du das gemeint hast.

  2. Ich habe die docker-compose.yml so wie oben beschrieben angepasst, aber wenn ich sie validiere, gibt es haufenweise Fehlermeldungen, offenbar fehlen vor den Variablen wie :volumes etc. Leerzeichen. Wenn ich dann alle angepasst habe und validate nichts rotes mehr anzeigt, bekomme ich beim nächsten Validate die Meldung, das nur version 2 und 3 unterstützt werden. Weiter weiß ich jetzt nicht mehr, kann mir jemand den Schubs in die richtige Richtung geben? Oder eine fertige docker-compose.yml wo ich dann nur noch die Pfade und das Passwort ändern muß?

    • Da hat wordpress einen Fehler gemacht. Bei version muss eine 3 in einfachen, oberen Anführungszeichen rein. In meinem Beitrag oben hat sich ein unteres Anführungszeichen verirrt. Sollte jetzt korrigiert sein.
      Vor den Variablen müssen manchmal Leerzeichen rein, manchmal nicht.

  3. Nun alles gut – habe die komplette Containerstation deinstalliert und neu installiert – damit hat es nun dann auf Anhieb geklapt.
    War wohl was kaputt gegangen…

    DANKE für deine Hilfe!

    • Freut mich, wenns bei dir geklappt hat 🙂

      • nun ergibt sich eine weitere Frage – wie machst du Updates von Immich?
        Das Terminal selbst ist ja per default nicht eingehängt – es kommt darauf „You must enable the interactive (-i) and TTY (-t) processes to attach the terminal to a container.“

        Als Abhilfe habe ich die Container einfach komplett entfernt und das ganze neu gestartet – klappt auch, ist halt etwas „ums Eck gedacht“ – sollte das nicht auch wo via apt-get update bzw. upgrade gehen?
        (aber da bräuchte es die KKonsole – s.o. 🙂

        Danke dir nochmals

        lg
        Michael

        • Genau so funktioniert ein Update bei Docker. Den Container neu erstellen. Evtl. gibt es da auch eine extra Funktion dafür, wo man nur kurz mit einem Klick bestätigen kann und dann der Container mit den gleichen Einstellungen neu erstellt wird? Ich hab gerade das NAS nicht zur Hand, um nachzuschauen. Aber ansonsten, ja, musst du jedes Mal neu erstellen.

          Etwas im Docker-Container per Terminal zu ändern ist meist keine gute Idee, da diese Änderungen eben (durch ein neu Erstellen des Containers wegen einem Update) flüchtig sind.

          apt upgrade aktualisiert keine Docker Container

  4. Nachtrag zur letzten Frage:

    es gibt ganz unten in der yml noch diesen Eintrag:

    volumes:
    model-cache:

    Kann ich da was sinnvoll definieren für mein Cache-Problem???

    Danke

  5. so – ich hatte es nun mal liegen gelassen und heute nochmals frisch gestartet – Alles läuft nach Installation soweit fein, doch nun habe ich wieder den selben Fehler:

    Die Gesichtserkennung und KI funktionieren nicht – es kommt immer im Container immich-machine-learning die Fehlermeldung

    WARNING Versuch, den Cache für das Modell ‚buffalo_l‘ zu löschen, aber
    das Cache-Verzeichnis existiert nicht

    –> in der docker-compose.yml steht ja auch unter

    immich-machine-learning:
    volumes:
    – model-cache:/cache

    was auch immer ich dort definiere bzw. hineinschreibe – es funktioniert nicht.
    Gebe ich dort auch ein share an, z.b.
    model-cache:/share/Container/immich/daten dann klappt das Erstellen des Stacks gar nicht…

    Wo muss am QNAP-NAS dieser cache liegen, bzw. wie kann ich den in der .yml definieren, damit auch die Gesichtserkennung bei immich funktioniert?
    Wäre so ein tolles Tool und endlich weg von Google-Cloud mit den Fotos, doch ist für mich diese Suche essentiell 🙁

    Danke & LG
    Michael

    • Hallo Michael,
      Dein Ansatz war richtig – aber falsch herum. Links steht der Pfad auf dem Host, rechts der im Container. Es müsste wenn dann also
      /share/Container/immich/daten:/cache
      sein. Der Pfad auf dem NAS sollte sich von dem der Datenbank und dem der Fotos unterscheiden. Da wird dann nur das KI-Modell zwischengespeichert.

      • danke – habe das angepasst und in die YML für machine-learning das adaptiert:
        – /share/Container/immich/cache:/cache

        – nun gibt es ein weiteres Volume in der Diskstation, doch das hat status „unbenutzt“.

        Und das log vom machine-learning sagt immer noch dasselbe:

        [09/12/24 14:57:30] INFO Downloading detection model ‚buffalo_l‘. This may
        take a while.
        [09/12/24 14:57:40] WARNING Failed to load detection model ‚buffalo_l‘.
        Clearing cache.
        [09/12/24 14:57:40] WARNING Attempted to clear cache for model ‚buffalo_l‘, but
        cache directory does not exist

        Noch eine Idee?
        Danke dir…

        LG Michael

        • Anscheinend hat das etwas mit der IP des Machine Learning Containers zu tun, siehe: https://www.reddit.com/r/immich/comments/19a2fii/unable_to_set_up_facial_recognition_unraid_docker/
          Den Zusammenhang verstehe ich aber nicht ganz.

          Dadurch, dass du den Pfad zum Cache Ordner direkt angegeben hast, kannst du den gesamten unteren Teil („volumes“) weglassen.

          • mit IP 0.0.0.0 sprach es bei mir im LOG gar nicht mehr an im immich_machine_learning – nix mehr im LOG.

            Habe nun ganz unten im YML lt. deiner Beschreibung die beiden Zeilen auskommentiert:
            # volumes:
            # model-cache:
            -> brachte auch keine Änderung.

            Hier das log:
            [09/17/24 08:28:01] INFO Waiting for application startup.
            [09/17/24 08:28:01] INFO Created in-memory cache with unloading after 300s
            of inactivity.
            [09/17/24 08:28:01] INFO Initialized request thread pool with 4 threads.
            [09/17/24 08:28:01] INFO Application startup complete.
            [09/17/24 08:28:23] INFO Downloading detection model ‚buffalo_l‘. This may
            take a while.
            [09/17/24 08:28:33] INFO Downloading detection model ‚buffalo_l‘. This may
            take a while.
            [09/17/24 08:28:33] WARNING Failed to load detection model ‚buffalo_l‘.
            Clearing cache.
            [09/17/24 08:28:33] WARNING Attempted to clear cache for model ‚buffalo_l‘, but
            cache directory does not exist
            [09/17/24 08:28:43] WARNING Failed to load detection model ‚buffalo_l‘.
            Clearing cache.
            [09/17/24 08:28:43] WARNING Attempted to clear cache for model ‚buffalo_l‘, but
            cache directory does not exist

            das log am immich_server zeigt mir dabei dies an:

            [Nest] 7 – 09/17/2024, 8:28:43 AM ERROR [Microservices:JobService] Unable to run job handler (faceDetection/face-detection): Error: Machine learning request ‚{„facial-recognition“:{„detection“:{„modelName“:“buffalo_l“,“options“:{„minScore“:0.7}},“recognition“:{„modelName“:“buffalo_l“}}}‘ failed with status 500: Internal Server Error
            [Nest] 7 – 09/17/2024, 8:28:43 AM ERROR [Microservices:JobService] Error: Machine learning request ‚{„facial-recognition“:{„detection“:{„modelName“:“buffalo_l“,“options“:{„minScore“:0.7}},“recognition“:{„modelName“:“buffalo_l“}}}‘ failed with status 500: Internal Server Error
            at MachineLearningRepository.predict (/usr/src/app/dist/repositories/machine-learning.repository.js:22:19)
            at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
            at async MachineLearningRepository.detectFaces (/usr/src/app/dist/repositories/machine-learning.repository.js:33:26)
            at async PersonService.handleDetectFaces (/usr/src/app/dist/services/person.service.js:283:52)
            at async /usr/src/app/dist/services/job.service.js:148:36
            at async Worker.processJob (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:394:28)
            at async Worker.retryIfFailed (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:581:24)
            [Nest] 7 – 09/17/2024, 8:28:43 AM ERROR [Microservices:JobService] Object:

            Danke nochmals – ich stehe voll an…

          • Vielleicht ein Rechte-Problem. Du könntest mal im Terminal versuchen:
            chmod 777 /pfad/zum/immich/model/cache

            Ansonsten bin ich leider ratlos…

  6. wie müsste man machen für updates?
    einzelne container redeployen?

  7. habe nun händisch gesucht und die YML angepasst:

    image: ghcr.io/immich-app/immich-server:pr-11927
    image: ghcr.io/immich-app/immich-machine-learning:pr-11927

    klappt aber leider noch immer nicht – das log sagt es fehlen ihm die ENV-Werte

    FRAGE: du schreibst wechsle ins /TMP verzeichnis:
    Welches ist da gemeint: direkt am NAS via SSH auf /TMP oder unter /share/Container/container-station-data/tmp ????
    Da kann ich ja auch via Filestation hingehen und die Datei direkt von einem anderen Ort wo ich sie anlegte dort hinkopieren – erspart mir das Gezicker mit dem SSH.
    UND: im SSH gäbe es auch den VI-Editor …

    • Zu deiner Frage: Es ist tatsächlich /tmp gemeint. Deswegen braucht es auch SSH.
      Zum Thema vi: Lässt sich ohne Einarbeitung leider überhaupt nicht nutzen. Wenn man das mal drauf hat, ist es bestimmt ein mächtiges Tool. Mir reicht aber meistens nano. Da der bei qnap nicht vorinstalliert ist, eben der Umweg mit echo.

      Zu deiner vorherigen Nachricht: Du musst alle Umgebungsvariablen in der docker compose ersetzen. Bei ${IMMICH_VERSION:-release} reicht es, wenn du diesen Teil einfach ganz entfernst, da hier „release“ der Standard ist und das „release“ wie oben zu sehen gelöscht wird.

  8. Ich erhalte leider beim Erstellen (auch nach Ablage der tmp-files) immer diese Fehlermeldung:

    Failed to create application „immich-2“. Error message: failed to pull image ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}[invalid reference format]

  9. meine „.env“ datei ist unter „/tmp“ gespeichert, aber ich erhalte beim erstellen vom container die meldung dass die env datei nicht gefunden werden kann. er sucht sie natürlich im container docker. allerdings dort in: „container-station-data/tmp/tmpEbgKhz/compose/.env“

    den pfad gibt es aber wohl wirklich nur ganz kurz während er versucht die anwendung zu erstellen, danach ist er weg.

    musste übrigens in der yml „start_interval“ in „interval“ ändern, da es dass attribut in version 3 so nicht mehr gibt, für alle nachfolgdenden leser 🙂

    • Danke für die Hinweise 🙂

      • der erste teil war eher eine frage, weil ich die env nicht in den unterordner der temporär erstellt wird reinkopieren kann, der wird für 1-2 sekunden erstellt und ist dann wieder weg wenn die fehlermeldung erscheint. hast du einen tipp?

        • Das Erstellen des Containers SOLL ja fehlschlagen, bzw. so ist es oben beschrieben. Dabei wird aber der Ordner „container-station-data/application/namedeinesimmichcontainers“ erstellt, bei dem man dann die .env Datei nochmal erstellen muss.
          Bei dem zweiten Versuch, den Container zu erstellen, sollte dann alles klappen.
          So war es zumindest bei mir.
          Vielleicht gab es auch ein Update und das funktioniert jetzt anders…

          • ja, leider wird der ordner nicht erstellt. applications bleibt leer

          • So sollte das natürlich nicht sein. Ich nehme an der Ordner „container-station-data/tmp/tmpEbgKhz/compose/.env“
            ist Zufalls-generiert, also immer anders? Sonst könnte man ja den Ordner vorher erstellen und da die Datei reinpacken.

  10. Thanks a lot for this tutorial, I have been looking for a while for some help to install Immich on Qnap Container Station! It is now up an running. Did you try to enable hardware acceleration for transcoding or machine learning?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert