|
| 1 | +--- |
| 2 | +title: "Accélérer et personnaliser vos services WMS avec MapProxy" |
| 3 | +subtitle: "On a tous quelque chose à cacher" |
| 4 | +authors: |
| 5 | + - Arnaud Vandecasteele |
| 6 | +categories: |
| 7 | + - article |
| 8 | + - tutoriel |
| 9 | +date: 2010-04-23 |
| 10 | +description: Tutoriel sur l’installation et la configuration de MapProxy pour accélérer et transformer des services WMS. |
| 11 | +image: |
| 12 | +legacy: |
| 13 | + - node: 249 |
| 14 | +license: default |
| 15 | +robots: index, follow |
| 16 | +tags: |
| 17 | + - cache |
| 18 | + - MapProxy |
| 19 | + - Python |
| 20 | + - WMS |
| 21 | +--- |
| 22 | + |
| 23 | +# Accélérer et personnaliser vos services WMS avec MapProxy |
| 24 | + |
| 25 | +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} |
| 26 | + |
| 27 | +{: .img-thumbnail-left } |
| 28 | + |
| 29 | +[MapProxy](https://mapproxy.org) est un framework Open Source permettant la gestion des données spatiales. Il permet d'accélérer, de transformer et de tatouer (_watermarking_) des données provenant de serveurs cartographiques. Côté fonctionnement, il se place entre le serveur et le client (architecture _middleware_). |
| 30 | + |
| 31 | +Dans ce tutoriel, nous installerons tout d'abord MapProxy, ensuite nous le paramétrerons et enfin nous effectuerons nos premiers tests. |
| 32 | + |
| 33 | +{: .img-center loading=lazy } |
| 34 | + |
| 35 | +## Téléchargement et pré-requis |
| 36 | + |
| 37 | +Il existe différentes manières d'installer un package Python. Vous pouvez faire une installation manuelle en téléchargeant [le package source](https://pypi.org/project/MapProxy/) ou alors utiliser la commande shell `easy_install` (disponible via `python-setuptools` sur Linux Debian). Dans ce tutoriel nous utiliserons un environnement virtuel Python ; toute l'étape de téléchargement sera donc quasi automatique. Il n'est donc pas nécessaire de télécharger l'archive Python de MapProxy. |
| 38 | + |
| 39 | +Nous allons tout d'abord installer les différentes librairies Python que nous allons utiliser : |
| 40 | + |
| 41 | +- [`virtualenv`](https://pypi.org/project/virtualenv/) : permet de séparer vos différents projets python en créant des instances virtuelles. Cela permet par exemple d'essayer une nouvelle librairie encore en phase bêta sans pour autant polluer et/ou corrompre votre répertoire `site-packages` ou encore de faire fonctionner plusieurs versions de la même librairie. |
| 42 | +- [`pip`](https://pypi.org/project/pip/) : tout comme `easy_install`, Pip permet d'installer des packages python. Écrit par le même auteur que virtualenv il s'intègre parfaitement à ce dernier. |
| 43 | + |
| 44 | +Si ces termes n'évoquent rien pour vous, je vous conseille la lecture de l'excellent article de Sean Gillies [_Bootstrapping a Python project_](https://sgillies.net/2010/04/01/bootstrapping-a-python-project.html). Dans le monde "Pythonique", ces deux librairies tendent à devenir incontournables. N'hésitez donc pas à prendre quelques minutes et à bien comprendre les concepts. |
| 45 | + |
| 46 | +Pour les personnes fonctionnant sur Ubuntu un simple `sudo aptitude install python-setuptools` suffira à installer les librairies ci-dessus. Enfin pour finir, MapProxy nécessite également l'installation des librairies suivantes : |
| 47 | + |
| 48 | +- C compiler |
| 49 | +- Python 2.5 or 2.6 (development tools) |
| 50 | +- libjpeg |
| 51 | +- zlib |
| 52 | + |
| 53 | +Nous allons le faire en ligne de commande : |
| 54 | + |
| 55 | +```bash |
| 56 | +sudo aptitude install build-essential python-dev libjpeg-dev libz-dev libfreetype6-dev``` |
| 57 | +``` |
| 58 | + |
| 59 | +Pour ma part, l'installation s'est faite sur Xubuntu et ce sont les packages suivants qui m'ont été proposés : `libfreetype6-dev`, `libjpeg62-dev` et `zlib1g-dev`. |
| 60 | +
|
| 61 | +Voilà tout notre environnement est en place. Il ne reste plus maintenant qu'à installer et paramétrer MapProxy. |
| 62 | + |
| 63 | +---- |
| 64 | + |
| 65 | +## Création de l'architecture virtuelle et installation des composants |
| 66 | + |
| 67 | +Nous avions parlé au paragraphe précédent de `virtualenv`. Nous allons le mettre en application immédiatement. Pour cela, placez-vous dans le répertoire où vous allez réaliser votre installation. Pour notre exemple, dans notre répertoire **home**, nous allons créer un répertoire **envPython** qui servira à notre installation. |
| 68 | + |
| 69 | +```bash |
| 70 | +~/envPython$ source mapProxy/ |
| 71 | +~/envPython$ cd mapProxy/ |
| 72 | +~/envPython$ source bin/activate |
| 73 | +(mapProxy)user@osgeolive:~/envPython$ |
| 74 | +``` |
| 75 | + |
| 76 | +La dernière ligne vous indique que vous êtes dans votre environnement Python virtuel. À partir de maintenant toutes les librairies python que vous installerez seront localisées au sein de votre environnement (dans le répertoire `bin`). Ainsi elles ne "pollueront" pas votre répertoire site-packages "officiel". |
| 77 | + |
| 78 | +Passons maintenant aux librairies, utilisées par MapProxy (encore d'autres ^^), que nous allons installer au sein de notre nouvel environnement python virtuel. Le plus simple est de passer par l'utilitaire [`pip`](https://pypi.org/project/pip/). |
| 79 | +Celui-ci va permettre de parser un fichier texte et d'installer les librairies qui y sont définies. Pip est normalement installé par défaut dans votre environnement virtuel. Si ce n'est pas le cas (comme sur kubuntu par exemple), faites : |
| 80 | + |
| 81 | +```bash |
| 82 | +~/envPython/mapProxy$ easy_install pip |
| 83 | +``` |
| 84 | + |
| 85 | +Utilisons le maintenant : |
| 86 | + |
| 87 | +```bash |
| 88 | +~/envPython/mapProxy$ pip install -r http://bitbucket.org/olt/mapproxy/raw/tip/requirements.txt |
| 89 | +``` |
| 90 | + |
| 91 | +Quelques minutes plus tard maintenant que tout est installé (enfin !...). Vous pouvez vérifier que tout s'est correctement déroulé en exécutant la commande suivante : |
| 92 | +
|
| 93 | +```bash |
| 94 | +~/envPython/mapProxy$ python -m mapproxy.core.version |
| 95 | +0.8.2 |
| 96 | +``` |
| 97 | +
|
| 98 | +Nous pouvons nous attaquer à la configuration de MapProxy. |
| 99 | +
|
| 100 | +---- |
| 101 | +
|
| 102 | +## Initialisation de MapProxy |
| 103 | +
|
| 104 | +Rassurez-vous, l'initialisation de MapProxy tient en une ligne de commande. L'utilitaire [Paster](http://pythonpaste.org/) va en effet créer automatiquement toute l'architecture (_skeleton_) des dossiers et fichiers nécessaires. |
| 105 | +Toujours dans votre environnement virtuel faites : |
| 106 | + |
| 107 | +```bash |
| 108 | +~/envPython/mapProxy$ paster create -t mapproxy_conf mymapproxy |
| 109 | +``` |
| 110 | + |
| 111 | +`mymapproxy` est le répertoire qui contiendra l'applicatif. Au sein de celui-ci 3 nouveaux répertoires ont été créés : |
| 112 | +
|
| 113 | +- `etc` : contient les fichiers de configuration |
| 114 | +- `tmp` : comme son nom l'indique, c'est un simple répertoire pour les fichiers temporaires |
| 115 | +- `var` : contient les fichiers de log et les données |
| 116 | +
|
| 117 | +Il ne reste plus maintenant qu'à démarrer notre serveur MapProxy. pour cela faites : |
| 118 | + |
| 119 | +```bash |
| 120 | +mapProxy$ cd mymapproxy/ |
| 121 | +mymapproxy$ paster serve etc/develop.ini --reload |
| 122 | +``` |
| 123 | + |
| 124 | +Et vous devriez voir affiché le texte suivant : |
| 125 | + |
| 126 | +```bash |
| 127 | +Starting subprocess with file monitor |
| 128 | +2010-04-15 12:12:26,504 - INFO - 2663:mapproxy.core.conf_loader:load_services - Reading services configuration: /home/user/envPython/mapProxy/mymapproxy/etc/services.yaml |
| 129 | +Starting server in PID 2663. |
| 130 | +serving on 0.0.0.0:8080 view at http://127.0.0.1:8080 |
| 131 | +``` |
| 132 | + |
| 133 | +Voilà, notre serveur est maintenant démarré. Il tourne en local (localhost ou 127.0.0.1) sur le port 8080. Testons-le immédiatement avec [la couche Omniscale OpenStreetMap WMS](http://osm.omniscale.net/) configurée par défaut. Pour cela dans votre navigateur exécutez la requête suivante : <http://localhost:8080/service?> . L'image ci-dessous devrait alors vous être retournée. |
| 134 | +
|
| 135 | +{: .img-center loading=lazy } |
| 136 | +
|
| 137 | +---- |
| 138 | +
|
| 139 | +<!-- geotribu:authors-block --> |
| 140 | +
|
| 141 | +{% include "licenses/default.md" %} |
0 commit comments