Das Genealogieprogramm Gramps
Das Genealogieprogramm namens Gramps hat viele Funktionen, aber eine Funktion, die es nicht hat, ist kollaboratives Arbeiten. Dafür gibt es aber inzwischen das Projekt Gramps Web. hier läuft das Programm nicht auf einem Computer und man muss mit USB-Sticks oder sonst was manuell die Datensätze synchron halten. Das ist zumindest das Versprechen von Gramps Web und ich habe mir gedacht, dass ich mir das einmal anschaue, insbesondere da das Schlossmuseum Freistadt eine solche Lösung gut gebrauchen könnte.
Gramps Web in DNS Eintragen
Als ersten Schritt muss man auf der Seite des jeweiligen Domain-Anbieters eine (Sub-)Domain für das Projekt anlegen. In diesem Fall ist es einfach eine Subdomain, denn dann braucht es nicht noch eine extra Adresse für dieses Projekt.
Die Einstellung sieht üblicherweise so aus, hängt aber vom jeweiligen Anbieter ab (die “x.x.x.x” sollen durch die richtige IP-Adresse des Servers, wo Gramps Web installiert wird, ersetzt werden):
Auf VPS installieren
Anleitung für die Dockerinstallation
Zuerst erstelle ich einen Ordner unter /opt
mit mkdir /opt/gramps-web
. Dort hinein kommt die docker-compose.yml Datei und die dazugehörigen Ordner.
Das ist die originale docker-compose.yml Datei:
version: "3.7"
services:
grampsweb: &grampsweb
image: ghcr.io/gramps-project/grampsweb:latest
restart: always
ports:
- "80:5000" # host:docker
environment:
GRAMPSWEB_TREE: "Gramps Web" # will create a new tree if not exists
GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1
depends_on:
- grampsweb_redis
volumes:
- gramps_users:/app/users # persist user database
- gramps_index:/app/indexdir # persist search index
- gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails
- gramps_cache:/app/cache # persist export and report caches
- gramps_secret:/app/secret # persist flask secret
- gramps_db:/root/.gramps/grampsdb # persist Gramps database
- gramps_media:/app/media # persist media files
- gramps_tmp:/tmp
grampsweb_celery:
<<: *grampsweb # YAML merge key copying the entire grampsweb service config
ports: []
container_name: grampsweb_celery
depends_on:
- grampsweb_redis
command: celery -A gramps_webapi.celery worker --loglevel=INFO
grampsweb_redis:
image: redis:alpine
container_name: grampsweb_redis
restart: always
volumes:
gramps_users:
gramps_index:
gramps_thumb_cache:
gramps_cache:
gramps_secret:
gramps_db:
gramps_media:
gramps_tmp:
Für diesen Zweck möchte ich jedoch ein paar Änderungen. Ich habe die gramps-Daten lieber direkt unter /opt
, und ich möchte auch gleich einen Reverse Proxy mit Caddy verwenden. Daher schaut die finale docker-compose.yml so aus:
version: "3.7"
services:
grampsweb:
image: ghcr.io/gramps-project/grampsweb:latest
restart: always
environment:
GRAMPSWEB_TREE: "Stammbaum"
GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
GRAMPSWEB_RATELIMIT_STORAGE_URI: "redis://grampsweb_redis:6379/1"
depends_on:
- grampsweb_redis
volumes:
- ./gramps_users:/app/users
- ./gramps_index:/app/indexdir
- ./gramps_thumb_cache:/app/thumbnail_cache
- ./gramps_cache:/app/cache
- ./gramps_secret:/app/secret
- ./gramps_db:/root/.gramps/grampsdb
- ./gramps_media:/app/media
- ./gramps_tmp:/tmp
- ./app/config/config.cfg:/app/config/config.cfg
grampsweb_celery:
image: ghcr.io/gramps-project/grampsweb:latest
restart: always
environment:
GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
depends_on:
- grampsweb_redis
volumes:
- ./gramps_users:/app/users
- ./gramps_index:/app/indexdir
- ./gramps_thumb_cache:/app/thumbnail_cache
- ./gramps_cache:/app/cache
- ./gramps_secret:/app/secret
- ./gramps_db:/root/.gramps/grampsdb
- ./gramps_media:/app/media
- ./gramps_tmp:/tmp
- ./app/config/config.cfg:/app/config/config.cfg
command: celery -A gramps_webapi.celery worker --loglevel=INFO
container_name: grampsweb_celery
grampsweb_redis:
image: redis:alpine
container_name: grampsweb_redis
restart: always
caddy:
image: caddy:2-alpine
restart: always
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
depends_on:
- grampsweb
volumes:
caddy_data:
caddy_config:
Vor dem Starten des Containers noch zur Sicherheit alle Ordner hinzufügen, das geht mit diesem Befehl:
mkdir -p ./gramps_users
mkdir -p ./gramps_index
mkdir -p ./gramps_thumb_cache
mkdir -p ./gramps_cache
mkdir -p ./gramps_secret
mkdir -p ./gramps_db
mkdir -p ./gramps_media
mkdir -p ./gramps_tmp
mkdir -p ./app/config
touch ./app/config/config.cfg
Die config.cfg
braucht dann noch ein paar Einträge die hier angeschnitten werden, denn bei mir hat es sonst nicht funktioniert. Ich habe die folgenden Einträge zur Konfigdatei hinzugefügt:
TREE="*"
BASE_URL="https://gramps.mywebsite.com"
SECRET_KEY="xxx" # your secret key
Den Secret-Key kann man mit diesem Befehl im Terminal erzeugen…
python3 -c "import secrets;print(secrets.token_urlsafe(32))"
… und dann gut aufheben (in einem Passwortmanager zum Beispiel).
Anschließend muss man noch das sog. Caddyfile
erstellen mit folgenden Inhalt:
gramps.mywebsite.com {
reverse_proxy grampsweb:5000
}
Jetzt kann man mit docker compose up -d
alles starten, und gegebenenfalls mit docker ps
nachsehen, ob alles läuft. Das kann je nach Internetanbindung und Hardware etwas dauern.
Als nächstes muss man einen Administratoraccount erstellen und schon wird man von der Weboberfläche begrüßt:
Datenbank für’s Hochladen vorbereiten Nr. 1: Datenbank reparieren und überprüfen
Die Anleitung für den Datenimport findet man hier. Zuerst soll man die bestehende Datenbank auf Inkonsistenzen überprüfen unter “Tools” → “Family Tree Repair” → “Check and Repair Database…“. Das kann eine gewisse Zeit dauern.
Nr. 2: Absolute Pfade in Relative umwandeln
Der zweite Streich, das Umwandeln der absoluten in relative Pfade geht so
(“Tools” → “Utilities” → “Media Manager”):
Hier klickt man auf “Next” und wählt anschließend “Convert paths from absolute to relative” aus:
Und “Apply” klicken:
Auch wenn bei dieser Datenbank eh keine Pfade zu konvertieren sind.
Nr. 3: Backup im Format .gramps erstellen
Nun kann die Datenbank sicher exportiert werden. Dazu klickt man auf “Family Trees” → “Make Backup…” wählt den Namen und Speicherort aus und…
… klickt auf OK.
Datenbank auf Gramps Web hochladen
Jetzt kann man auf die Website mit Gramps Web gehen und dort zuerst auf “Einstellungen” klicken…
… dann auf “Verwaltung”:
Dort kann man bei “Stammbaum importieren” die exportierte Datei auswählen…
… und auf “Importieren” klicken:
Das kann wiederum eine Zeit dauern. Sobald der Importvorgang vollendet wurde, ist Gramps Web bevölkert:
Ersteinrichtung fertig
Damit ist die Gramps Web Datenbank hochgeladen und es kann direkt im Browser, ähnlich wie in der Desktop-Variante, gearbeitet werden. Wenn man jedoch lieber mit dem Programm arbeitet, gibt es noch ein weitere Möglichkeit Browserversion mit dem des eigenen Rechners zu verknüpfen.
Gramps Web Sync auf dem Rechner installieren
Um das Addon “Gramps Web Sync” zu installieren klickt man auf das grüne Puzzle-Symbol namens “Addon Manager”:
… und tippt ins Suchfeld “gramps web” und schon wird das Addon angezeigt:
Auf “Install” klicken und ist das Addon wird installiert.
Gramps Desktop mit der Gramps Web verbinden
klickt man auf “Tools” → “Family Tree Processing” und dann auf “Gramps Web Sync…“. Dann klickt man auf “Proceed with the tool”…
… und klickt auf “next”…
… im nächsten Fenster füllt man die Websiten-Infos ein:
Dann beginnt der Vergleich der lokalen Daten mit denen auf dem Server (der zu diesem Zeitpunkt komplett leer ist):
Das wiederum kann recht lange dauern, wenn der Vorgang aber abgeschlossen ist, dann sieht man die jeweiligen Unterschiede zwischen den Datensätzen:
Etwas eigenartig ist nur, dass der hochgeladene Datensatz ja direkt aus dem lokalen heraus exportiert und hochgeladen wurde und keine Änderungen vorgenommen wurden.
Offene Punkte
Ich habe es auf Anhieb nicht geschafft, dass ich andere Benutzer mit Zugriffsrechten auf den Stammbaum einrichten konnte. Möglicherweise muss ich einen Benutzer neu anlegen, oder sonst noch etwas probieren. Aber das ist leider noch ein offener Punkt, den ich noch beheben werde.