Gramps Web
Gramps Web est un logiciel de généalogie basé sur Gramps et interopérable avec celui-ci.
Son installation est normalement basée sur Docker mais comme j’ai horreur de cette technologie, j’ai décidé de l’installer à la main.
Gramps et Gramps Web utilisent normalement des bases SQLite mais on peut leur faire utiliser des bases PostgreSQL. Cependant, lorsque j’ai tenté ceci, Gramps n’a pas utilisé une base dédiée mais a créé des tables… je ne sais pas très bien où. Bref, cela ne m’a pas l’air très propre (et ce n’est pas grave si on utilise Docker, j’en conviens) et je ne voulais pas pourrir mon serveur PostgreSQL, donc SQLite ira très bien.
Attention, petit bug avec les gestionnaires de mot de passe
Si vous n’arrivez pas à vous connecter alors que votre gestionnaire de mot de passe remplit bien les champs, c’est à cause de ce bug. Il suffit de modifier l’entrée à la main (un caractère dans chaque champ, et on l’efface) et ça fonctionne.
Dépendances
apt install gramps graphviz gir1.2-gexiv2-0.10 gir1.2-osmgpsmap-1.0 python3-icu python3-virtualenv
Sur votre machine
Installez gramps
, lancez et créez un arbre familial.
Comme nom, j’ai utilisé mon nom de famille, pour ce tutoriel, considérons qu’il s’agit de Foobar
.
Le lancement de gramps et la création de l’arbre familial ont créé un dossier dans ~/.gramps/
.
Copiez ce dossier sur votre serveur web :
scp -r ~/.gramps votre_serveur:
Création de dossiers divers
mv ~votre_user_de_connexion/.gramps/ ~www-data/
mkdir -p /var/www/gramps/config \
/var/www/gramps/static \
/var/www/gramps/db \
/var/www/gramps/media \
/var/www/gramps/indexdir \
/var/www/gramps/users \
/var/www/gramps/thumbnail_cache \
/var/www/gramps/cache \
/var/www/gramps/cache/reports \
/var/www/gramps/cache/export \
/var/www/gramps/tmp \
/var/www/gramps/persist \
/var/www/gramps/secret
touch /var/www/gramps/static/index.html
chown -R www-data: /var/www/gramps/ /var/www/.gramps/
Installation d’un virtualenv
sudo -u www-data -s /bin/bash
Puis, en tant que www-data
cd ~/gramps
virtualenv venv
. ./venv/bin/activate
pip install gunicorn gramps-webapi
if [ ! -s /var/www/gramps/secret/secret ]; then
python3 -c "import secrets;print(secrets.token_urlsafe(32))" | tr -d "\n" > /var/www/gramps/secret/secret
fi
GRAMPSWEB_SECRET_KEY=$(cat /var/www/gramps/secret/secret)
cat <<EOF >config/config.cfg
TREE="Foobar"
DISABLE_AUTH=False
SECRET_KEY="$GRAMPSWEB_SECRET_KEY"
MEDIA_BASE_DIR="/var/www/gramps/media"
SEARCH_INDEX_DIR="/var/www/gramps/indexdir"
STATIC_PATH="/var/www/gramps/static"
BASE_URL="https://gramps.example.org"
EMAIL_HOST="127.0.0.1"
EMAIL_PORT="25"
EMAIL_USE_TLS=False
DEFAULT_FROM_EMAIL="no-reply+gramps@example.org"
THUMBNAIL_CACHE_CONFIG__CACHE_DIR="/var/www/gramps/thumbnail_cache"
USER_DB_URI="sqlite:////var/www/gramps/users/users.sqlite"
REPORT_DIR="/var/www/gramps/cache/reports"
EXPORT_DIR="/var/www/gramps/cache/export"
EOF
export PYTHONPATH="/var/www/gramps/venv/lib/python3.11/site-packages:/usr/lib/python3/dist-packages"
if [ -z "$(ls -A /var/www/gramps/indexdir)" ]; then
python3 -m gramps_webapi --config /var/www/gramps/config/config.cfg search index-full
fi
wget https://github.com/gramps-project/gramps-webapi/archive/refs/tags/v1.4.0.tar.gz \
https://github.com/gramps-project/Gramps.js/releases/download/v23.11.0/grampsjs-v23.11.0.tar.gz
tar xvf v1.4.0.tar.gz
ln -s gramps-webapi-1.4.0/ gramps-webapi
cd gramps-webapi
python3 -m gramps_webapi --config /var/www/gramps/config/config.cfg user migrate
tar xvf grampsjs-v23.11.0.tar.gz
ln -s grampsjs-v23.11.0 grampsjs
rm v1.4.0.tar.gz grampsjs-v23.11.0.tar.gz
exit
Nginx
Voici la configuration Nginx que j’utilise, tirée de https://github.com/gramps-project/Gramps.js/blob/main/default.conf.template, à mettre dans /etc/nginx/sites-available/gramps.example.org
.
server {
listen 80;
listen [::]:80;
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name gramps.example.org;
ssl_certificate /etc/letsencrypt/live/gramps.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gramps.example.org/privkey.pem;
access_log /var/log/nginx/gramps.example.org.access.log;
error_log /var/log/nginx/gramps.example.org.error.log;
index index.html;
root /var/www/gramps/grampsjs;
location / {
try_files $uri $uri/ $uri.html /index.html;
}
location /api {
add_header "Access-Control-Allow-Origin" $http_origin;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:5000;
}
}
Puis :
ln -s ../sites-available/gramps.example.org /etc/nginx/sites-enabled
nginx -t && nginx -s reload
Systemd
Voici le service systemd que j’utilise, à mettre dans /etc/systemd/system/gramps-webapi.service
:
[Unit]
Description=Shortened URLs service
Requires=network.target postgresql.service
After=network.target postgresql.service
[Service]
User=www-data
EnvironmentFile=/etc/default/gramps-webapi
WorkingDirectory=/var/www/gramps
ExecStart=/var/www/gramps/venv/bin/gunicorn -w $GUNICORN_NUM_WORKERS -b 127.0.0.1:5000 gramps_webapi.wsgi:app --timeout 120 --limit-request-line 8190
SyslogIdentifier=gramps-webapi
Restart=always
[Install]
WantedBy=multi-user.target
Et dans /etc/default/gramps-webapi
:
GRAMPS_API_CONFIG=/var/www/gramps/config/config.cfg
PYTHONPATH="/var/www/gramps/venv/lib/python3.11/site-packages:/usr/lib/python3/dist-packages"
GUNICORN_NUM_WORKERS=2
Créez les fichiers puis :
systemctl daemon-reload
systemctl enable --now gramps-webapi
Première connexion
Connectez-vous à votre serveur, créez l’utilisateur administrateur et normalement, c’est tout bon !
Pas de commentaires