Installation de l’application “Le Bon Tag” sur Debian 9 (MODE PROD)

Pré-requis

L’application nécessite entre autres PostgreSQL, PostGIS, Python 3, node.js, npm et osm2pgrouting.
Ce document décrit l’installation complète de l’application et de ses dépendances pour une utilisation en mode production (version compilée) sous Debian.

Application

Décompresser le fichier contenant l’application “le-bon-tag_x.y.z.tgz”, par exemple dans /opt/le-bon-tag :

tar xvzf le-bon-tag_x.y.z.tgz -C /opt/le-bon-tag

Proxy (optionnel)

Si votre organisme utilise un proxy, vous devez spécifier les variables d’environnement “http_proxy” et “https_proxy” afin que Python accède à Internet.

Fichier /etc/environment :

http_proxy=http://***:***
https_proxy=http://***:***

Fichier contab via “sudo crontab -e” :

http_proxy=http://***:***
https_proxy=http://***:***

Dépendances

Installation de node.js et de npm

sudo apt-get install -y curl && sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt-get install -y nodejs
sudo npm install -g npm

Installation de Python et de ses modules requis

sudo apt-get install -y python3 python3-pip libpq-dev
sudo -E pip3 install requests psycopg2 pyyaml lxml numpy

Note : ne pas installer les modules Python depuis les paquets de la distribution (car obsolètes).

Note : pour mettre à jour les modules :
sudo pip3 install --upgrade requests psycopg2 pyyaml lxml numpy

Base de données

Installation

Attention, PostGIS >= 2.5 est requis (utilisation de ST_Intersects avec des collections).
Or sous Debian 9, PostGIS 2.3 sera installé depuis les paquets. Il faut donc utiliser une source alternative (https://wiki.postgresql.org/wiki/Apt) :

sudo apt-get install curl ca-certificates gnupg && curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && sudo apt-get update

Note : l’application a été testée avec PostgreSQL 9.6, PostgreSQL 12, Postgis 2.5 et Postgis 3.

Pour installer PostgreSQL 9.6 avec Postgis 2.5 :
sudo apt-get install -y postgresql-9.6 postgresql-contrib-9.6 postgresql-9.6-pgrouting postgresql-9.6-postgis-2.5

Pour installer PostgreSQL 12.0 avec Postgis 3 :
sudo apt-get install -y postgresql-12 postgresql-contrib postgresql-12-pgrouting postgresql-12-postgis-3

Fichier de configuration : /etc/postgresql/XX/main/postgresql.conf (vérifier le port et listen_addresses = ‘*’ pour ouvrir l’accès vers l’extérieur)
Fichier de gestion des droits d’accès : /etc/postgresql/XX/main/pg_hba.conf
Fichiers journaux : /var/lib/postgresql/XX/main/pg_log

Où XX est la version de PostgreSQL.

Pour redémarrer le service en cas de modification de la configuration :
sudo systemctl restart postgresql

Création

  1. Crée le rôle “osm”, la base “osm” avec les extensions requises et les schémas :
    sudo runuser -l postgres -c 'psql -f /opt/le-bon-tag/sql/01_lbt_database_and_schemas.sql'

  2. Crée les tables dans le schéma “lebontag” de la base “osm” :
    sudo runuser -l postgres -c 'psql -d osm -f /opt/le-bon-tag/sql/02_lbt_tables.sql'

  3. Insère les données dans le schéma “lebontag” :
    sudo runuser -l postgres -c 'psql -d osm -f /opt/le-bon-tag/sql/03_lbt_data.sql'

Installation des outils OSM & GDAL

sudo apt-get install -y osm2pgsql osmctools gdal-bin python-gdal

Compilation de osm2pgrouting

sudo apt-get install -y cmake libboost-dev expat libexpat1-dev libboost-program-options-dev libpqxx-dev
cd /opt && sudo git clone https://github.com/pgRouting/osm2pgrouting.git
cd /opt/osm2pgrouting && cmake -H. -Bbuild
cd build/ && make
make install

Note : ne pas installer osm2pgrouting depuis les paquets de la distribution (car obsolètes).

Données OSM de référence

Téléchargement des données

Les données OSM de référence doivent contenir certaines métadonnées (contributeur, date, changeset, etc.) et se téléchargent après connexion avec un compte OSM sur https://osm-internal.download.geofabrik.de/index.html (“OpenStreetMap internal server”).

Une fois le compte OSM lié au site “geofabrik.de”, il est possible de télécharger les données de la région de son choix, par exemple : https://osm-internal.download.geofabrik.de/europe/france/languedoc-roussillon-latest-internal.osm.pbf

Placer le fichier téléchargé sur le serveur, par exemple dans “/opt/le-bon-tag/osm/source/”.

Attention : ne jamais supprimer ce fichier, il sera utilisé par l’application pour connaître la date des données de référence, charger les données puis mettre à jour les données pgRouting.

Fichiers de configuration

Fichier /opt/le-bon-tag/.env

Copier le fichier /opt/le-bon-tag/.env.sample vers /opt/le-bon-tag/.env et éditer les paramètres :

POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=osm
POSTGRES_SCHEMA=lebontag
POSTGRES_USER=osm
POSTGRES_PASSWORD=osm
JWT_SECRET=b4e9cb1d8e532b7d2dae5be291dffab9
LOGGING=true
EPSG_OSM=4326
EPSG_LOCAL=2154

Fichier /opt/le-bon-tag/api/config.json

Copier le fichier /opt/le-bon-tag/api/config.json.sample vers /opt/le-bon-tag/api/config.json et éditer les paramètres :

{
        "port": 80,
        "bodyLimit": "50mb"
}

Note : Laisser le port 80 pour que node.js serve directement l’application ou modifier le port (par exemple 8081) pour utiliser ensuite Nginx comme reverse proxy (cf. https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-debian-9).

Fichier /opt/le-bon-tag/config.yaml

Copier le fichier /opt/le-bon-tag/config.yaml.sample vers /opt/le-bon-tag/config.yaml et éditer les paramètres :

database:
    host: localhost
    port: 5432
    dbname: osm
    schema: lebontag
    username: osm
    password: osm
    srid: 4326

Exécution de l’application (en mode interactif)

Pour tester la bonne installation de l’application :

cd /opt/le-bon-tag && sudo npm start

Ouvrir un navigateur et entrer l’adresse du serveur. La page de connexion de l’application devrait apparaître.

“CTRL + C” pour quitter.

Exécution de l’application (en mode service)

“pm2” est un gestionnaire de processus permettant de gérer le (re)démarrage automatique de l’application. Les commandes suivantes installent “pm2” et créent le service pour l’application.

cd /opt/le-bon-tag/ && sudo npm install -g pm2@latest --unsafe-perm
sudo pm2 start api/index.js -n LeBonTag && sudo pm2 startup systemd && sudo pm2 save

Configuration de l’application

Données OSM de référence

Cette rubrique spécifie les paramètres des données OSM de référence chargées lors de la mise en service de l’application puis mises à jour par l’application.
Spécifier les bons chemins des fichiers, en particulier le chemin vers le fichier PBF des données de référence téléchargé précédemment.

Données OSM d’itinéraire

Cette rubrique spécifie les paramètres des données OSM pgRouting chargées lors de la mise en service de l’application puis mises à jour par l’application.

Données OSM à valider

Cette rubrique spécifie les paramètres gérant la validation des données OSM.
La tolérance de géométrie précise la tolérance en mètres au-delà de laquelle la géométrie d’un objet est considérée comme modifiée par rapport à son ancienne version.

Carte

Cette rubrique spécifie l’emprise géographique de la zone de travail et son apparence sur la carte.

L’emprise (au format GeoJSON, EPSG:4326) est très importante car elle limite les données chargées par l’application à cette zone. Par défaut, l’emprise de Montpellier Méditerranée Métropole est spécifiée.

Pour utiliser une autre emprise, se rendre dans le module “Emprises” de l’application et téléverser une nouvelle emprise. Ensuite revenir à ce paramètre et sélectionner la nouvelle emprise depuis la liste déroulante.

Notes :

SELECT ST_AsGeoJSON(ST_Transform(way,4326),9,4) FROM osm2pgsql.osm_polygon WHERE name = 'Montpellier Méditerranée Métropole';

Rétention des fichiers

Cette rubrique spécifie l’âge maximal de certains fichiers générés par l’application.

Serveur LDAP

Cette rubrique permet de définir la connexion à un serveur OpenLDAP pour la gestion des utilisateurs.

Enregistrement

Cliquer sur “Enregistrer” pour sauvegarder les modifications.

Chargement des données OSM de référence et d’itinéraire

Lors de la mise en service de l’application, les données OSM de référence et d’itinéraire doivent être chargées en base.
Le script “lbt-load-data.sh” automatise ce chargement :

sudo apt-get install -y dos2unix && sudo dos2unix /opt/le-bon-tag/scripts/*.sh && sudo chmod +x /opt/le-bon-tag/scripts/*.sh  
sudo -E /opt/le-bon-tag/scripts/lbt-load-data.sh  

Ces données seront alors mises à jour avec les données validées dans l’application.

Attention, la durée de chargement peut être élevée.

CRON des scripts Python

Plusieurs scripts Python sont à exécuter régulièrement, par exemple une fois par jour.

Pour exécuter ces scripts Python tous les jours, on les déclare dans le CRON :

sudo dos2unix /opt/le-bon-tag/cron/*.sh && sudo chmod +x /opt/le-bon-tag/cron/*.sh
echo 'MAILTO=""' > /etc/cron.d/lebontag
echo '0 0 * * * root /opt/le-bon-tag/cron/lbt-cleaning.sh' >> /etc/cron.d/lebontag
echo '0 1 * * * root /opt/le-bon-tag/cron/lbt-update-db-by-osc.sh' >>