Self-Hosting
TeamVis lässt sich vollständig auf eigener Infrastruktur betreiben — auf einem Server im eigenen Rechenzentrum oder bei einem Hoster Ihrer Wahl. Alle Daten (Mitarbeiter, Fotos, Protokolle) bleiben damit unter Ihrer Kontrolle. Das ist besonders für Kommunen und Versorger relevant, die Datensouveränität und DSGVO-Konformität sicherstellen müssen.
Diese Anleitung führt von einer frischen Linux-VM bis zur laufenden Instanz.
Zwei Betriebsarten
Beim Einrichten wählen Sie, woher die Datenbank kommt:
| Eigene Supabase | All-in-One | |
|---|---|---|
| Datenbank | Ihr bestehendes Supabase-Projekt (Cloud oder self-hosted) | wird als Container mitinstalliert |
| Aufwand | minimal — es läuft nur die App | etwas mehr RAM, dafür kein externes Setup |
| Passt, wenn | Sie schon Supabase nutzen | Sie nur „eine VM” haben und alles auf einmal wollen |
Beide laufen aus demselben Container-Image — kein eigener Build pro Kunde, keine Code-Anpassung. Die folgende Anleitung beschreibt die All-in-One-Variante (der Komplettfall); für „eigene Supabase” wählen Sie beim Installer einfach den anderen Modus.
Voraussetzungen
- Eine Linux-VM (Ubuntu 22.04+/Debian 12+), für All-in-One ca. 2 GB RAM, ~10 GB Disk, root- bzw. sudo-Zugang.
- Eine Domain (z. B.
team.ihre-organisation.de) mit DNS-A-Record auf die öffentliche IP der VM. Das TLS-Zertifikat holt sich der mitgelieferte Webserver (Caddy) automatisch. - Eingehende Ports 80 und 443 offen.
- Docker auf der VM.
- Zugang vom TeamVis-Team: ein Image-Pull-Token für die Registry. Damit ziehen Sie das Container-Image; das Installer-Bundle ist öffentlich. Den Quellcode benötigen Sie nicht — die App kommt als fertiges Image.
Schritt 1 — Grundpakete installieren
Auf der frischen VM (als root oder mit sudo):
# Docker + Compose-Plugincurl -fsSL https://get.docker.com | shsudo usermod -aG docker "$USER" # danach einmal aus-/einloggen
# Node 20 + git + opensslcurl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -sudo apt-get install -y nodejs git openssl
# Kontrolledocker --version && docker compose version && node --versionSchritt 2 — An der Registry anmelden
Mit den Zugangsdaten aus dem Onboarding (Benutzer teamvis-pull, Passwort = Ihr
Pull-Token):
docker login git.zfx.servicesSchritt 3 — Installer-Bundle holen
Das Bundle (Installer, Helfer-Skripte, Datenbank-Schema) ist öffentlich — kein Login nötig:
git clone https://git.zfx.services/zfx-public/teamvis-selfhost.gitcd teamvis-selfhostSchritt 4 — Installer ausführen
bash deploy/selfhost/install.shDer Installer fragt der Reihe nach:
- Kurzname der Instanz (z. B.
kunde) — für Verzeichnis/Compose-Name. - Domain der App (
team.ihre-organisation.de). - Image-Version (Vorgabe = aktuelle Version, einfach Enter).
- Admin-E-Mail + Name (der erste Backend-Login).
- SMTP (optional — leer lassen ist ok; dann landen Login-Mails nur im
Log statt im Postfach; später in der
.envnachtragbar). - Datenbank-Modus →
2für All-in-One (oder1für eigene Supabase). - Zum Schluss das Admin-Passwort.
Danach läuft alles automatisch (siehe nächster Abschnitt). Nach wenigen Minuten ist die Instanz erreichbar.
Was der Installer automatisch erledigt
- erzeugt alle Schlüssel/Secrets (Datenbank-Passwort, Session-Secret, API-Keys),
- schreibt
.env,docker-compose.ymlund die Webserver-Konfiguration, - startet (im All-in-One-Modus) Datenbank + Storage + App + Webserver,
- spielt das vollständige Datenbank-Schema ein,
- legt den ersten Administrator an.
Schritt 5 — Erster Login & Einrichtung
https://team.ihre-organisation.de/adminöffnen → mit Admin-E-Mail + Passwort anmelden (beim ersten Login wird ein neues Passwort gesetzt).- Branding (Logo, Farben, Impressum) im Backend hinterlegen.
- Mitarbeiter anlegen (einzeln oder per CSV-Import).
- Funktionen freischalten — eine frische Instanz startet bewusst nur mit den Visitenkarten; weitere Module aktivieren Sie nach Bedarf gestaffelt.
Abnahme-Check
- Öffentliche Karte
…/<name>lädt ohne Login. - vCard-Download
…/api/vcard/<name>liefert eine.vcf. - Foto-Upload im Backend erscheint auf der Karte.
- (mit SMTP) Self-Service-Portal verschickt einen Login-Code.
Betrieb
Beim Self-Hosting liegt der laufende Betrieb bei Ihnen:
- Backups der Datenbank und des Foto-Speichers (beim Cloud-Supabase übernimmt das Ihr Anbieter).
- Updates: neue Version = Image-Tag aktualisieren, bei Schema-Änderungen
vorher die mitgelieferte Migration einspielen, dann
docker compose pull && up -d. - Erreichbarkeit von Domain und Server.
Datenschutz
Self-Hosting heißt: personenbezogene Daten verlassen Ihre Infrastruktur nicht (außer optionalem Mailversand). Welche Daten TeamVis verarbeitet und welche Verträge nötig sind, steht unter DSGVO & AVV.
Self-Hosting gewünscht? Wir stellen Image-Zugang und das Installations-Bundle bereit und begleiten die Erstinstallation. Sprechen Sie uns an.