Ce dépôt permet de déployer automatiquement et facilement GeoNature, UsersHub dans un environnement dockerisé et accessible en HTTPS.
De plus, ce dépôt fournit une image Docker de GeoNature contenant les modules suivants :
- Occtax
- Occhab
- Validation
- Monitoring
- Dashboard
- Export
1. GeoNature clé en main
Un fichier de configuration et une commande suffisent à déployer et mettre à jour facilement un environnement GeoNature dockerisé, fonctionnel et complet (GeoNature et ses principaux modules)
2. Modulaire et adaptable
Doit permettre à chacun d'adapter le projet pour ses besoins spécifiques et son infrastructure.
3. Limiter la complexité globale
Le projet ne doit pas inclure de fonctionnalités trop spécifiques à un contexte. L'ajout de fonctionnalités (paramètres, makefile...) ne doit pas se substituer à une maitrise de Docker, GeoNature ou d'administration système.
-
Installation de Docker (Voir la documentation)
-
Ajout de votre utilisateur courant au groupe
docker- Ajouter votre utilisateur courant dans le groupe docker :
sudo usermod -aG docker $USER - Réouvrir sa session Linux pour appliquer les changements
- Plus d'infos sur la documentation officielle
- Ajouter votre utilisateur courant dans le groupe docker :
-
Installation de
gitsudo apt-get install git
-
Clonage du dépôt de GeoNature-Docker-services :
git clone https://github.com/PnX-SI/GeoNature-Docker-servicesou extraire une archive -
Déplacement dans le répertoire du dépôt :
cd GeoNature-Docker-services -
Création du fichier
.envà partir du fichier d’exemple :cp .env.sample .env. -
Changement des variables de configurations obligatoires dans le fichier
.env. Les variables obligatoires sont les suivantes :GEONATURE_DB_LOCAL_SRID: Code des projections des géométries stockées dans GeoNature (par défaut 2154)POSTGRES_PASSWORD: Mot de passe de la base de données PostgreSQLTRAEFIK_PASSWORD: Mot de passe de l'instance TraefikDOCKER_UIDetDOCKER_GID: Indique l'utilisateur utilisé par les conteneurs. Utiliser la commandeid -upour récupérer la valeur pourDOCKER_UIDetid -gpour récupérer la valeur pourDOCKER_GIDACME_EMAIL: Adresse mail utilisée pour la génération du certificat SSL par Let's Encrypt via traefik
-
Initialisation des fichiers de configurations. Lancer la commande
./init-config.shafin de créer les dossiers et les fichiers de configuration requis. Le scriptinit-config.shgénère aléatoirement aussi les clés secrètes pour GeoNature et UsersHub respectivement dans les fichiers suivants :config/geonature/geonature_config.tomlconfig/usershub/config.py
-
Lancer la création des conteneurs Docker :
docker compose up -d
Les logs de tous les services sont accessibles avec la commande docker compose logs -f.
Pour n'afficher que les 100 dernières lignes, on utilise l'option --tail 100 et donc la commande docker compose logs -f --tail 100.
Pour n'afficher les logs que d'un service en particulier, on utilise la commande docker compose logs -f <nom du service>.
postgres: la base de donnéesusershub: la gestion des utilisateursgeonature-backend: l’API de GeoNaturegeonature-frontend: l’interface web de GeoNaturegeonature-worker: exécution de certaines tâches de GeoNature en arrière-plan (import, export, mail, etc...)redis: service de communication entre le worker et le backendtraefik: serveur web redirigeant les requêtes vers le bon service
SERVICE PORTS
geonature-backend 8000/tcp
geonature-frontend 80/tcp
geonature-worker 8000/tcp
postgres 0.0.0.0:5435->5432/tcp, :::5435->5432/tcp
redis 6379/tcp
traefik 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:80->80/tcp, [::]:443->443/tcp
usershub 5001/tcp
Il est possible de déployer la stack GeoNature de plusieurs manières différentes. La configuration par défaut est pensée pour être autosuffisante, toutefois, dans le cas où vous voulez connecter cette stack à des outils déjà existant dans votre SI, plusieurs scénarios sont possibles.
Si vous voulez utiliser votre propre Reverse Proxy (Nginx, Traefik ...), il est possible de déployer GeoNature sans Traefik.
Les configurations spécifiques à Traefik ont été déportées dans le fichier compose docker-compose.traefik.yml. Si on veut s'en passer, il faut modifier la variable COMPOSE_FILE du .env
pour qu'elle n'utilise que le fichier docker-compose.essential.yml : COMPOSE_FILE=docker-compose.essential.yml.
Prenez soin de renseigner les variables d'environnement spécifiques à une utilisation hors Traefik (signalées par la mention "If you don't use traefik").
Si vous préférez stocker les données dans un SGBD externe, vous devrez enlever le profil db de la variable
d'environnement COMPOSE_PROFILES. Il faudra ensuite renseigner les informations de connexion à votre base de données
dans le .env (voir POSTGRES_HOST, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD).
[!INFO] Si vous voulez que les mises à jour de la base de données soient effectuées à chaque lancement de la stack Docker, ajouter le profil
install-dbdansCOMPOSE_PROFILES.
Si pour d'autres besoins, vous disposez déjà d'un service UsersHub, vous devrez enlever le profil usershub de la variable
d'environnement COMPOSE_PROFILES.
Voir la documentation des différentes applications pour renseigner les fichiers de configuration :
- GeoNature :
./config/geonature/geonature_config.toml(fichier d’exemple) - UsersHub :
./config/usershub/config.py(fichier d’exemple)
Ces fichiers doivent contenir a minima le paramètre SECRET_KEY.
Vous pouvez générer automatiquement des fichiers vierges contenant des clés secrètes aléatoires avec le script ./init-config.sh.
Si vous modifiez les fichiers de configuration de GeoNature, d'un de ses modules, de UsersHub, vous devez relancer les conteneurs Docker avec la commande docker compose restart (ou idéalement seulement le conteneur concerné, par exemple docker compose restart usershub).
À noter que certaines variables seront fournies en tant que variables d'environnement (voir les fichiers .env et docker-compose.yml), comme par exemple :
URL_APPLICATIONSQLALCHEMY_DATABASE_URI- ...
Vous pouvez personnaliser la politique de redémarrage automatique des services en paramétrant la variable RESTART_POLICY du fichier .env (valeur par défaut: unless-stopped)
Il est aussi possible de personnaliser son installation en créant un fichier d'override de docker compose. Pour le détail de fonctionnement, voir la section Surcharger son installation.
- Les fichiers de configuration de GeoNature, de ses modules et de UsersHub sont donc dans le dossier
GeoNature-Docker-services/config/ - Les fichiers de customisation de GeoNature sont stockés dans le dossier
GeoNature-Docker-services/data/geonature/custom/ - Les fichiers des médias de GeoNature (photos, application mobile...) sont stockés dans le dossier
GeoNature-Docker-services/data/geonature/media/
Les applications peuvent être configurées par des variables d’environnement préfixées respectivement par GEONATURE_ et USERSHUB_ (voir from_prefix_env).
Ces variables d’environnement doivent être renseignées directement dans le fichier docker-compose.yml, bien que certaines variables sont définies à partir d’une variable du même nom en provenance du fichier .env.
Pour récupérer la dernière version de GeoNature-docker-services :
- Vérifiez si la dernière version disponible correspond aux versions des applications que vous souhaitez mettre à jour
- Placez vous dans le dossier
GeoNature-Docker-servicesde votre serveur - Mettez à jour le contenu du dossier dans sa dernière version :
git fetch && git checkout <numéro de version> - Pour télécharger les nouvelles images et relancer la stack, il suffit de lancer la commande suivante :
docker compose pull && docker compose up -d --remove-orphans
Warning
La variable SKIP_POPULATE_DB doit être à false pour appliquer les modifications de base de données provenant de la nouvelle version.
Note
Avec chaque release de GeoNature-docker-services, la version de l'image GeoNature est systématiquement modifiée dans le fichier docker-compose.essential.yml.
Note
Pour fixer la version de GeoNature, vous pouvez modifier les variables GEONATURE_BACKEND_EXTRA_IMAGE, GEONATURE_FRONTEND_EXTRA_IMAGE, et de UsersHub dans USERSHUB_IMAGE dans votre fichier .env. Par exemple, pour utiliser la version 2.15.3, effectuez les modifications suivantes :
USERSHUB_IMAGE="ghcr.io/pnx-si/usershub:2.4.4"
[...]
GEONATURE_BACKEND_EXTRA_IMAGE="ghcr.io/pnx-si/geonature-backend-extra:2.15.3"
[...]
GEONATURE_FRONTEND_EXTRA_IMAGE="ghcr.io/pnx-si/geonature-frontend-extra:2.15.3"- Déposer le dossier contenant la configuration du protocole dans
data/geonature/media/monitorings/. Par exemple :cp -r protocole_suivi/chiro data/geonature/media/monitorings/chiro
- Lancer l'installation du sous-module avec la commande :
docker compose exec geonature-backend geonature monitorings install <nom_sous_module>
Si vous souhaitez modifier le sous-module, faites le directement dans les fichiers du dossier du sous-module dans data/geonature/media/monitorings/.
Pour des actions plus avancées, vous pouvez vous attacher au Docker avec la commande docker compose exec geonature-backend bash et
suivre la documentation du module Monitoring
En fonction de l'environnement dans lequel vous déployez, il est possible que vous soyez amené à vouloir modifier le
fichier docker-compose.yml afin de personnaliser le comportement de GDS. Afin de pouvoir mettre à jour votre repo, il
est fortement conseillé de passer par un fichier d'override (voir documentation docker compose sur les overrides).
Pour cela, vous pouvez créer un docker compose qui contient les modifications que vous souhaitez apporter à la stack et l'ajouter à votre variable d'environnement
COMPOSE_FILE (voir documentation docker)
Plusieurs exemples de surcharge sont disponibles dans le dossier override_gallery. Ce dossier contient des fichiers compose.yml testés
pour une version précise de GDS et permettant de modifier la configuration de GDS ou de déployer des services supplémentaires.
Il existe de multiples façons de lancer plusieurs instances de GDS sur le même serveur.
En mode traefik, une méthode est présentée dans override_gallery/docker-compose.additional_stack.yml. Cette methode attribut un dossier
à chaque instance de GDS, ce qui permet de les identifier facilement et évite les erreurs. C'est une implémentation assez
simple, selon les contraintes de votre système, il est conseillé de l'adapter.
Pour en savoir plus (lancer des commandes geonature, accéder à la BDD, intégrer le MNT, modifier votre domaine,...), consultez la FAQ GeoNature-Docker-services.
Pour des informations spécifiques sur le mode développement, voir la section Lancer une instance de développement et sa propre FAQ de développement.
Une action Github permet la publication automatique d'images Docker frontend et backend de GeoNature sur les packages du dépôt :
ghcr.io/pnx-si/geonature-frontend-extraghcr.io/pnx-si/geonature-backend-extra
Ces images sont le pendant de celles publiées sur le dépôt de GeoNature mais contiennent en supplément les modules externes pré-cités en introduction.
Commencez par vous assurer d'avoir installé make, jq et git-lfs sudo apt install make jq git-lfs openssl.
Il faut ensuite, dans votre fichier .env, décommenter les lignes de l'environnement de dev.
Une fois cela fait, il ne vous reste plus qu'à lancer make submodule_init, make build_images suivi de make dev.
Il est déconseillé de lancer avec la commande docker compose up -d car si vous mettez à jour le projet GeoNature,
cela ne fonctionnera pas sans relancer make dev_init.
Le premier lancement peut mettre quelques dizaines de minutes le temps de build les images.
Vous pouvez accéder à votre GeoNature à l'adresse https://localhost/geonature et au proxy traefik http://localhost:8080/.
Vous devez avoir installé Cypress au préalable et lancé la stack.
La commande make cypress vous permet ensuite de lancer les tests cypress.
Si vous voulez que vos tests s'exécutent comme dans la CI Github, il faut, une base sans données saisie au préalable. Puis, vous devez passer les migrations "samples" :
geonature db upgrade occtax-samples-test@head
geonature db upgrade occhab-samples@head
geonature db upgrade import-samples@head`Il est aussi possible de lancer Cypress en version headed ou avec des paramètres plus complexe en se calquant sur ce qui est fait dans le Makefile, par exemple pour lancer cypress en headed et en spécifiant les tests liés aux forms d'occtax :
source .env; cd sources/GeoNature/frontend; API_ENDPOINT="https://$${HOST}$${GEONATURE_BACKEND_PREFIX}/" URL_APPLICATION="https:$${HOST}$${GEONATURE_FRONTEND_PREFIX}/" cypress run --headed --spec cypress/e2e/occtax-form-spec.js
