Movies-docker est un outil en charge de constituer une base de connaissance historique et centralisée sur les établissements de l'ESR et leurs activités en lien avec le doctorat et la documentation électronique. Cet outil est destiné à un usage interne de l'Abes.
Ce dépôt contient la configuration docker 🐳 pour déployer l'application movies en local sur le poste d'un développeur, ou bien sur les serveurs de test et prod.
Les URLs correspondantes aux déploiements en local, test et prod de movies sont les suivantes :
- local :
- http://lap-TRI.levant.abes.fr : homepage de movies
- test :
- https://movies-test.abes.fr : homepage de movies
- prod
- https://movies.abes.fr : homepage de movies
Disposer de :
docker
docker-compose
Déployer la configuration docker dans un répertoire :
# adaptez /opt/pod/ avec l'emplacement où vous souhaitez déployer l'application
cd /opt/pod/
git clone https://github.com/abes-esr/movies-docker.git
Configurer l'application depuis l'exemple du fichier .env-dist
(ce fichier contient la liste des variables) :
cd /opt/pod/movies-docker/
cp .env-dist .env
# personnaliser alors le contenu du .env : indiquer les mots de passe et : le prefix de l'url (MOVIES_WIKIBASE_SCHEME), l'url publique (MOVIES_WIKIBASE_URL_PUBLIQUE), et le port du reverse proxy (MOVIES_RP_PORT).
Note : les mots de passe ne sont pas présent dans le fichier au moment de la copie. Vous devez aller les renseigner manuellement en éditant le fichier dans la console avec nano par exemple
Avant de démarrer l'application, assurez-vous que les fichiers suivants aient les bonnes permissions :
wikibase/LocalSettings.php
wikibase/img/favicon.ico
wikibase/img/wikibase_logo.png
Pour ce faire, exécutez la commande suivante :
cd /opt/pod/movies-docker/
chmod 777 -R wikibase
chmod 644 wikibase/LocalSettings.php
Démarrer l'application :
cd /opt/pod/movies-docker/
docker-compose up -d
# en test, utiliser le profile test qui permet de synchroniser une fois par mois les données de prod vers le test :
docker compose --profile test up -d
# pour démarrer l'application (ou pour appliquer des modifications
# faites dans /opt/pod/movies-docker/.env)
cd /opt/pod/movies-docker/
docker-compose up -d
# en test, utiliser le profile test qui permet de synchroniser une fois par mois les données de prod vers le test :
docker compose --profile test up -d
Remarque : retirer le -d
pour voir passer les logs dans le terminal et utiliser alors CTRL+C pour stopper l'application
cd /opt/pod/movies-docker/
# pour stopper l'application
docker-compose stop
# pour redémarrer l'application
docker-compose restart
# pour supprimer les données :
docker-compose down -v
#en test, utiliser le profile test, sinon le conteneur ``movies-copy-backup`` ne sera pas supprimé :
docker compose --profile test down -v
#Et supprimer les volumes (si ok pour les droits), sinon faire un mv :
rm -fr volumes
#ou (si pas les droits) :
mv volumes volumesASUPPRIMER
cd /opt/pod/movies-docker/
docker compose --profile initializer up -d
ou
docker compose run --rm movies-initializer
# pour visualiser les logs de l'appli
cd /opt/pod/movies-docker/
docker-compose logs -f --tail=100
Cela va afficher les 100 dernière lignes de logs générées par l'application et toutes les suivantes jusqu'au CTRL+C qui stoppera l'affichage temps réel des logs.
Pour configurer l'application, vous devez créer et personnaliser un fichier /opt/pod/movies-docker/.env
(cf section Installation). Les paramètres à placer dans ce fichier .env
sont indiqués dans le fichier .env-dist
Pour ajouter, modifier, supprimer des comptes LDAP autorités à se connecter au Wikibase Movies, il faut modifier la variable d'environnement (présente dans le fichier .env) : MOVIES_WIKIBASE_LDAP_MAILS
Il faut ensuite utiliser la commande suivante pour recharger les variables d'environnement du conteneur Wikibase Movies : docker compose up -d movies-wikibase
Pour ajuster l'allocation de ressources pour les conteneurs (par exemple, mémoire, CPU), vous pouvez définir la valeur des variables d'environnement suivantes dans votre fichier .env
:
MOVIES_MEM_LIMIT
: Mémoire allouée au conteneur movies (par exemple: "512m" pour 512 Mo), valeur par défaut "5g".MOVIES_MEMSWAP_LIMIT
: Quantité totale de mémoire et de swap que le conteneur est autorisé à utiliser. Si vous définissez cette valeur à 0, cela signifie que le swap est désactivé pour le conteneur.MOVIES_CPU_LIMIT
: CPU alloué au conteneur movies (par exemple: "0.5" pour allouer 50% d'un CPU), valeur par défaut "5".
Ces valeurs ne sont que des exemples. Ajustez-les selon vos besoins et les ressources disponibles sur votre machine ou votre serveur.
Les objectifs des déploiements continus de movies sont les suivants (cf poldev) :
- git push sur la branche
develop
provoque un déploiement automatique sur le serveurdiplotaxis5-dev
- git push (le plus couramment merge) sur la branche
main
provoque un déploiement automatique sur le serveurdiplotaxis5-test
- git tag X.X.X (associé à une release) sur la branche
main
permet un déploiement (non automatique) sur le serveurdiplotaxis5-prod
Movies est déployé automatiquement en utilisant l'outil WatchTower. Pour permettre ce déploiement automatique avec WatchTower, il suffit de positionner à false
la variable suivante dans le fichier /opt/pod/movies-docker/.env
:
MOVIES_WATCHTOWER_RUN_ONCE=false
Le fonctionnement de watchtower est de surveiller régulièrement l'éventuelle présence d'une nouvelle image docker de movies-wikibase
, si oui, de récupérer l'image en question, de stopper le ou les les vieux conteneurs et de créer le ou les conteneurs correspondants en réutilisant les mêmes paramètres ceux des vieux conteneurs. Pour le développeur, il lui suffit de faire un git commit+push par exemple sur la branche develop
d'attendre que la github action build et publie l'image, puis que watchtower prenne la main pour que la modification soit disponible sur l'environnement cible, par exemple la machine diplotaxis5-dev
.
Le fait de passer MOVIES_WATCHTOWER_RUN_ONCE
à false va faire en sorte d'exécuter périodiquement watchtower. Par défaut cette variable est à true
car ce n'est pas utile voir cela peut générer du bruit dans le cas d'un déploiement sur un PC en local.
Les éléments suivants sont à sauvegarder:
/opt/pod/movies-docker/.env
: contient la configuration spécifique de notre déploiement/opt/pod/movies-docker/movies_data
: contient les dumps quotidiens de la base de données maria-db de movies
/!\ A noter : le répertoire /opt/pod/movies-docker/movies_data
est un montage NFS entre la machine de test et celle de production.
Il permet une synchronisation, par le conteneur movies-copy-backup
, des données de production vers l'environnement de test, à interval régulier.
Ces chemins sont à exclure des sauvegardes :
/opt/pod/movies-docker/volumes/
: car il contient les données binaires du mysql et du triple store, du wikibase de MOVIES
Réinstaller l'application movies depuis la procédure d'installation ci-dessus et récupérer depuis les sauvegardes le fichier .env
et le placer dans /opt/pod/movies-docker/.env
sur la machine qui doit faire repartir movies.
Restaurer ensuite le dernier dump de la base de données MariaDB de movies :
Pour cela, se connecter au conteneur movies-db-dumper
et copier le fichier de dump voulu : les dumps se trouvent dans /backup/(test|prod)/
Par exemple, récupération d'un fichier dump de la prod, mis à disposition pour l'environnement de test :
sudo docker exec -it movies-db-dumper sh
cp /backup/prod/mysql_my_wiki_movies-wikibase-mysql_20250725-005904.sql.gz /backup/test/
Ensuite, lancer la restauration avec movies-db-dumper :
sudo docker exec -it movies-db-dumper restore
Répondre aux questions comme ceci :
What Database Type are you looking to restore?
F ) Parsed Filename Type: 'mysql'
What Hostname do you wish to restore to:
E ) Environment Variable DB01_HOST: 'movies-wikibase-mysql'
What Database Name do you want to restore to?
C ) Custom Entered Database Name
my_wiki
What database user will be used for restore:
E ) Environment Variable DB01_USER: 'sqluser'
What Database Password will be used to restore?
E ) Environment Variable DB01_PASS
What Database Port do you wish to use? MySQL/MariaDB typcially listens on port 3306. Postrgresql port 5432. MongoDB 27017
D ) Default Port for Database type 'mysql': '3306'
La base de données MariaDB du Wikibase est alors bien chargée.
Par contre, il faut aussi recharger le WDQS (triple store du Wikibase) :
Depuis l'url https://movies(-test).abes.fr/sparql, on peut utiliser les requêtes SPARQL suivantes :
Afficher les données relatives à un item en particulier :
#Attention à modifier l'url exemple (-test) selon l'environnement :
SELECT * WHERE {
?item ?p ?o .
FILTER(?item = <https://movies(-test).abes.fr/entity/Q4379>)
}
Tester que le triple store contient bien des données :
SELECT * WHERE {
?s ?p ?o.
}
LIMIT 10
Il faut supprimer le fichier des données du WDQS pour le réinitialiser, puis rejouer l'indexation :
sudo docker exec movies-wikibase-wdqs sh -c 'rm -f data/data.jnl'
sudo docker restart movies-wikibase-wdqs
Remplacer partout, dans la commande ci-dessous, https://movies-test.abes.fr par https://movies.abes.fr si on recharge la base de production :
sudo docker exec movies-wikibase-wdqs bash -c '/wdqs/runUpdate.sh -h http://movies-wikibase-wdqs.svc:9999 -- --wikibaseUrl https://movies-test.abes.fr --conceptUri https://movies-test.abes.fr --entityNamespaces 120,122 -s 20200501000000' | tee logfile | awk '1;/Got no real changes/{exit}'
Le triple store est bien synchronisé avec les données de MariaDB.
Pour récupérer et démarrer la dernière version de l'application vous pouvez le faire manuellement comme ceci :
docker-compose pull
docker-compose up
Le pull
aura pour effet de télécharger l'éventuelle dernière images docker disponible pour la version glissante en cours (ex: develop
ou main
). Sans le pull c'est la dernière image téléchargée qui sera utilisée.
Ou bien lancer le conteneur movies-watchtower
qui le fera automatiquement toutes les quelques secondes pour vous.
/!\ Attention comme le conteneur wikibase utilise un volume pour ses fichiers (shared = /var/www/html), il n'est pas possible d'ajouter des extensions en modifiant son image (movies-wikibase) sur une installation existante et d'utiliser le système docker up / watchtower. /!\ Dans ce cas, il faut exécuter les commandes ajoutées au Dockerfile de movies-wikibase dans le conteneur wikibase existant, pour ajouter des extensions.
Pour modifier le fichier de configuration du Wikibase, en test ou prod :
vi wikibase/LocalSettings.php
docker compose up movies-wikibase movies-wikibase-jobrunner -d
Si le wikibase renvoie "Bad Gateway", relancer le reverse-proxy :
docker stop movies-rp
docker start movies-rp
(lien pour modifier le schéma - droits requis)
Les codes de source de movies sont ici :
- https://github.com/abes-esr/movies-api : requêtes SPARQL pour Grlc
- https://github.com/abes-esr/movies-wikibase : conteneur wikibase avec plugin LDAP
- https://github.com/abes-esr/movies-documentation : documentation Docusaurus
- https://github.com/abes-esr/movies-copy-backup : conteneur qui synchronise les données d'un env de prod vers un autre env (test par exemple)