Guide de démarrage

Temps estimé pour terminer ce guide : 3/4 h

Prérequis

  • Apache 2 avec :

    • mod_rewrite. Pour activer mod_rewrite sur des systèmes basés sur Debian, utiliser a2enmod rewrite

    • mod_expires. Pour activer mod_expires sur des systèmes basés sur Debian, utiliser a2enmod expires

    • mod_headers. Pour activer mod_headers sur des systèmes basés sur Debian, utiliser a2enmod headers

    • mod_filter. Pour activer mod_filter sur des systèmes basés sur Debian, utiliser a2enmode filter

    • mod_deflate. Pour activer mod_deflate sur des systèmes basés sur Debian, utiliser a2enmod deflate

    • mod_fcgid. Pour activer mod_fcgid sur des systèmes basés sur Debian, installer le paquet libapache2-mod-fcgid (aptitude install libapache2-mod-fcgid) et pour OpenSuse, installer apache2-mod_fcgid.

    • mod_proxy, mod_proxy_ajp et mod_proxy_http. Pour activer mod_proxy, mod_proxy_ajp et mod_proxy_http sur des systèmes basés sur Debian, utiliser a2enmod proxy, a2enmod proxy_ajp et a2enmod proxy_http.

  • Python 3.4 ou plus avec le support des virtualenv (probablement dans le paquet python3-venv ou inclus avec votre installation de Python 3)

  • nodejs 4.0 ou plus

  • MapServer 6.4.3+ (ça ne fonctionnera pas avec 6.4.1) ou 7.0.1+ (paquet généralement appelé mapserver sur la plupart des distributions, sur les systèmes basés sur Debian, utiliser cgi-mapserver et mapserver-bin)

  • GDAL 2.0 ou plus avec les liaisons à Python3

  • Sphinx search 2.2 ou plus pour la recherche d’éléments (paquet généralement appelé sphinx pour la plupart des distributions, sur les systèmes Debian, utiliser sphinxsearch sur les backports de Jessie)

  • tomcat 8.0 ou plus pour activer le composant d’impression

  • Bash 4 ou plus pour lancer les tâches

  • git 2.0 ou plus pour obtenir le code

  • proj le logiciel de projections cartographiques

  • sudo pour lancer certaines commandes avec un utilisateur normal. Votre fichier /etc/sudoers doit contenir les lignes suivantes (à éditer avec visudo):

    USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd.service  # Or /bin/systemctl restart apache2.service on Debian based system
    USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart searchd@customer-infra.service # Or /bin/systemctl restart searchd@customer-infra.service on Debian based system
    USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart tomcat.service # Or /bin/systemctl restart tomcat.service on Debian based system
    USER ALL=(ALL) NOPASSWD: /bin/systemctl restart tomcat8.service  # Debian based system only, in addition to the previous line.
    USER ALL=(ALL) NOPASSWD: /usr/bin/indexer --verbose --rotate --config /etc/sphinx/customer-infra.conf --all --quiet
    USER ALL=(ALL) NOPASSWD: /usr/bin/indexer --verbose --rotate --config /etc/sphinx/customer-infra.conf --all
    USER ALL=(ALL) NOPASSWD: /usr/sbin/apachectl -t
    
  • Les librairies suivantes pour créer correctement le venv Python:

    • geos
    • geos-devel
    • postgresql-devel
    • libxml2-devel
    • libxslt-devel
    • python3-devel
    • gcc

    Sur les systèmes basés sur Debian, utiliser cette liste:

    • libgeos-c1
    • libgeos-dev
    • libxml2-dev
    • libxslt-dev
    • python3-dev
    • gcc

Avant de démarrer

Toutes les tâches sont lancées ici avec manuel, un task runner écrit en Bash. Pour avoir l’auto-complétion dans un shell Bash, utiliser le fichier geo-infra/manuel.autocomplete.bash. La complétion est aussi disponible pour zsh.

Pour lancer manuel sans avoir à toujours ajouter ./ copier geo-infra/manuel dans votre dossier ~/bin.

Pour obtenir de l’aide sur une tâche (description de ce qui est fait et des options), utiliser manuel help TASK. par exemple, manuel help help.

Paramétrisation du géoportail

  • Cloner tous les dépôts listés ci-dessus dans le même dossier [1]:

    • L’infrastructure principale : git clone https://github.com/ioda-net/geo-infra.git

    • L’API : git clone https://github.com/ioda-net/geo-api3.git

    • L’interface : git clone https://github.com/ioda-net/geo-front3.git

    • L’infrastructure client servant d’exemple : git clone https://github.com/ioda-net/customer-infra.git

  • Passer sur customer-infra :

    • Télécharger les fichiers Shape pour la Suisse depuis geofabrik et les décompresser dans le dossier customer-infra/data :

      • wget http://download.geofabrik.de/europe/switzerland-latest.shp.zip
      • unzip -d data/osm-switzerland switzerland-latest.shp.zip
      • Vous avez maintenant un dossier customer-infra/data/osm-swisstzeland contenant différents fichiers Shape.

    • Ajouter le symlink pour les polices de caractères:

      ln -s /usr/share/fonts/liberation/LiberationSans-Regular.ttf data/LiberationSans-Regular.ttf
      

      ou sur un système Debian :

      ln -s /usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf data/LiberationSans-Regular.ttf
      
    • Mettre à jour la configuration : afin de pouvoir tester customer-infra en développement, vous devez seulement créer customer-infra/config/dev/_common.dev.toml avec le contenu suivant :

    [vhost]
    ows_path = '/path/to/folder/containing/symlinks/to/mapserver/executable/'
    

    Dans ce dossier, créer un lien symbolique vers votre exécutable mapserver, nommé selon le géoportail. Par exemple en utilisant les valeurs de config/dist/_common.dist.toml, nous aurons ln -s /usr/bin/mapserv ~/geoportal-infras/cgi-bin/demo.

  • Aller sur geo-front3 :

    • Lancer npm install pour installer les modules node.

  • Aller sur geo-infra :

    • Installer les dépendances python listées dans requires.txt. Vous pouvez les installer toutes d’un coup de façon globale avec sudo pip install -r requires.txt ou dans un venv. Si vous utiliser une version de Python inférieure à 3.5, vous aurez aussi besoin de glob2. Vous pouvez l’installer de cette manière: sudo pip install glob2. Pour installer les dépendances dans un venv, suivez les étapes décrites ci-dessous:

      • Créer le venv: python3 -m venv .venv

      • Activer-le : source .venv/bin/activate Ceci doit être fait une fois avant de lancer n’importe quelle commande avec manuel.

      • Installer les dépendances : pip install -r requires.txt

      • Installer glob2 si nécessaire : pip install glob2

    • Inclure tous les fichiers de customer-infra/dev/vhosts.d dans votre configuration apache. Ceci peut être fait en éditant /etc/httpd/conf/httpd.conf ou /etc/apache2/apache2.conf selon votre système et en ajoutant cette ligne à la fin du fichier : IncludeOptional /path/to/infra/dir/customer-infra/dev/vhosts.d/*.conf.

    • Créer le vhost vhost : ./manuel vhost demo.

    • Créer un lien symbolique appelé mapserv vers votre executable MapServer dans cgi-bin. Par exemple: ln -s /usr/bin/mapserv cgi-bin/mapserv.

    • Générer les fichiers utilitaires du géoportail : ./manuel dev demo.

    • Générer l’interface du géoportail : ./manuel front dev demo.

    • Ajouter demo.geoportal.local dans votre /etc/hosts.

    • Ouvrir http://demo.geoportal.local.

    • Vous devriez voir votre géoportail, semblable à l’image ci-dessous. Pour le moment, seule la navigation dans la carte est fonctionnelle. Les éléments dépendants de l’API (recherches, QR code, URL abrégée, informations sur les éléments) ainsi que l’impression seront mis en place dans la suite de ce guide.

    Demo portal home page

    Page d’accueil du géoportail Demo

[1]

Ils peuvent être arrangés différement plus tard en surchargeant les bonnes clé dans dans geo-infra/config/config.sh

API

Aller sur geo-api3 :

  • Mettre à jour la configuration. Pour faire ça, créer un fichier appelé config/config.devel.toml et adapter son contenu à votre cas de figure:

    default_epsg = 2056
    
    [db]
    type = 'sqlite'
    file_path = 'customer_infra.sqlite'
    staging = ''
    
    [raster]
    # Optionnal. If you have bt for altitude, put their path here. If you don't, height and profile related features won't work.
    # It must contain a bt folder with the bt.
    # dtm_base_path = '/var/lib/geoportal/data/'
    
    [search]
    port = 9314
    [search.origins_to_ranks]
    places = 10
    
    [shortener]
    allowed_domains = ['geoportal.local']
    allowed_hosts = ['localhost']
    
    [storage]
    kml = '/tmp'
    
    [waitress]
    # This must be coherent with vhost.api_proxy from customer-infra. 9080 is the default value from _common.dist.toml
    port = 9080
    
    • Télécharger le fichier d’exemple de la base de données sqlite dans le dossier geo-api3 :

      • wget https://docs.geoportal.xyz/data/getting-started/customer_infra.sqlite
    • Créer le bon venv avec ./manuel venv

    • Mettre à jour les fichiers ini utilisés par Pyramid: ./manuel ini-files.

    • Lancer l’API : ./manuel serve.

    Attention

    Si la commande échoue à cause de ImportError: No module named 'osgeo', vérifier que le module osgeo du système est disponible dans le PYTHONPATH spécifié dans config/config.dist.sh. Si ce n’est pas le cas, créer un config/config.sh avec la valeur correcte pour PYTHONPATH. Par exemple pour Debian, mettre cette valeur:

    export PYTHONPATH=".venv/lib/python${PYTHON_VERSION}/site-packages:/usr/lib/python3/dist-packages:$(pwd)"
    
    • Si vous aller sur le géoportail, le QR code, l’URL abrégée et l’interrogation d’attributs devraient fonctionner. La recherche sera mise en place dans la section suivante.

    Portal page with QR code and short link

    Page du géoportail avec le QR code et l’URL abrégée

Attention

Si vous testez l’interrogation d’attributs, vous aurez seulement une présentation très basique: c’est ce que MapServer retourne lors de la requête GetFeatures. Vous pouvez l’améliorer avec l’accès à la base de données. Voir la partie traitant de ce sujet dans la documentation.

Impression

Aller sur geo-infra :

  • Télécharger le print WAR :

    • wget https://docs.geoportal.xyz/data/getting-started/print.war
  • Faire les actions suivantes en tant que root :

    • Copier le WAR dans votre dosser tomcat webapps (par exemple /usr/share/tomcat/webapps, /srv/tomcat/webapps/ or /var/lib/tomcat8/webapps) en utilisant le nom print-customer-infra.war.

    • Démarrer tomcat: systemctl start tomcat

      Attention

      Pour les systèmes basés sur Debian, la cible est appelée tomcat8

    • Aller au dossier tomcat webapps.

    • Vérifier que print-customer-infra.war est correctement déployé.

    • Créer le dossier print-customer-infra/print-apps et donner lui comme propriétaire tomcat :

      • mkdir print-customer-infra/print-apps
      • chown tomcat:tomcat print-customer-infra/print-apps

      Attention

      Pour les systèmes basés sur Debian, le nom de l’utilisateur est tomcat8.

    • Contrôler et corriger les permissions pour <tomcat-webapps>/print-customer-infra/print-apps :

      • Contrôler que, avec l’utilisateur que vous utilisez pour lancer ./manuel dans geo-infra vous pouvez accéder à ce dossier. Si ls <tomcat-webapps>/print-customer-infra/print-apps ne retourne pas d’erreur, vous pouvez continuer. Si ce n’est pas le cas, corriger les permissions pour avoir un accès en lecture et execution sur tous les dossiers dans le chemin.

      • Configurer les ACL pour donner à l’utilisateur les permissions d’écrire dans le dossier (ne pas utiliser les permissions standards d’Unix, ça ne va pas fonctionner avec tomcat): setfacl -m u:<user>:rwx print-customer-infra/print-apps.

    • Contrôler que tomcat a un connecteur AJP défini pour le port 8009 dans /etc/tomcat/server.xml. Sinon, ajouter la ligne ci-dessous dans la section <Service name="Catalina"> :

      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      
    • Redémarrer tomcat systemctl resart tomcat

  • Aller dans geo-infra

  • Exporter votre valeur de MPF_APP_FOLDER pour permettre à manuel de la copier au bon endroit. Par exemple : export MFP_APP_FOLDER="/usr/share/tomcat/webapps/print-customer-infra/print-apps/"

  • Copier la configuration d’impression : ./manuel tomcat-copy-conf "dev" demo

  • Contrôler que vous avez un dossier demo dans <tomcat-webapps>/print-customer-infra/print-apps.

  • Si c’est bien le cas, essayez d’imprimer depuis votre géoportail. Tout devrait fonctionner.

  • Désactiver la variable MFP_APP_FOLDER : unset MFP_APP_FOLDER

Passer sur customer-infra :

  • Dans config/config.sh ajouter une ligne comme ceci: set-var MFP_APP_FOLDER "/usr/share/tomcat/webapps/print-customer-infra/print-apps/" qui correspond au bon chemin de MapFish Print. C’est ce qui sera dorénavant utilisé automatiquement par les scripts.

Conclusion

Tout devrait fonctionner correctement maintenant. Vous pouvez reconstruire la configuration du géoportail avec ./manuel dev demo ou tout reconstruire avec ./manuel dev-full demo.