Wikibase/Installation/Installation July 2019/fr

Preliminary note about language : this page is written in French because it was initially documented in French.

Also, the warning says the installation works as described in July 2019, but it can become obsolete with the time.

Contexte
Cette installation a été faite dans le cadre du projet NOEMI de la Bibliothèque nationale de France selon un cahier des charges.

La société Wiki Valley a été en charge de l'installation qui s'est déroulée en juillet 2019.

Le but est de faire une installation experte de MediaWiki et Wikibase, sans Docker. L'installation comprend aussi le paramétrage ainsi que des extensions et outils supplémentaires nécessaires au bon fonctionnement de la Wikibase.

Environnement
Interfaces Web
 * http://example-wiki.org (Wikibase)
 * http://example-query.org (Query Service - SPARQL)

Machines utilisées
 * backend-server.example-wiki.org pour la compilation et blazegraph, wikibase.
 * frontend.example-wiki.org pour tous les points d'entrée http, et les applications délivrant du statique : queryService

4 cpu
 * CentOS Linux release 7.6 Core
 * ram 8 Go

Disques
 * / 8 Go
 * /opt : 16 Go

Comptes MediaWiki
 * WikiSysop

Système de base
Installation des pré-requis à MediaWiki (version 1.33)

Configuration de l’environnement
À faire dans chaque session, lorsque nécessaire.

Téléchargement depuis Internet via le proxy :

Compilation de Blazegraph avec Maven :

Exécution de PHP CLI :

MariaDB 10.1
(version alignée sur la version actuelle de Wikimedia - la version CentOS est trop ancienne)

Créer une base de données pour MediaWiki :

Serveur Apache
Créer le fichier /opt/example-conf/httpd-example.conf avec une configuration exécutant le PHP. (ATTENTION : ce fichier se trouve sur backend-server.example-wiki.org)

Lancer Apache : en tant qu’utilisateur apache

Lancer un navigateur sur http://backend-server.example-wiki.org:8082/

Java
Attention : l’export est nécessaire dans chaque session [nécessitant Java].

Composer (librairies PHP)
Suivre la procédure sur https://getcomposer.org/download/ pour utiliser la dernière version, en remplaçant l’étape de téléchargement (en PHP dans la procédure) par wget pour bien utiliser le proxy.

MediaWiki 1.33 + Wikibase + WikibaseQualityConstraints + OAuth
Installation de MediaWiki 1.33 avec Git. Voir aussi Installation Guide.

(Le SERVER_NAME ne sert à rien, juste à retirer un warning.)

Noter que la commande d’installation de MediaWiki avait initialement planté car SQLite (non-utile pour nous) était dans la version 3.7 alors que 3.8 était nécessaire si on veut fonctionner avec ce moteur. Il faut soit supprimer SQLite de la machine, soit ajouter une ligne  dans le fichier includes/installer/SqliteInstaller.php, classe SqliteInstaller, à la fin de la fonction checkPrerequisites.

La commande install.php crée le fichier LocalSettings.php (voir la manuel complet LocalSettings.php sur le site MediaWiki).

Éditer le fichier LocalSettings.php et ajouter :

Dans le LocalSettings.php
 * modifier le paramètre

Mettre à jour la base de données :

Exécution des jobs en arrière-plan
Ce mode d'exécution des jobs est préférable à l'exécution des jobs via le processus web afin de ne pas surcharger celle-ci.

WikibaseQualityConstraints
Configurer le proxy en modifiant /opt/mediawiki/extensions/WikibaseQualityConstraints/maintenance/ImportConstraintEntities.php

{{Code|lang=diff|code= diff --git a/maintenance/ImportConstraintEntities.php b/maintenance/ImportConstraintEntities.php index 8af9dec..da9314c 100644 --- a/maintenance/ImportConstraintEntities.php +++ b/maintenance/ImportConstraintEntities.php @@ -130,8 +130,16 @@ class ImportConstraintEntities extends Maintenance { * @return string local entity ID        */ private function importEntityFromWikidata( $wikidataEntityId ) { + +              $paramsContext = [ +                      'http' => [ +                              'proxy' => 'tcp://proxy.example.org:8080', +                      ], +               ]; +               $context = stream_context_create( $paramsContext ); +               $wikidataEntityUrl = "https://www.wikidata.org/wiki/Special:EntityData/$wikidataEntityId.json"; -              $wikidataEntitiesJson = file_get_contents( $wikidataEntityUrl ); +              $wikidataEntitiesJson = file_get_contents( $wikidataEntityUrl, false, $context ); return $this->importEntityFromJson( $wikidataEntityId, $wikidataEntitiesJson ); }

}}

Lancer le script de téléchargement des contraintes depuis Wikidata :

Copier-coller le résultat dans le fichier LocalSettings.php de MediaWiki (celui-ci correspond aux propriétés locales des contraintes, les valeurs par défaut étant les numéros de Wikidata).

Query Service + Blazegraph
L'outil de requête SPARQL Query Service est basé sur Blazegraph. Voir aussi la documentation sur Wikidata Query Service/Implementation.

Installation de la version spécifique de Maven
Attention : l’export est nécessaire dans chaque session [nécessitant Maven].

Compilation de Blazegraph + outils Wikibase
Si besoin, changer les versions de node et/ou npm dans gui/pom.xml.

Déploiement du frontend statique Query Service
La personnalisation pour communiquer avec la Wikibase et changer l'apparence se fait en créant le fichier custom-config.json (qui remplace default-config.json)

Installer Elasticsearch 6.5.4
Installer la version 6.5.4 car il faut que les plugins Wikimedia soient déjà compilés pour la version spécifique de Elasticsearch, voir https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rpm.html#rpm-repo. La version d'Elasticsearch doit être alignée avec les plugins Elasticsearch spécifiques à Wikimedia, voir la dernière version sur https://search.maven.org/search?q=g:org.wikimedia.search.highlighter.

Note 1 : les plugins "extra" et "experimental-highlighter" sont obligatoires dans le sens que leur absence rend la recherche non-fonctionnelle.

Note 2 : il est aussi possible d'installer directement sans téléchargement local, mais il faut configurer correctement le proxy :
 * /usr/share/elasticsearch/bin/elasticsearch-plugin install org.wikimedia.search.highlighter:experimental-highlighter-elasticsearch-plugin:6.5.4

Créer les index Elasticsearch pour MediaWiki
Documentation sur https://phabricator.wikimedia.org/source/extension-cirrussearch/browse/master/README

Exécuter :

Dans le LocalSettings.php, retirer :

Exécuter :

Tester une recherche sur une chaîne de caractères existante et une autre sur une (a priori) non-existante. Tester une recherche haswbstatement sur un couple (propriété, valeur) existant, par exemple "haswbstatement:P1=Q1" puis un couple non-existant. Voir aussi la documentation sur haswbstatement et sur les autres fonctions de recherche de Elasticsearch.

Parsoid + Exemples du Query Service
Dans le Query Service, pour avoir la fonctionnalité d'affichage des exemples provenant de la page http://example-wiki.org/Project:Exemples_SPARQL, il faut installer Parsoid.

Sur frontend.example-wiki.org, créer une règle redirigeant http://example-wiki.org/example-wiki.org/ vers http://backend-server.example-wiki.org:8142/example-wiki.org/

Sur le wiki, créer le modèle Template:SPARQL avec le contenu suivant :

Sur le wiki, créer la page Project:Exemples_SPARQL avec le contenu suivant :

{{Code|lang=text|header=|code=

Item et label en français
}}

Les nouveaux exemples s'ajoutent en ajoutant une section

{{Code|lang=text|header=|code=

...titre de l'exemple...
}}

Lancement de Parsoid
Démarrage

Statut

ps -ef | grep parsoid| grep -v grep

Arrêt: Tuer le process ci-dessus

QuickStatements + OAuth
Voir la documentation utilisateur sur https://www.wikidata.org/wiki/Help:QuickStatements. Noter que cet outil est une surcouche à api.php de MediaWiki/Wikibase.

Configurer un consumer OAuth
OAuth est un service d'authentification pour pouvoir éditer la Wikibase depuis une application externe (sert ici pour QuickStatements mais peut être utiliser pour d'autres outils).


 * Se connecter avec un compte administrateur
 * Aller dans ses préférences et authentifier son adresse mail
 * Ouvrir la page spéciale "Inscription de consommateur OAuth" Special:OAuthConsumerRegistration
 * Cliquer sur "Demander un jeton pour un nouveau consommateur."
 * Nom de l’application : QuickStatements
 * Version du consommateur : 1.0
 * Description de l'application : Outil de modification en masse d’items Wikibase.
 * Réserver l’utilisation de ce consommateur à UTILISATEUR. : ne pas cocher
 * URl « de rappel » pour OAuth : http://example-wiki.org/quickstatements/api.php
 * Permettre au consommateur de spécifier un rappel dans les requêtes et utiliser l’URL « rappel » ci-dessus comme préfixe obligatoire. : cocher
 * Adresse de courriel de contact : laisser sa propre adresse mail
 * Projet applicable : Tous les projets sur ce site
 * Types de déclarations publiques demandées: Autorisation de requêtes pour des droits spécifiques
 * Droits applicables : Droits de base ; Modification de gros volumes ; Modifier des pages existantes ; Créer, modifier et déplacer des pages ; Importer de nouveaux fichiers ; Téléverser, remplacer et renommer des fichiers
 * Plages IP autorisées : laisser "0.0.0.0/0" "::/0"
 * Clé RSA publique (facultatif) : ne rien entrer
 * En soumettant cette application, vous reconnaissez que nous nous réservons le droit de la… : cocher
 * Copier le "jeton de consommateur" et le "jeton secret" et le réserver pour la section QuickStatements
 * Aller sur la page spéciale "Gérer les consommateurs OAuth" Special:OAuthManageConsumers
 * File des requêtes de consommateur proposés [1]
 * revoir/gérer
 * Mettre un motif et approuver
 * Vérifier sur la page spéciale "Lister les applications OAuth" Special:OAuthListConsumers que l’application est approuvée

Installation de QuickStatements
Inspiré du Dockerfile et autres fichiers dans le dossier.


 * Attention :* QuickStatements, en l'état actuel du code, est assez spécifique à Wikidata. La doc suivante modifie très peu le code, mais en conséquence un certain nombre de paramètres sont fixés (adresse DNS du serveur MySQL, nom des bases MySQL).

Attention : dans config.json, il n’est pas possible de remplacer mwOAuthUrl par une URL jolie sans index.php, c’est le bug https://phabricator.wikimedia.org/T59500 (Impossible to use https://www.mediawiki.org/wiki/Special:OAuth/initiate?format=&oauth_callback= style URL).

Le serveur web pour QuickStatements est (actuellement) indépendant du serveur web du wiki et écoute sur le port 8084.

Et adapter pour servir QuickStatements.


 * Aller sur http://example-wiki.org/quickstatements/
 * Vérifier que la page s’affiche (noter qu’il y a des appels à https://tools-static.wmflabs.org et https://upload.wikimedia.org, les bloqueurs de pubs peuvent bloquer ces domaines et la page reste alors blanche)
 * Cliquer sur "Se connecter" en haut à droite
 * On est redirigé vers MediaWiki, cliquer sur Autoriser
 * On est redirigé vers Quick Statements, vérifier qu’on est connecté avec son pseudo
 * Créer un nouveau lot avec comme contenu : (NB: il y a des tabulations dans ce code)


 * Cliquer sur "Importer des commandes dans le format V1" puis exécuter (pas en arrière-plan)
 * Aller sur les modifications récentes du wiki, il devrait y avoir le nouvel item (on pourra le supprimer)

Installation de QuickStatements (exécution des jobs en arrière-plan)
sha1sum # copier la valeur aléatoire rendue, ça servira de mot de passe mysql > CREATE USER qs@localhost IDENTIFIED BY 'VALEUR_ALÉATOIRE'; > CRATE DATABASE qs__quickstatements_p; > GRANT ALL PRIVILEGES ON qs__quickstatements_p.* TO qs@localhost; > CREATE DATABASE qs__quickstatements_auth; > GRANT ALL PRIVILEGES ON qs__quickstatements_auth.* TO qs@localhost; > QUIT mysql qs__quickstatements_p < schema.sql mysql qs__quickstatements_auth < schema.sql mkdir -p /data/project/apache


 * Ajouter dans /etc/hosts la ligne "127.0.0.1  tools.labsdb" (obligatoire car le nom du serveur n'est pas configurable)
 * Sur le site de Quick Statements, cliquer sur le pseudo, il doit être affiché un token (qui est généré lors de l’affichage de cette page, il est possible qu’on ait droit à des messages d’erreur si ce token n’a pas été généré)
 * Cliquer sur 'Vos derniers lots', il doit être affiché 'Pas de lots.'
 * Ensuite, créer un nouveau lot avec comme contenu : (NB: il y a des tabulations dans ce code)


 * Cliquer sur "Importer des commandes dans le format V1" puis "exécuter en arrière-plan"
 * Aller sur le serveur en ligne de commande dans le dossier /opt/quickstatements et exécuter  (ne pas arrêter ce script pour l’instant, passer à l’étape suivante)
 * Aller sur les modifications récentes du wiki, il devrait y avoir le nouvel item (on pourra le supprimer)
 * On peut arrêter l’exécution de
 * Sur QuickStatements, cliquer sur "Dernier lots", notre lot exécuté en arrière-plan doit apparaître
 * Mettre en place un cron pour lancer périodiquement cette commande

Configuration http des points d'entrée
Toutes les adresses publiques sont traitées sur frontend.example-wiki.org via une url applicatives.

On donne ici comment les urls sont redirigées ou traitées en direct par le serveur httpd s'il n'y a que des statiques servir.

Modifier la longueur maximale des champs label/description
Par défaut, ce paramètre de la longueur maximale des champs label/description est à 250 caractères. Ces valeurs sont stockées dans la base de données MySQL (table wb_terms, colonnes term_text et term_search_key) qui sont limitées par défaut à 255 octets (le texte est codé en UTF-8), ce qui peut dans certains cas annuler partiellement la vérification sur la contrainte d'unicité langue+label+description.

Pour augmenter à 350 caractères, éditer le fichier de configuration de MediaWiki /opt/mediawiki/LocalSettings.php

Modifier également le schéma de la base de données MySQL (pour éviter d'affaiblir la contrainte d'unicité, il faut paramétrer une longueur 4 fois supérieure au nombre de caractères max (ici 350 x 4 = 1400). (Une meilleure prise en compte serait d'utiliser le type MySQL utf8mb4, mais on s'exposerait possiblement à des problèmes.)

Noter :
 * si le nombre d'octets UTF-8 nécessaires pour stoker une chaîne dépasse la limite maximale de la base de données, la chaîne est tronquée mais acceptée ; cela n'a donc pas d'autre conséquence que d'affaiblir la contrainte d'unicité des labels/description
 * en cas d'augmentation de la taille de ce champ dans la base de données, les valeurs existantes en BDD ne sont pas mises à jour automatiquement
 * les labels sont enregistrés et affichés au même titre que les autres informations sur l'élément (dans un JSON dans la table text), indépendamment de la table wb_terms

Comptes bots / robots
Créer un compte
 * Créer un compte normal
 * Donner le statut "robot" au compte MediaWiki :
 * En tant qu'admin du wiki, aller sur la page http://example-wiki.org/wiki/Special:Userrights,
 * Entrer le nom du compte,
 * Sélectionner "robot",
 * Enregistrer
 * Attribuer un profil pour utilisation avec l'API :
 * Se connecter avec le compte du robot
 * Aller sur la page http://example-wiki.org/wiki/Special:BotPasswords,
 * Entrer un nom de profil (un même compte peut avoir différents profils avec des limitations différentes)
 * Sélectionner les permissions attribuées (possiblement toutes)
 * Enregistrer
 * Sauvegarder le mot de passe donné de la forme nom-du-profil@mot-de-passe