Zum Inhalt springen

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 SupabaseAll-in-One
DatenbankIhr bestehendes Supabase-Projekt (Cloud oder self-hosted)wird als Container mitinstalliert
Aufwandminimal — es läuft nur die Appetwas mehr RAM, dafür kein externes Setup
Passt, wennSie schon Supabase nutzenSie 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):

Terminal-Fenster
# Docker + Compose-Plugin
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker "$USER" # danach einmal aus-/einloggen
# Node 20 + git + openssl
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs git openssl
# Kontrolle
docker --version && docker compose version && node --version

Schritt 2 — An der Registry anmelden

Mit den Zugangsdaten aus dem Onboarding (Benutzer teamvis-pull, Passwort = Ihr Pull-Token):

Terminal-Fenster
docker login git.zfx.services

Schritt 3 — Installer-Bundle holen

Das Bundle (Installer, Helfer-Skripte, Datenbank-Schema) ist öffentlich — kein Login nötig:

Terminal-Fenster
git clone https://git.zfx.services/zfx-public/teamvis-selfhost.git
cd teamvis-selfhost

Schritt 4 — Installer ausführen

Terminal-Fenster
bash deploy/selfhost/install.sh

Der Installer fragt der Reihe nach:

  1. Kurzname der Instanz (z. B. kunde) — für Verzeichnis/Compose-Name.
  2. Domain der App (team.ihre-organisation.de).
  3. Image-Version (Vorgabe = aktuelle Version, einfach Enter).
  4. Admin-E-Mail + Name (der erste Backend-Login).
  5. SMTP (optional — leer lassen ist ok; dann landen Login-Mails nur im Log statt im Postfach; später in der .env nachtragbar).
  6. Datenbank-Modus2 für All-in-One (oder 1 für eigene Supabase).
  7. 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.yml und 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

  1. https://team.ihre-organisation.de/admin öffnen → mit Admin-E-Mail + Passwort anmelden (beim ersten Login wird ein neues Passwort gesetzt).
  2. Branding (Logo, Farben, Impressum) im Backend hinterlegen.
  3. Mitarbeiter anlegen (einzeln oder per CSV-Import).
  4. 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.