Utilisation de Docker pour le déploiement de GeoNature dans le cadre d'un hébergement mutualisé (plusieurs instances GeoNature hébergées par sur un serveur commun).
Ce portage de GeoNature sous Docker a été réalisé par le BRGM dans le cadre de la convention BRGM/OFB.
- kartoza / docker-postgis : Base de données PostgreSQL + PostGIS
- pgAdmin : Application d'interfaçage avec la base de données
- nginX : Reverse Proxy
graph TD
classDef label stroke-width:0;
classDef node fill:white,stroke:black;
nginx(nginX);
pgadmin(PGAdmin);
app(Geonature App);
db(Geonature DB);
nginx -- 80 --> pgadmin
nginx -- "5000 (GeoNature)" --> app
nginx -- "5001 (UsersHub)" --> app
nginx -- "5002 (TaxHUb)" --> app
nginx -- "8080 (Atlas)" --> app
pgadmin -- 5432 --> db
app -- 5432 --> db
Ce projet nécessite l'installation préalable de:
Dans notre exemple nous utiliserons un certain nombre d'assertions.
- Le répertoire
/applicationsest la base de notre environnement de travail. - Le répertoire
/applications/projetscontiendra les différents instances de GeoNature. - Le répertoire
/applications/geonaturecontiendra le contenu du dépôt git de GeoNature. - Le répertoire
/applications/administrationcontiendra les différents outils d'administration.
- Dans le dépôt git, la branche à utiliser est
main. - Dans le dépôt git, les sources sont dans le répertoire racine (celui où est situé ce
README.md).
mkdir -p /applications
cd /applications
git clone https://github.com/PnX-SI/GeoNature-docker.git geonature
### Actuellement le bon contenu est dans la branche "main", il faut donc se mettre dessus (si vous venez de checkout, ce sera le cas directement).
cd geonature
git checkout mainCette étape est facultative si l'image peut-être récupérée d'un registre Docker ou bien si le CI/CD du projet est mis en place.
### Dans le répertoire _app__, il faut adapter le nom du tag
docker build --force-rm -t geonature:geonature-verified app/Créer un répertoire pour le GeoNature que l'on veut déployer, par exemple en spécifiant votre domaine (remplacer <mondomaine.org> par le nom de votre choix).
mkdir -p /applications/projets/<mondomaine.org>cp /applications/geonature/env.sample /applications/projets/<mondomaine.org>/.env
cp /applications/geonature/docker-compose.yaml /applications/projets/<mondomaine.org>/vim /applications/projets/<mondomaine.org>/.envExemple de configuration (dans cet exemple, une image déjà présente est utilisé, si vous avez construit l'image docker par vous même, indiquez ici son tag):
POSTGRES_DB=geonature
POSTGRES_USER=geonature_user
POSTGRES_PASS=geonature
PGDATA_DIR=/applications/projets/geonature.brgm-rec.fr/pgdata
BOOTSTRAP_DIR=/applications/geonature/bootstrap_files
GEONATURE_COMMON_DIR=/applications/projets/geonature.brgm-rec.fr/geonature_common
GEONATURE_DOMAIN=geonature.brgm-rec.fr
GEONATURE_PROTOCOL=https
GEONATURE_IMAGE=geonature:geonature-verified
NGINX_CONF=/applications/geonature/nginx.conf
HTTP_PROXY=http://someproxy.loc.al:port
PGADMIN_DEFAULT_EMAIL=user@domain.geonature_com
PGADMIN_DEFAULT_PASSWORD=SuperSecretdocker network create rpx_netmkdir -p /applications/administration
cp nginx-proxy /applications/administration/nginx-proxy
Vous pouvez aussi aller lire la documentation dans le répertoire nginx-proxy.
cp /applications/administration/nginx-proxy/nginx-proxy.service /etc/systemd/system
systemctl daemon-reload
systemctl enable nginx-proxy --now### Copie de l'Unit
cp /applications/geonature/geonature.service /etc/systemd/system/
### Edition de l'Unit (au moins deux parties à modifier ##Geonature##)
vim /etc/systemd/system/geonature.service
### Activation du service
systemctl daemon-reload
systemctl enable geonature --nowL'installation des modules se fait indépendamment dans chacune des instance. Il faut pour cela se connecter terminal du conteneur. Suivez ensuite la démarche habituelle d'installation du module. Ici un exemple avec le module gn_module_dashboard.
docker ps
# On récupère le nom ou le hash du container de geonature pour lancer un exec dessus
docker exec -it <id ou nom de mon conteneur geonature> /bin/bash
mkdir -p /geonature/gn_modules
cd /geonature/gn_modules
# Téléchargement, décompression et configuration du module
wget https://github.com/PnX-SI/gn_module_dashboard/archive/0.2.0.zip
unzip 0.2.0.zip
mv gn_module_dashboard_0.2.0 gn_module_dashboard
# Finalisation de l'installation du module
# On initialize l'environnement virtuel python de GeoNature
source /geonature/geonature/backend/venv/bin/activate
# On installe le module GeoNature avec la commande : geonature install_gn_module <chemin absolu vers mon module> <url relative du module>
geonature install_gn_module /geonature/gn_modules/gn_module_dashboard dashboard
Si vous avez besoin de changer l'URL de l'application (changement de DNS, ou bien passage de http à https), il ne suffit pas de modifier le .env pour que celà fonctionne. En effet, les fichiers de configuration de l'application étant transformés pour le front et dans une moindre mesure pour la partie Python, il faut aussi modifier ces fichiers là.
Modifiez le .env pour mettre à jour l'URL et le protocole. Ce fichier est quand même réutilisé pour créer les settings.ini des différentes applications.
Modifiez le fichier geonature_common/usershub/config/config.py en remplaçant la valeur de la variable URL_APPLICATION.
Taxhub n'utilise que le fichier settings.ini.
Modifier le fichier geonature_common/geonature/config/geonature_config.toml en remplaçant les valeurs pour URL_APPLICATION, API_ENDPOINT et API_TAXHUB.
Ensuite, il faut lancer la mise à jour de la configuration à l'application.
docker ps
# On récupère le nom ou le hash du container de geonature pour lancer un exec dessus
docker exec -it <id ou nom de mon conteneur geonature> /bin/bash
# Les commande suivantes sont à exécuter dans le container
# On va dans le Frontend
cd /geonature/geonature/frontend
# On active npm (via nvm)
nvm install
nvm use
# On va dans le Backend
cd /geonature/geonature/backend
# On active le venv Python et on lance la commande de mise à jour de la configuration
source venv/bin/activate
geonature update_configuration
deactivate
# On peut ensuite sortir du container (via CTRL+D ou autre)Atlas n'utilise que le fichier settings.ini.
La base doit être créée avant côté PGAdmin.
Il faut penser à ajouter les extensions postgis et postgis_raster avant de lancer la restauration.
Le dump doit être placé sur le serveur.
- Copier le dump dans
/applications/projet/votreprojetgeonature/geonature_common/dbdump
Il faut ensuite aller dans le container de PGAdmin pour copier le dump dans le répertoire qui va bien (A noter, il pourrait probablement être possible de monter un volume sur le répertoire qui va bien).
- Se connecter au container
docker exec -it votreprojetgeonature_pgadmin_1_xxxxxxx /bin/sh - Déplacer le dump
cp /geonature/geonature_common/dbdump/votre.dump /var/lib/pgadmin/storage/user_domain.com/
Dans PGAdmin, sur votre nouvelle base, choisissez l'option Restore, choisissez le fichier (attention à bien afficher tous les types de fichiers). Dans les Restore options, cochez les Do not save Owner et Privilege.
Il peut y avoir quelques erreurs, vérifiez si elles sont graves ou non (les erreurs de création de comptes ne sont pas graves).
docker build -t <montag> -f app/Dockerfile.embed .