Photoprism mit Podman installieren

Jetzt für nur 1 Euro testen!
Habt Ihr große Hosting-Projekte mit vielen Ressourcen? Mit dem CloudServer (VPS) von hosting.de ist das kein Problem. Dank unserem umfangreichen Angebot an Hosting Tools genießt Ihr absolute Freiheit. Natürlich kann das Betriebssystem per Knopfdruck frei gewählt werden.
Jetzt Cloud Server buchen

Einleitung

PhotoPrism ist eine Web-Software zum verwalten von Fotos die auf einem eigenen Server betrieben werden kann. Die Entwickler empfehlen die Software in einem Container zu betreiben und stellen eine docker-compose Datei bereit. Nach aussen wird hier zusätzlich ein nginx Webserver genutzt um TLS zu terminieren und die Anfragen zum Photoprism Container weiterzuleiten.

Voraussetzungen

  • Sie verfügen über einen hosting.de Cloud Server, welcher einen gültigen DNS-Eintrag, z.B. demo.mustermann-domain.de besitzt.
  • Eine privilegierte Shell auf dem System.

Pakete installieren

apt update
apt install podman podman-compose

Photoprism installieren

Speicherort für Container erstellen

mkdir /opt/photoprism

Photoprism compose Datei runterladen

cd /opt/photoprism
wget https://dl.photoprism.app/podman/docker-compose.yml

Die docker-compose.yml anpassen und folgennde Werte bearbeiten:

  • restart: always
    Container mit restart: always werden in Debian beim booten automatisch gestartet
  • 127.0.0.1:2342:2342
    Photoprism auf localhost binden da nginx hier als frontend agieren soll
  • PHOTOPRISM_DISABLE_PLACES: true
    Deaktiviert die Kartenabfrage der geo Koordinaten bei den Entwicklern. Muss auf false gesetzt werden falls Karten angezeigt werden sollen
  • PHOTOPRISM_ADMIN_PASSWORD
    Das Admin Passwort für den Weblogin
  • MARIADB_PASSWORD bzw. MARIADB_ROOT_PASSWORD
    Datenbank Passwörten setzen.
. . .
    image: photoprism/photoprism:latest
    container_name: photoprism
    ## Don't enable automatic restarts until PhotoPrism has been properly configured and tested!
    ## If the service gets stuck in a restart loop, this points to a memory, filesystem, network, or database issue:
    ## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
    # restart: unless-stopped
    restart: always
. . .
    ports:
      ## Web server port mapping in the format "Host:Container". To use a different port, change the host port
      ## on the left-hand side and keep the container port, e.g. "80:2342" (for HTTP) or "443:2342 (for HTTPS):
      - "127.0.0.1:2342:2342"
. . .
PHOTOPRISM_ADMIN_PASSWORD: "<neues Admin Passwort>"
. . .
PHOTOPRISM_DISABLE_PLACES: "true"
. . .
PHOTOPRISM_DATABASE_PASSWORD: "<phtoprism DB Passwort>"
. . .
  ## MariaDB Database Server (recommended)
  ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
  mariadb:
    ## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
    ## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
    # restart: unless-stopped
    restart: always
. . .
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "<phtoprism DB Passwort>"
MARIADB_ROOT_PASSWORD: "<DB root Passwort>"
. . .

Container starten

podman-compose up -d

Jetzt werden die verschiedenen Container runtergeladen und gestartet. Nachdem das abgeschlossen ist sollten mit

podman ps

zwei laufende Container angezeigt werden.

Photoprism testen

Um Photoprism zu testen muss eine ssh Verbindung mit Portweiterleitung genutzt werden:

ssh -L 127.0.0.1:2342:127.0.0.1:2342 root@demo.mustermann-domain.de

Jetzt lässt sich die Photoprism Website im Browser mit http://127.0.0.1:2342 aufrufen um zu testen ob alles funktioniert.

Ningx installieren

Nginx mit Let’s Encrypt Zertifikaten installieren.

Nach dem die Domain in Nginx für Let’s Encrypt TLS konfiguriert ist muss die Konfiguration für Photoprism erweitert werden. Dafür die Datei /etc/nginx/sites-enabled/demo.mustermann-domain.de angepasst werden

server {
    server_name demo.mustermann-domain.de;

    include snippets/mozilla-modern.conf;
    . . .

    # allow large file uploads
    client_max_body_size 50000M;

    # Set headers
    proxy_set_header Host              $http_host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # enable websockets: http://nginx.org/en/docs/http/websocket.html
    proxy_http_version 1.1;
    proxy_set_header   Upgrade    $http_upgrade;
    proxy_set_header   Connection "upgrade";
    proxy_redirect     off;

    # set timeout
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    send_timeout       600s;

    location / {
        proxy_pass http://127.0.0.1:2342;
    }
}

Danach die Nginx Konfiguration mit nginx-t auf Korrektheit prüfen und den Websever neustarten (systemctl restart nginx.service) Zum Schluss noch kontrollieren ob Photoprism nun über https://demo.mustermann-domain.de erreichbar ist.

Neuen Nutzer in der Community Edition anlegen

In der Community Edition gibt es mehrere Einschränkungen beim Mehrbenutzerbetrieb:

  • Es lassen sich nur Nutzer mit der Adminrolle anlegen
  • Die Nutzerverwaltung funktioniert nur über die cli

Einen neuen Nutzer kann man Beispielsweise mit folgendem Kommando einrichten:

podman-compose exec photoprism photoprism users add --password <Passwort> <Loginname>

Strukturierung des PhotoPrism-Speichers und der Volumes

Bevor du PhotoPrism in der Produktion einsetzt, solltest du unbedingt ein klares und dauerhaftes Speicherlayout festlegen. Im Gegensatz zu Nextcloud-Speichern unterstützt PhotoPrism mehrere Datentypen, darunter Originalfotos und -videos, generierte Vorschauen und Indizes sowie Datenbankdateien. Die Speicherung all dieser Daten in klar definierten Verzeichnissen hilft, Datenverluste zu vermeiden, vereinfacht die Wartung und verbessert die Leistung.

Eine empfohlene Struktur umfasst separate Verzeichnisse für Originalmedien, den internen Speicher von PhotoPrism und die Datenbank. Originale können beispielsweise in /srv/photoprism/originals gespeichert werden, während /srv/photoprism/storage Miniaturansichten, Indizes und Cache-Dateien enthalten kann. Datenbankdaten (MariaDB) sollten in einem eigenen Verzeichnis wie /srv/photoprism/database gespeichert werden. Diese Verzeichnisse sollten in der Compose-Konfiguration als Volumes gemountet werden.

Stell sicher, dass der Container über die entsprechenden Lese- und Schreibberechtigungen für alle gemounteten Pfade verfügt. Bei großen Fotobibliotheken wird dringend empfohlen, diese Verzeichnisse auf einer dedizierten Datendisk oder SSD zu speichern. Eine sorgfältige Volume-Planung zu Beginn vermeidet spätere Migrationsprobleme und erleichtert Backups und Wiederherstellungen erheblich.

Bewährte Verfahren für Backups, Upgrades und Wartung

Um PhotoPrism zuverlässig auszuführen, ist eine einfache, aber konsequente Wartungsstrategie erforderlich. Die wichtigste Aufgabe sind regelmäßige Backups. Du solltest mindestens drei Komponenten sichern: die Foto-Originale, das PhotoPrism-Speicherverzeichnis und die Datenbank. Originale können mit Backups auf Dateiebene gesichert werden, während MariaDB mit geplanten SQL-Dumps gesichert werden sollte.

Erstellen Sie vor der Anwendung von Updates immer ein neues Backup. Um PhotoPrism zu aktualisieren, stoppen Sie die laufenden Container, laden Sie die neuesten Container-Images herunter und starten Sie die Dienste neu. Überprüfen Sie nach dem Update, ob PhotoPrism korrekt startet, die Weboberfläche zugänglich ist und die Fotos wie erwartet geladen werden.

Konfigurationsdateien, wie die Compose-Datei und die Nginx-Konfiguration, sollten ebenfalls gesichert oder in der Versionskontrolle gespeichert werden. So kannst du Fehlkonfigurationen oder fehlgeschlagene Updates schnell beheben. Durch kontrollierte Wartungsarbeiten werden Ausfallzeiten reduziert und die Datenintegrität langfristig gewährleistet.

Häufige Fehlerbehebungsszenarien und Lösungen

Auch bei einer korrekten Installation können Betriebsprobleme auftreten. Verwende die folgenden Überprüfungen, um Probleme schnell und konsistent zu diagnostizieren.

Container starten wiederholt neu (Neustartschleife)

  • Überprüfe zuerst die Protokolle: podman logs (oder podman-compose logs, falls zutreffend).
  • Stelle sicher, dass die Umgebungsvariablen korrekt eingestellt sind (insbesondere Datenbank-Host/Benutzer/Passwort und PhotoPrism-Administratoranmeldedaten).
  • Überprüfe die Systemressourcen: Stelle sicher, dass ausreichend Festplattenspeicher, RAM und CPU vorhanden sind – die Indizierung kann ressourcenintensiv sein.
  • Stelle sicher, dass der Datenbankcontainer fehlerfrei und erreichbar ist, bevor PhotoPrism gestartet wird.

PhotoPrism hinter Nginx nicht erreichbar

  • Überprüfe, ob PhotoPrism lokal auf der erwarteten Adresse/dem erwarteten Port (in der Regel 127.0.0.1:2342) empfangsbereit ist.
  • Überprüfe, ob das Nginx-Proxy_pass-Ziel auf http://127.0.0.1:2342 zeigt.
  • Überprüfe die Firewall-Regeln, um sicherzustellen, dass Nginx das lokale Backend erreichen kann (und dass der Backend-Port nicht öffentlich zugänglich ist).
  • Überprüfe die Nginx-Fehlerprotokolle, um Probleme mit dem Proxy, TLS oder der Upstream-Konnektivität zu identifizieren.

Fotos werden nicht angezeigt oder Uploads schlagen fehl (Berechtigungen und Pfade)

  • Überprüfe die Volume-Pfade: Vergewissere dich, dass die gemounteten Verzeichnisse mit den gewünschten Original-, Import- und Speicherorten übereinstimmen.
  • Überprüfe die Verzeichnisberechtigungen: PhotoPrism muss in der Lage sein, Originale zu lesen und bei Bedarf in den Speicher zu schreiben/zu importieren.
  • Wenn Uploads für größere Dateien fehlschlagen, stelle sicher, dass Nginx diese unterstützt: Lege eine ausreichende client_max_body_size fest und erhöhe die Proxy-Timeouts, wenn Uploads oder Indizierungsanfragen länger als die Standardgrenzen dauern.

Langsame Leistung während der Indizierung

  • Rechne während der ersten Scans mit einer hohen CPU-/Festplattenauslastung; führe die Indizierung nach Möglichkeit in Zeiten mit geringem Datenverkehr durch.
  • Erwäge einen schnelleren Speicher (SSD) für Speicher- und Datenbankvolumes.
  • Reduzier die gleichzeitige Auslastung des Servers, während PhotoPrism Indizes und Vorschauen erstellt.

Sicherheitshärtung und Betriebskontrollen

Über die TLS-Verschlüsselung hinaus sollten zusätzliche Sicherheitsmaßnahmen zum Schutz einer PhotoPrism-Installation angewendet werden. Der SSH-Zugriff sollte durch eine schlüsselbasierte Authentifizierung eingeschränkt und die Root-Anmeldung über SSH deaktiviert werden. Firewall-Regeln sollten nur die erforderlichen Ports zulassen, in der Regel 80 und 443, während der PhotoPrism-Anwendungsport für das öffentliche Netzwerk unzugänglich bleibt.

Der Betrieb von PhotoPrism hinter Nginx fügt eine wichtige Sicherheitsebene hinzu, aber Schutzmaßnahmen auf Systemebene sind ebenso wichtig.

Halt das Betriebssystem und die Container-Images mit Sicherheitspatches auf dem neuesten Stand. Vermeide es, Anmeldedaten im Klartext außerhalb gesicherter Konfigurationsdateien zu speichern. Überwach die Systemressourcen, einschließlich Festplattennutzung, Speicher und CPU-Auslastung, um die Betriebsstabilität zu gewährleisten. Die Indizierung von Fotos und die Gesichtserkennung können ressourcenintensiv sein, insbesondere bei großen Bibliotheken. Die Festlegung angemessener Ressourcenbeschränkungen und die Überwachung der Nutzung tragen dazu bei, Dienstunterbrechungen zu vermeiden. Diese Vorgehensweisen verbessern sowohl die Sicherheit als auch die langfristige Zuverlässigkeit.

Melde Dich gerne zu unserem Newsletter an



Vielen Dank für Deine Anmeldung zum hosting.de Newsletter!