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.
docker-compose.yml als external referenziert,
also vorher einmalig per docker network create angelegt)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.
Ein Bootstrap-Lauf mit dem fertig gebauten Image erledigt Datenbankschema, Stammdaten und Konfigurationsdatei in einem Rutsch — kein manuelles SQL nötig.
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
docker compose up -d
docker exec-Schritt nötig.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.
Ein neues Image einspielen und neu starten — Schema-Änderungen wendet der Container beim Hochfahren selbständig an, kein separater Migrationsschritt von Hand.
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
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).
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.
setup.pyFür alle, die lieber jeden Schritt selbst in der Hand halten: manuelles Anlegen funktioniert unverändert, ist aber nicht mehr der empfohlene Weg.
cp backend/.env.example backend/.env und Werte von Hand eintragenmysql -u root -p origin < sql/schema.sql gefolgt von < sql/seed.sqldocker exec -it c_ahnify python backend/create_user.py --email … --role admin
(fragt interaktiv nach dem Passwort, bewusst kein --password-Flag in der Shell-History)