Guide de démarrage¶
Temps estimé pour terminer ce guide : 3/4 h
Table des matières
Prérequis¶
Apache 2 avec :
mod_rewrite
. Pour activermod_rewrite
sur des systèmes basés sur Debian, utilisera2enmod rewrite
mod_expires
. Pour activermod_expires
sur des systèmes basés sur Debian, utilisera2enmod expires
mod_headers
. Pour activermod_headers
sur des systèmes basés sur Debian, utilisera2enmod headers
mod_filter
. Pour activermod_filter
sur des systèmes basés sur Debian, utilisera2enmode filter
mod_deflate
. Pour activermod_deflate
sur des systèmes basés sur Debian, utilisera2enmod deflate
mod_fcgid
. Pour activermod_fcgid
sur des systèmes basés sur Debian, installer le paquetlibapache2-mod-fcgid
(aptitude install libapache2-mod-fcgid
) et pour OpenSuse, installerapache2-mod_fcgid
.mod_proxy
,mod_proxy_ajp
etmod_proxy_http
. Pour activermod_proxy
,mod_proxy_ajp
etmod_proxy_http
sur des systèmes basés sur Debian, utilisera2enmod proxy
,a2enmod proxy_ajp
eta2enmod 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, utilisercgi-mapserver
etmapserver-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, utilisersphinxsearch
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 avecvisudo
):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éercustomer-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 auronsln -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 avecsudo 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 danscgi-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.
Page d’accueil du géoportail Demo
[1] | Ils peuvent être arrangés différement plus tard en surchargeant les bonnes clé dans dans |
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 lePYTHONPATH
spécifié dansconfig/config.dist.sh
. Si ce n’est pas le cas, créer unconfig/config.sh
avec la valeur correcte pourPYTHONPATH
. 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.
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.
Recherche¶
Aller sur geo-infra
:
Créer une configuration globale de recherche
./manuel generate-global-search-conf customer-infra
À ce point de la mise en place du géoportail, cette commande devrait retourner une erreur:
Job for searchd@customer-infra.service failed because the control process exited with error code.
C’est normal.Ajouter un lien symbolique vers la nouvelle configuration sphinx qui vient d’être créée (ceci doit être effectué en tant que root):
ln -s <infra-dir>/customer-infra/dev/search/sphinx.conf /etc/sphinx/customer-infra.conf
Attention
Pour les systèmes basés sur Debian, avant de créer le lien symbolique, vous devez (en tant que root):
Créer le dossier
/etc/sphinx/
:mkdir /etc/sphinx/
Mettre
sphinxsearch
comme propriétaire :chown -R sphinxsearch:sphinxsearch /etc/sphinx
Créer les dossiers spécifiques à l’infrastructure de sphinx (ceci doit être fait en tant que root) :
Créer :
mkdir -p /var/lib/sphinx/customer-infra/{binlog,index}
Paramétrer le bon propriétaire :
chown -R sphinx:sphinx /var/lib/sphinx/customer-infra
Créer le dossier pour les logs :
mkdir -p /var/log/sphinx
Lui attribuer le bon propriétaire :
chown -R sphinx:sphinx /var/log/sphinx
Créer le dossier run pour PID :
mkdir -p /var/run/sphinx
Lui attribuer le bon propriétaire :
chown -R sphinx:sphinx /var/run/sphinx
Attention
Pour les systèmes basés sur Debian :
Le bon utilisateur est
sphinxsearch
N’essayez pas de créer les dossiers ci-dessus dans
/var/lib/sphinxsearch
le processus sera configuré pour utiliser/var/lib/sphinx
Deployer les fichiers
.service
pour cette infrastructure (ceci doit être fait en tant que root) :Copier les fichiers
.service
:cp /path/to/geo-infra/searchd@.service /etc/systemd/system/
Attention
Pour les systèmes basés sur Debian, il changer l’utilisateur pour
sphinxsearch
danssearchd@.service
.Recharger les démons systemd :
systemctl daemon-reload
Télécharger les données nécessaires à sphinx pour construire ses index et les placer dans
customer-infra/data
:cd /path/to/customer-infra/data
wget https://docs.geoportal.xyz/data/getting-started/places.csv
Démarrer sphinx :
./manuel restart-service search customer-infra
Lancer une ré-indexation :
./manuel reindex customer-infra
La recherche devrait maintenant fonctionner.
Recherche avec une base de données¶
Dans des cas concrets, vous voudrez sûrement que les données de la recherche proviennent de votre base de données et pas d’un fichier csv. Pour faire ça, vous pouvez utiliser les modèles ci-dessous dans customer-infra/search/portal-locations.in.conf
:
source src_{{ geoportal.name }}_location : def_pgsql_{{ geoportal.name }}
{
sql_attr_uint = num
sql_attr_uint = rank
sql_attr_string = label
sql_attr_string = origin
sql_attr_string = geom_st_box2d
sql_attr_float = x
sql_attr_float = y
sql_attr_float = lat
sql_attr_float = lon
sql_attr_bigint = weight
sql_field_string = search_string
sql_field_string = geom_quadindex
sql_db = {{ mapserver.PORTAL_DB_NAME }}
}
{% for location in search.locations %}
source src_{{ geoportal.name }}_{{ location }} : src_{{ geoportal.name }}_location
{
sql_query = \
SELECT id \
, remove_accents(name) as search_string \
, name as label \
, 'places' as origin \
, geom_quadindex \
, geom_st_box2d \
, {{ search.origins_to_ranks[location] }} as rank \
, x \
, y \
, lat \
, lon \
, osm_id as num \
, row_number() OVER (ORDER BY name) AS weight \
FROM osm.{{ location }} \
WHERE name IS NOT NULL
}
index {{ geoportal.name }}_{{ location }}
{
type = plain
docinfo = extern
min_infix_len = 2
source = src_{{ geoportal.name }}_{{ location }}
path = /var/lib/sphinx/data/{{ search.customer }}/{{ geoportal.name }}_{{ location }}
}
{%- endfor %}
index {{ geoportal.name }}_locations
{
type = distributed
{%- for location in search.locations %}
local = {{geoportal.name}}_{{location}}
{%- endfor %}
min_infix_len = 2
}
Dans ce cas, vous devrez configurer la recherche dans votre fichier config/_common.dist.toml
pour avoir accès à la base de données et pour convertir les origines en rangs:
[search]
sphinx_sql_host = "localhost"
sphinx_sql_user = "geo_searchd"
sphinx_sql_pass = "azerty"
sphinx_sql_port = 5432
sphinxhost = "localhost"
sphinxport = 9313
[search.origins_to_ranks]
places = 6
buildings = 9
admin = 13
Aller sur la page sur ce sujet de la documentation pour plus d’information.
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 nomprint-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
dansgeo-infra
vous pouvez accéder à ce dossier. Sils <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
.