Lumio / self-hosted
Anleitung

Lumio auf dem Raspberry Pi installieren.

Der Pi ist ein charmantes, sparsames Self-Host-Ziel für ein Solo-Studio. Der Stack ist derselbe wie überall (arm64) — mit ein paar Pi-Eigenheiten bei Speicher, Tempo und Erreichbarkeit.

Passt dein Pi?

  • Raspberry Pi 5 mit 8 GB (besser 16 GB) empfohlen; Pi 4 mit 8 GB geht, ist aber langsamer
  • 64-Bit-OS — Raspberry Pi OS (64-bit) oder Ubuntu für arm64; 32-Bit wird nicht unterstützt
  • Von SSD booten (USB-SSD oder NVMe-HAT), nicht von SD-Karte
  • Docker ≥ 24 mit Compose v2
  • Reine Fotos ab 4 GB RAM knapp — 8 GB+ ist der komfortable Startpunkt; KI-Tagging auf dem Pi weglassen

Leistung & Grenzen — ehrlich

  • Erster Build dauert — die Images werden auf dem Pi selbst gebaut; plane Zeit und genug freien RAM ein.
  • Video-Transcoding ist zäh (CPU-x264). Für ein Foto-Studio prima, für viel Video ein x86-Server.
  • Kein GPU-Tagging auf ARM — KI-Tagging nur auf CPU, auf dem Pi am besten aus.
  • SD-Karten sind der Feind — langsam und verschleißend. SSD ist Pflicht für ein ernstes Setup.

Schritt 1 — Pi vorbereiten

64-Bit-OS auf eine SSD flashen und davon booten. Dann System und Docker einrichten:

# 64-bit prüfen (sollte aarch64 zeigen)
uname -m

# System aktualisieren
sudo apt update && sudo apt upgrade -y

# Docker-Engine + Compose-Plugin
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# neu einloggen, dann testen:
docker run --rm hello-world

Schritt 2 — Lumio holen & konfigurieren

sudo mkdir -p /opt/lumio && sudo chown $USER:$USER /opt/lumio
cd /opt/lumio
git clone https://github.com/markusthiel/lumio.git .
cp .env.example .env

# Secrets erzeugen
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=')|" .env
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
sed -i "s|^SESSION_SECRET=.*|SESSION_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
sed -i "s|^S3_ACCESS_KEY=.*|S3_ACCESS_KEY=$(openssl rand -hex 12)|" .env
sed -i "s|^S3_SECRET_KEY=.*|S3_SECRET_KEY=$(openssl rand -base64 32 | tr -d '/+=')|" .env

DEPLOYMENT_MODE=single ist der Default. Domain/TLS wie im nächsten Schritt.

Schritt 3 — Erreichbarkeit & TLS

Zuhause hängt der Pi meist hinter CGNAT — dann führt der Weg über einen Tunnel (Cloudflare Tunnel, Tailscale Funnel). TLS macht der Tunnel, Caddy läuft nur auf einem HTTP-Port. Das ist exakt Fall B aus dem on-premise-Guide:

LUMIO_HOST=fotos.deinstudio.de
LUMIO_S3_HOST=s3.deinstudio.de
PUBLIC_URL=https://fotos.deinstudio.de
S3_PUBLIC_URL=https://s3.deinstudio.de
CADDY_HTTP_PORT=8080     # Tunnel zeigt hierauf

Hast du zuhause eine öffentliche IP und kannst 80/443 weiterleiten, holt Caddy das Zertifikat selbst — dann reichen LUMIO_HOST + PUBLIC_URL + S3_PUBLIC_URL (Fall A).

Schritt 4 — Starten & Admin anlegen

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker compose logs -f    # erster Build braucht auf dem Pi Geduld

docker compose exec api npm run create-admin \
  -- --email=du@deinstudio.de --password=mind12zeichen

Login unter https://fotos.deinstudio.de. Fertig, wenn Galerie anlegen, Bild hochladen, teilen und von einem anderen Gerät öffnen durchläuft.

Häufige Fragen zum Raspberry Pi

Welcher Raspberry Pi eignet sich? +

Empfehlung ist der Raspberry Pi 5 mit 8 GB (besser 16 GB) RAM. Der Pi 4 (bis 8 GB) läuft auch, ist aber spürbar langsamer, vor allem beim Transcoding. Wichtig: ein 64-Bit-Betriebssystem (Raspberry Pi OS 64-bit oder Ubuntu für arm64) — die 32-Bit-Variante wird nicht unterstützt. Modelle mit 4 GB sind für ein reines Foto-Studio grenzwertig und für Video zu klein.

Kann ich von der SD-Karte booten? +

Technisch ja, in der Praxis nein. SD-Karten sind langsam und verschleißen unter Datenbank- und Bildlast schnell. Boote von einer USB-SSD (der Pi 5 kann auch NVMe per HAT) — das ist der größte einzelne Performance- und Zuverlässigkeitsgewinn. Die Bilddaten sollten ebenfalls auf SSD oder einem NAS-Mount liegen, nicht auf der SD-Karte.

Wie schnell ist Video-Transcoding auf dem Pi? +

Langsam. Transcoding läuft auf der CPU (x264), und GPU-Beschleunigung für Auto-Tagging gibt es auf ARM nicht. Ein Foto-Studio läuft gut; wer viel Video proofen will, ist auf einem x86-Server deutlich besser bedient. Das ML-Auto-Tagging solltest du auf dem Pi weglassen.

Muss der Pi aus dem Internet erreichbar sein? +

Für den Versand von Galerie-Links an Kunden: ja. Zuhause hängt der Pi meist hinter CGNAT oder einem Router ohne Portfreigabe — dann ist ein Tunnel (Cloudflare Tunnel, Tailscale Funnel) der einfachste Weg. Das Vorgehen ist identisch zum on-premise-Guide, Fall B: TLS terminiert der Tunnel, Lumios Caddy läuft nur auf einem HTTP-Port.

Reicht ein Pi für ein echtes Studio? +

Für ein Solo-Foto-Studio mit moderatem Volumen: ja, ein Pi 5 mit SSD und 8–16 GB macht das ordentlich. Für Video-lastige Workflows, viele gleichzeitige Kunden-Downloads oder KI-Tagging ist ein kleiner x86-Server (oder ein günstiger VPS) die bessere Wahl. Der Pi ist ideal zum Ausprobieren und für kleine, ruhige Setups.

Bereit für deine eigene Galerie?

Source-Code auf GitHub, Fragen und Diskussionen ebenfalls dort. Wenn in der Anleitung etwas hakt, melde dich — wir verbessern die Docs gerne.