Skip to content

Latest commit

 

History

History
271 lines (197 loc) · 9.94 KB

INSTALL.md

File metadata and controls

271 lines (197 loc) · 9.94 KB

Installation

Pré-requis serveur

Testé avec :

Le reste de la doc d'install est réalisée avec un utilisateur debian non sudoer (sauf la mise en place de la tâche cron).

Synchroniser les sources

  • S'assurer d'être propriétaire des fichiers Se placer à la racine du projet et exécuter la commande suivante
sudo chown -R $UID:$GID .
  • Synchroniser les sources: Le script deployment/scripts/deploy-sources-to-server.sh permet de prévisualiser puis d'effectuer la synchronisation des sources. Il prend en argument le host du serveur ainsi que le répertoire de destination
deployment/scripts/deploy-sources-to-server.sh user@target-server-host:/path/to/dest

Le reste de la procédure d'installation a lieu sur le serveur distant.

  • Créer le réseau docker magosm
docker network create magosm

Base de données

Se placer à la racine du projet sur le serveur cible.

Adapter la configuration de la base de données

Les fichiers suivants contiennent entre autre la configuration par défaut de la base de données:

  • env/default.env : contient les variables d'environnement nécessaires au build des images et à l'exécution des containers, notamment celui de la db. Il est situé en dehors de la racine pour éviter un parasitage entre fichiers .env.
  • db/conf/postgres_settings_default.sh: contient un script qui met à jour la configuration postgres
  • créer les fichiers de configuration à partir des fichiers par défaut:
cp ./env/default.env ./deployment/.env
cp db/conf/postgres_settings_default.sh db/conf/postgres_settings.sh
  • Modifier les fichiers ./deployment/.env et db/conf/postgres_settings.sh créés précédemment afin qu'ils contiennent la configuration voulue pour le projet ⚠️ Portez une attention particulière aux variables suivantes :
# `postgres` PostgreSQL user password
DBPG_USER_POSTGRES_PWD
# `magosm` PostgreSQL user password
DBPG_USER_MAGOSM_PWD

#UID / GID inside the container
GEOSERVER_UID=
GEOSERVER_GID=

# uncomment next line if you want to use --flat-nodes (only for huge extracts like planet or europe)
OSM2PGSQL_OPTS="$OSM2PGSQL_OPTS --flat-nodes $DOCKER_VOLUMES_BASE_DIR/$OSM2PGSQL_FLATNODE_DIR/nodes.cache"

Construire l'image docker

  • exécuter le script suivant et suivre les instructions jusqu'à ce qu'il n'affiche plus d'erreurs :
db/scripts/check_requirements.sh
  • construire l'image docker:
cd deployment
docker compose build db

Configurer la db

  • Démarrer la db:
docker compose up db -d
  • Injecter les variables d'environnement dans le shell courant (à répéter à chaque changement de shell)
source .env
  • Appliquer la configuration postgres
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/conf/postgres_settings.sh
# check your pg_hba.conf is correct
docker compose exec db bash -c 'cat ${PGDATA}/pg_hba.conf'
# you must restart your container to restart postgres service (needed for parameters which require a restart to update, as `shared_buffers`)
docker compose restart db
# you can check that your postgresql.conf file has been correctly edited
docker compose exec db bash -c 'cat ${PGDATA}/postgresql.conf'
  • Créer les utilisateurs et la base de données
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/init_db.sh
  • Importer les données du fichier pbf dans la base
# prepare command
CMD="osm2pgsql \
--create \
$OSM2PGSQL_OPTS \
$DOCKER_VOLUMES_BASE_DIR/$OSM_PBF_FILES_DIR/$OSM_LATEST_PBF_FILE_NAME"
# check it
echo $CMD
# run
docker compose exec db $CMD >> $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/osm2pgsql-create.log 2>&1
# check log file
tail -f -n 200 $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/osm2pgsql-create.log
  • Créer les vues
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/init_views.sh
# look for errors
docker compose exec db sh -c 'grep ERR /tmp/*log.err'
  • Créer les tables, triggers et fonctions pour magosm-change :
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/init_magosm-change.sh

Configurer Osmosis

  • Vérifier l'existence et la conformité du state file (suivre les instructions du script) :
cd ../db
bash ./scripts/database/check_osmosis_state_file.sh
  • Initialiser le répertoire de travail Osmosis
bash ./scripts/database/init_osmosis_working_dir.sh
  • Effectuer une mise à jour manuelle
cd ../deployment
# osmosis/osm2pgsql update  + change analysis (`changes_analysis_*` tables are only populated on second iteration)
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/keepup_osm_db_and_changes.sh >> $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_db_and_changes.log 2>&1
# check log file
tail -f -n 200 $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_db_and_changes.log
# then check that your state.txt is one day later
cat $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_WORKING_DIR/updates/state.txt
#  materialized views update
docker compose exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/keepup_osm_views.sh >> $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_views.log 2>&1
# check log file
tail -f -n 200 $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_views.log
  • Ajouter les tâches cron
# se placer dans le bon répertoire
cd ../deployment
sudo bash -c "cat <<EOF > /etc/cron.d/keepup_docker-db
# osmosis/osm2pgsql update 
30 10 * * * debian docker compose --project-directory $(pwd) exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/keepup_osm_db_and_changes.sh > $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_db_and_changes.log 2>&1 && docker compose --project-directory $(pwd) exec db bash $DOCKER_VOLUMES_BASE_DIR/$SOURCE_DIR/scripts/database/keepup_osm_views.sh > $HOST_VOLUMES_BASE_DIR/$OSMOSIS_OSM2PGSQL_LOG_DIR/keepup_osm_views.log 2>&1
EOF"

Configurer geoserver

Le nombre de containers geoserver déployés est indiqué dans le fichier deployment/docker-compose.yml. La valeur associée est celle indiquée dans geoserver > deploy > replicas.

Démarrer le service une première fois

  • Si ce n'est pas déjà fait, créer le réseau docker magosm
docker network create magosm
  • Démarrer geoserver et le reverse-proxy
docker compose up -d geoserver reverse-proxy
  • Attendre que geoserver soit démarré
#geoserver service must be marked as healthy
docker compose ps

Gestion des instances multiples

Docker gère le load balancing entre les différentes instances de geoserver déployées. Il n'est pas possible d'accéder à l'interface d'administration de geoserver lorsque plusieurs containers du service geoserver sont lancés en même temps (les requêtes d'authentification et d'accès aux données ne sont pas adressées à un même container).

Pour contourner ce problème, on peut procéder de la manière suivante:

  • arrêter les containers avec docker stop et pas docker compose stop jusqu'à ce qu'il n'en reste qu'un en marche: Par exemple, si replicas: 2:
docker stop $COMPOSE_PROJECT_NAME-geoserver-2

Si on dispose d'un environnement de travail sur la machine cible, on peut ensuite se connecter à l'interface administrateur via http://localhost:81/geoserver

  • lorsqu'on a fini d'utiliser l'interface administrateur, relancer tous les containers
#relance les autres containers avec la configuration actualisée
docker compose up geoserver -d
#redémarre le container actuel avec la configuration actualisée (optionnel, nécessaire uniquement si on a fait une modification qui nécessite un redémarrage du container)
docker restart $COMPOSE_PROJECT_NAME-geoserver-1

Changer les identifiants de connexion à l'interface administrateur

  • Suivre la procédure ci-dessus pour n'avoir qu'un seul container geoserver en marche
  • Se rendre dans l'interface administrateur de geoserver via http://localhost:81/geoserver et se connecter avec les identifiants par défaut : admin/geoserver.
  • Dans le menu aller dans Sécurité > Utilisateurs, Groupes et Rôles puis cliquer sur l'onglet "Utilisateurs/Groupes"
  • Cliquer sur l'utilisateur admin et modifier le mot de passe puis sauvegarder

Changer le mot de passe de connexion à la base de données

  • Depuis l'interface d'administration de geoserver, se rendre dans Entrepôts > magosm
  • Dans les identifiants de connexion, indiquer le mot de passe précédemment choisi pour l'utilisateur magosm de la base de données (correspond à DBPG_USER_MAGOSM_PWD dans le fichier .env) puis sauvegarder
  • Répéter l'opération pour Entrepôts > citymap

Changer le mot de passe maître

  • Depuis l'interface d'administration de geoserver, aller dans Sécurité > Mots de passe et cliquer sur le lien mot de passe maître oublié puis renseigner le fichier dans lequel geoserver doit écrire le mot de passe en clair (ex : masterpwd)
  • Inspecter le mot de passe en ligne de commande : docker exec $COMPOSE_PROJECT_NAME-geoserver-1 cat /geoserver/masterpwd
  • Dans l'interface d'administration, cliquer sur le lien changer le mot de passe maître et renseigner les champs demandés

Démarrer le reste des services

  • Construire les images docker manquantes
docker compose build client services-webapp
  • Démarrer les services
docker compose up -d

On peut ensuite vérifier le statut des services avec docker compose ps