ahnifyInstallation & Betrieb
Selbst gehostet

Aufsetzen, aktualisieren, absichern.

ahnify läuft als einzelner Docker-Container gegen eine eigene, extern betriebene MariaDB — kein Cloud-Zwang, keine Mehr-Container-Choreografie. Diese Seite zeigt den kompletten Betriebs-Ablauf von der Ersteinrichtung bis zum Update. Die feldgenaue Referenz (alle Flags, alle Env-Variablen) steht wie immer in README.md im Projekt-Repository.

Lieber nicht selbst administrieren? Docker, Reverse-Proxy und Updates lassen sich auch abgeben — siehe "Nicht selbst hosten wollen?" auf der Feature-Übersicht.
01 · Bevor es losgeht

Voraussetzungen

Bewusste Entscheidung: Kein db-Service im mitgelieferten Compose-File. Ein Container-Update rührt so nie an den Daten — Schema-Änderungen laufen kontrolliert über Migrationen (s. Abschnitt 03), nicht über einen Container-Neustart der Datenbank selbst.
02 · Erstinstallation

Ersteinrichtung

Ein Bootstrap-Lauf mit dem fertig gebauten Image erledigt Datenbankschema, Stammdaten und Konfigurationsdatei in einem Rutsch — kein manuelles SQL nötig.

  1. Bootstrap-Container starten. Fragt interaktiv die DB-Zugangsdaten ab, spielt Schema + Stammdaten ein, generiert JWT_SECRET/SETTINGS_ENCRYPTION_KEY und schreibt .env — optional auch gleich eine docker-compose.yml (Port/Image/Zeitzone) — direkt in den gemounteten Ordner:
    docker run --rm -it -v $(pwd):/out i_ahnify:latest python backend/setup.py
  2. Container starten.
    docker compose up -d
  3. Startseite im Browser öffnen. Dort erscheint automatisch die Web-Ersteinrichtung für den ersten Admin-Account — kein weiterer docker exec-Schritt nötig.
Sicherheitsnetz: setup.py spielt Schema/Stammdaten nur in eine leere Datenbank — enthält sie bereits Tabellen, bricht es ab, statt versehentlich Bestandsdaten zu überschreiben. Für ein bewusstes Zurücksetzen (z. B. Testsystem) existiert ein explizites --force-Flag.
03 · Laufender Betrieb

Update

Ein neues Image einspielen und neu starten — Schema-Änderungen wendet der Container beim Hochfahren selbständig an, kein separater Migrationsschritt von Hand.

docker compose build (oder: neues Image aus der Registry ziehen) ↓ docker compose up -d ↓ Container-Start: backend/migrate.py (automatisch, VOR uvicorn) ↓ liest sql/migrations/*.sql, ueberspringt bereits angewendete Dateien sys_schema_migrations (protokolliert je Datei genau einen Lauf) ↓ uvicorn startet
backend/.env geändert? env_file wird von Docker Compose nur beim Erstellen des Containers gelesen, nicht bei jedem Start — ein einfaches docker restart reicht dann nicht:
docker compose up -d --force-recreate
04 · Vor jedem Update empfohlen

Backup

backend/backup.py sichert den kompletten Datenbank-Inhalt (als SQL-Dump) sowie die Uploads und das Branding in ein einzelnes Zip-Archiv — bewusst ohne backend/.env, da Secrets nicht in ein Backup-Artefakt gehören, das ggf. weitergegeben oder extern gelagert wird. Läuft per docker exec (schreibt nach /data/backups) oder auf dem Host mit lokalem Python und denselben Backend-Abhängigkeiten wie die App selbst:

docker exec -it c_ahnify python backend/backup.py

Rücksicherung ist bewusst kein Ein-Klick-Automatismus, aber dokumentiert: jedes Archiv enthält eine RESTORE.txt mit den konkreten Schritten (DB per mysql … < db.sql zurückspielen, Dateien an ihren Platz kopieren, Container neu erstellen).

05 · Bestandsdaten

Datenübernahme

Bestehende Daten lassen sich auf mehreren Wegen einbringen: über GEDCOM 5.5.1 (Standardformat, z. B. aus Gramps, MacFamilyTree oder Ancestry) oder über das eigene JSON-Schema — beides mit Review vor dem Übernehmen, siehe Dokumentation. Für eine Migration direkt auf SQL-Ebene aus einem bestimmten Quellschema (TNG, The Next Generation of Genealogy Sitebuilding) liegt zusätzlich migrate_tng.py bereits im Image:

docker exec -it c_ahnify python backend/migrate_tng.py --dry-run   # nur Analyse
docker exec -it c_ahnify python backend/migrate_tng.py             # echte Migration

Dokument-Metadaten wandern dabei mit, verknüpft mit Personen/ Familien — die Mediendateien selbst müssen manuell nach data/uploads kopiert werden (Originalname, flach). Ein doc_files-Schritt verknüpft sie per SHA256-Hash mit den DB-Zeilen; läuft automatisch am Ende jedes vollständigen Laufs mit, oder gezielt wiederholbar, falls die Dateien erst danach kopiert wurden:

docker exec -it c_ahnify python backend/migrate_tng.py --step doc_files

--skip-user überspringt den mitgelieferten Bootstrap-Admin (created_by bleibt NULL), falls der echte Account schon über die Web-Ersteinrichtung existiert.

06 · Alternative

Ohne setup.py

Für alle, die lieber jeden Schritt selbst in der Hand halten: manuelles Anlegen funktioniert unverändert, ist aber nicht mehr der empfohlene Weg.