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
- 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.