Lumio / self-hosted
Anleitung

Lumio auf Hetzner Cloud installieren.

Schritt-für-Schritt-Anleitung: vom Server-Bestellen bis zur ersten Galerie. Hetzner ist für DACH-Studios fast immer die richtige Wahl — günstig, schnell, Rechenzentren in Deutschland.

Schritt 1 — Server bestellen

Im Hetzner Cloud Console:

  • Standort: Falkenstein oder Nürnberg (für DSGVO-Wohlbefinden)
  • Image: Ubuntu 22.04 LTS
  • Type: CX22 (4 vCPU / 8 GB / 40 GB) für ~5 €/Monat — reicht für Solo-Studio
  • SSH-Key hinzufügen (lokalen Public-Key hochladen)
  • Firewall: erst mal keine — wir konfigurieren ufw direkt auf dem Server

Schritt 2 — Server absichern

Per SSH einloggen (ssh root@DEINE_IP), dann:

# System aktualisieren
apt update && apt upgrade -y

# Nicht-root User anlegen
adduser lumio
usermod -aG sudo lumio
mkdir -p /home/lumio/.ssh
cp ~/.ssh/authorized_keys /home/lumio/.ssh/
chown -R lumio:lumio /home/lumio/.ssh
chmod 700 /home/lumio/.ssh
chmod 600 /home/lumio/.ssh/authorized_keys

# SSH absichern (Password-Login aus, Root-Login aus)
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd

# Firewall
ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw --force enable

# fail2ban
apt install -y fail2ban
systemctl enable --now fail2ban

Ab jetzt nur noch als lumio-User einloggen.

Schritt 3 — Docker installieren

# Docker-Engine + Compose-Plugin
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Neu einloggen damit die Gruppe greift
exit
ssh lumio@DEINE_IP

# Testen
docker run --rm hello-world

Schritt 4 — DNS einrichten

Bei deinem Domain-Registrar zwei A-Records anlegen — einen für deine Hauptdomain und einen Wildcard für Subdomains (Tenant-Galerien):

fotos.deinstudio.de      A    DEINE_HETZNER_IP
*.fotos.deinstudio.de    A    DEINE_HETZNER_IP

Warte etwa 5–30 Minuten, bis die DNS-Änderung propagiert ist. Test: dig fotos.deinstudio.de.

Schritt 5 — Lumio deployen

cd /opt
sudo mkdir lumio && sudo chown lumio:lumio lumio
cd lumio

git clone https://github.com/markusthiel/lumio.git .
cp .env.example .env

# .env editieren — wichtigste Variablen:
# BASE_DOMAIN=fotos.deinstudio.de
# POSTGRES_PASSWORD=... (sicheres Passwort)
# MINIO_ROOT_PASSWORD=... (sicheres Passwort)
# JWT_SECRET=... (mindestens 64 zufällige Zeichen)
nano .env

# Stack starten
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

# Erster Start dauert 2-3 Minuten, dann:
docker compose ps      # alle services running?
docker compose logs -f # logs follow

Schritt 6 — Admin anlegen und einloggen

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

Studio-Login unter https://fotos.deinstudio.de. Caddy holt sich automatisch ein Let's-Encrypt-Zertifikat — beim ersten Aufruf kann das ein paar Sekunden dauern.

Häufige Fragen zum Hetzner-Setup

Welcher Hetzner-Server reicht für ein Solo-Studio? +

Ein CX22 (4 vCPU, 8 GB RAM, 40 GB NVMe) für etwa 5 €/Monat reicht für ein Solo-Studio mit moderatem Galerie-Volumen. Object Storage buchst du separat — Hetzner Object Storage kostet 5,99 €/Monat für 1 TB. Insgesamt also unter 12 € im Monat, bei eigener Datenhoheit. Für größere Studios oder Video-lastige Workflows eher CX32 oder CCX13 mit dedizierten vCPUs.

Lohnt sich Hetzner gegenüber AWS / GCP für Foto-Galerien? +

Für DACH-Studios fast immer ja. Hetzner ist 5–10× günstiger als AWS/GCP für vergleichbare Spezifikationen, Rechenzentren stehen in Deutschland (Falkenstein, Nürnberg) und Finnland, kein Schrems-II-Drama. AWS/GCP haben Vorteile, wenn man bereits in dem Ökosystem festhängt oder spezifische Managed-Services (Aurora, BigQuery) braucht — beides typischerweise irrelevant für Foto-Galerien.

Wie sichere ich den Server gegen Angriffe ab? +

Drei Punkte minimum: (1) SSH-Login nur per Key, Passwort-Login deaktiviert, fail2ban gegen Brute-Force; (2) ufw-Firewall mit nur den nötigen Ports offen (22, 80, 443); (3) automatische Sicherheits-Updates via unattended-upgrades. Im Lumio-Setup ist alles hinter Caddy, der HTTPS terminiert — direkter Zugriff auf API/Frontend von außen ist nicht nötig.

Was kostet das Setup im laufenden Betrieb wirklich? +

Bei einem typischen Solo-Studio-Setup: CX22 5 €/Monat + 1 TB Object Storage 6 €/Monat + Domain 1 €/Monat = ca. 12 €/Monat. Plus dein Aufwand für Updates und Monitoring (~30 Min/Monat bei gut konfiguriertem Setup). Im Vergleich zu Lumio Cloud Studio (39 €/Monat) sparst du also ~27 €/Monat — gerechnet auf 12 Monate sind das ~300 € jährlich. Ob sich das gegenüber deinem Stundensatz lohnt, ist deine Rechnung.

Wie mache ich Backup der Postgres-Datenbank? +

Einfachste Variante: täglicher pg_dump per Cron, Upload zu einem zweiten Object Storage Bucket (idealerweise bei anderem Provider als der primäre — z.B. primary auf Hetzner, Backup auf Backblaze B2). Komplexere Setups nutzen pgbackrest oder Barman für inkrementelle Backups und Point-in-Time-Recovery. Anleitung mit konkreten Skripten folgt in den Docs.

Bereit zum Loslegen?

Source-Code auf Forgejo, Issues und Diskussionen ebenfalls dort. Wenn etwas in der Anleitung unklar ist, melde dich — wir verbessern die Docs gerne.