L’architecture d’hydra est complexe : serveur de base de données PostgreSQL, plugin intégré à QGIS, chacun avec de multiples dépendances (gdal, gmsh, postgis, plpython). Historiquement, la procédure d’installation tenait sur une dizaine de pages et spécifiait comment installer et paramétrer chacun des composants et chacun des dépendances. Ensuite, nous avons développé un installeur qui nécessitait de saisir des emplacements de QGIS et PostgreSQL sur le disque ainsi que les paramètres de connexion à PostgreSQL. Ces deux solutions se sont chacunes avérées peu satisfaisantes :

  • La première car l’utilisateur ne souhaite pas s’investir dans une procédure d’installation longue et complexe
  • La seconde car à trop chercher à s’adapter à chaque environnement, le code et les sources de l’installeur deviennent complexes et difficiles à maintenir

De plus, le haut niveau de complexité de l’architecture finale fait que le résultat de ces deux solutions reste incertain, et des bugs sont régulièrement remontés, entrainant une charge de travail pour le support.

Ainsi, il a été décidé de retravailler en profondeur l’architecture des différents composants et la façon de les distribuer afin de simplifier l’installation de notre solution.

Objectif

Le but recherché est de simplifier au maximum la procédure d’installation, de se rapprocher au maximum d’une installation en un clic, afin de rendre hydra accessible au plus grand nombre.

Travail effectué

Pour ce faire, Les deux installations sont dans un premier temps traitées séparément

Le serveur PostgreSQL

La solution retenue est d’installer un serveur PostgreSQL tout-en-un, en déployant un répertoire c:\Program Files\Hydra comprenant:

  • GMSH, l’exécutable utilisé pour le maillage (https://gmsh.info/)
  • EDB language pack, comprenant l’installation de plpython utilisée par les bases projets. Les éléments de edb/plpython le nécessitant sont déja patchés / réparés (https://www.enterprisedb.com/docs/epas/latest/language_pack/)
  • Un répertoire PostgreSQL contenant toute l’installation d’un service dédié à hydra:
    • Fichiers .bat pour la création du service associé et le paramétrage pour démarrage automatique / compte système local (nécessaires au bon fonctionnement des bases projet)
    • Ce service est situé sur le port 5454 afin d’éviter les conflits avec un éventuel serveur PostgreSQL préalablement installé
    • Il y a un utilisateur (user: hydra, mot de passe: hydra) pré-paramétré
  • Les variables d’environnement nécessaires dans l’environnement du service (chemins pour python, gmsh, gdal) sont déclarés dans un fichier .BAT avant de démarrer le service, et donc ne s’appliquent qu’à l’instance de service PostgreSQL hydra, pas à tout le système. On évite ainsi les conflits avec une autre installation de python par exemple

Le plugin hydra – QGIS

Afin de simplifier les échanges plugin / serveur, on modifie le plugin pour passer toutes les connexions au serveur par un fichier de service contenant les informations de connexion standardisées suivantes :

[hydra]
host=127.0.0.1
port=5454
user=hydra
password=hydra

La seule dépendance empêchant le plugin de démarrer est la librairie rtree de python, qui doit être installée coté QGIS. On avait donc mis en place la recherche de cette librairie au démarrage d’hydra, et si on ne pouvait pas l’importer, on la réinstallait via pip. Cette solution historique est bancale, donc on bascule sur une solution plus simple et non invasive vis-à-vis du système de l’utilisateur : rtree version 9.7.0 est embarqué dans le répertoire du plugin au moment du packaging dans la chaine d’intégration continue, et on importe les éléments requis de rtree en remplaçant l’utilisation d’un bloc try / except par un simplefrom hydra import rtree qui est beaucoup plus stable.

Couplage

Afin que les échanges QGIS hydra / Serveur PostgreSQL dédié se passent bien, l’installeur met également en place les fichiers de configuration nécessaires. Le fichier de service associé est créé / mis à jour dans le répertoire utilisateur.

On a également prévu, si QGIS3 est installé, de modifier le fichier QGIS.ini afin de pré-renseigner le dépot du plugin hydra. Ainsi, l’utilisateur n’aura plus qu’a démarrer QGIS et installer le plugin via le gestionnaire d’extensions.

Enfin, pour les besoins de transferts des projets existants, s’il existe déja une installation d’hydra, le plugin va écrire les paramètres de connection à cet ancien service dans le fichier de service PostgreSQL (service nommé hydra_legacy) afin de permettre de se reconnecter au besoin à cet ancien service pour en exporter certains projets et les réimporter ensuite dans le nouveau serveur de bases de données.

Guide d’installation

Procédure

Au final, la nouvelle procédure d’installation est décrite ci après :

Points particuliers dans le cas d’une montée en version d’hydra

Schéma de l’architecture des différents serveurs

image

Fichiers projet (.qgs)

Ces fichiers sont à refaire : il faut les supprimer dans le répertoire projet (/.hydra/nom_du_proojet) avant d’ouvrir le projet. Cela est nécessaire afin de modifier les paramètres de connexion aux tables de données pour passer sur le standard fichier de service.

Transfert des projets existants

Afin de transférer les projets depuis l’ancien serveur vers le nouveau serveur PostgreSQL13-hydra, il suffit de choisir le service « hydra_legacy » dans les settings, exporter l’ensemble des projets sous forme de fichiers .sql dans le gestionnaire de projets, puis changer le service dans les settings vers « hydra », et réimporter ces fichiers.

PgAdmin

Pour utiliser PgAdmin, il faut paramétrer la connexion à ce nouveau serveur PostgreSQL.

Utilisation du plugin seul

Le nouveau plugin associé permet quand même de se connecter à l’ancien service PostgreSQL (via la sélection du service « hydra_legacy ») et ne requiert pas le nouveau service pour être utilisé.

Le plugin seul est disponible au lien suivant : https://hydra-software.net/telechargement/hydra.zip. Il est cependant recommandé de paramétrer un dépot d’extension QGIS avec l’URL https://hydra-software.net/telechargement/hydra.xml afin de pouvoir procéder aux mises à jour du plugin en un clic.