Stage de fin d’étude Master 2 Systèmes d’information géographique et gestion de l’espace, parcours professionnel Mise en place d’une infrastructure de données géographiques dans la communauté d’agglomération du Pays Viennois Septembre 2014 Julien FRANCOIS Maitre de stage : Jean-Luc Pontier Professeur référent : Thierry Joliveau Remerciements Je tiens à remercier Jean-Luc Pontier, mon maitre de stage, pour m’avoir laissé carte blanche pour mener à bien mon stage. Merci aussi pour son aide dans la construction de mon rapport de stage. Ensuite j’aimerais remercier Fabien Allamanche, pour ses précieuses aides techniques tout au long du stage. Mes remerciements vont aussi à tout le personnel de ViennAgglo qui a permis à mon stage de bien se dérouler (notamment Claude Michelon, Isabelle Fontvieille et Rémi Delory de la DSI). Merci à toute l’équipe pédagogique du master qui m’a permis d’acquérir les compétences pour réaliser ce stage. Pour ces relectures, je remercie Solenn Chaudet, toujours aussi patiente. Pour terminer, merci aux contributeurs du Google group geOrchestra qui nous ont donné de nombreuses pistes pour résoudre nos problèmes techniques. Sommaire Liste des abréviations et sigles .................................................................................................................... 1 Introduction .................................................................................................................................................. 2 I. ViennAgglo ................................................................................................................................................ 4 1.1. Le territoire ....................................................................................................................................... 4 1.2. Le fonctionnement de ViennAgglo .............................................................................................. 4 1.3. Les compétences .............................................................................................................................. 5 1.4. Le service SIG .................................................................................................................................. 6 II. Pourquoi une plateforme de catalogage et d’échange à ViennAgglo .............................................. 8 2.1. Centraliser et connaitre les données ............................................................................................. 8 2.1.1. Centralisation/homogénéisation des données géographiques ......................................... 8 2.1.2. Documentation........................................................................................................................ 8 2.1.3. Connaitre/faire connaitre ...................................................................................................... 9 2.2. Réponse à INSPIRE ....................................................................................................................... 9 2.2.1. INSPIRE KEZAKO ? ........................................................................................................... 9 2.2.2. INSPIRE et les EPCI ........................................................................................................... 10 2.2.3. La plateforme de catalogage et de partage, une réponse à INSPIRE ............................ 11 2.3. Augmenter l’autonomie des services métier/communes et des partenaires ......................... 11 2.3.1. Les services métier/communes........................................................................................... 11 2.3.2. Les structures partenaires..................................................................................................... 12 2.4. Ouverture des données au public ................................................................................................ 12 2.5. Complémentaire à DynMAP et outils d’observatoires ............................................................ 13 2.5.1. DynMap .................................................................................................................................. 13 2.5.2. Outils d’observatoire ............................................................................................................ 14 2.6. Imbrication du catalogue avec les autres plateformes .............................................................. 14 III. Solution technique : mise en place et configuration ....................................................................... 16 3.1. GeOrchestra ................................................................................................................................... 16 3.1.1 Choix de la solution geOrchestra......................................................................................... 16 3.1.2 Présentation de la solution .................................................................................................... 16 3.2. Prises en main des outils ............................................................................................................... 17 3.2.1. Prérequis ................................................................................................................................. 18 3.2.2. geOrchestra ............................................................................................................................ 18 3.3. Configuration geOrchestra ........................................................................................................... 19 3.3.1. Configuration générale ......................................................................................................... 19 3.3.2. Site web................................................................................................................................... 20 3.4. Dimensionnement et architecture du serveur de production ................................................. 20 3.4.1. Architecture de la solution ................................................................................................... 20 3.4.2. Matériel / Dimensionnement / Architecture Système .................................................... 25 3.5. Sécurité ............................................................................................................................................ 27 IV. Production, maintenance et transfert de connaissances ................................................................ 30 4.1. Mise en production........................................................................................................................ 30 4.1.1. Licence, droits d’accès .......................................................................................................... 30 4.1.2. Geoserver ............................................................................................................................... 31 4.1.3. Geonetwork ........................................................................................................................... 33 4.2. Maintenance ................................................................................................................................... 34 4.2.1 Détecter des défaillances ....................................................................................................... 34 4.2.2 Redémarrer les services ......................................................................................................... 34 4.2.3. Compilation des sources ...................................................................................................... 35 4.2.4. Processus de mise à jour ...................................................................................................... 35 4.3. Documentation utilisateur ............................................................................................................ 35 4.3.1. Sensibiliser à la géomatique ................................................................................................. 35 4.3.2. Documentation technique ................................................................................................... 35 V) Perspectives, évolution......................................................................................................................... 38 5.1. Trop complexe pour une majorité ? ........................................................................................... 38 5.2. Le réseau internet........................................................................................................................... 39 5.2.1. La fibre.................................................................................................................................... 39 5.2.2. Hébergement externe ........................................................................................................... 39 5.3. Automatiser l’administration ........................................................................................................ 40 5.4. Métadonnées .................................................................................................................................. 40 Conclusion ................................................................................................................................................... 42 Bibliographie ............................................................................................................................................... 44 Listes des figures......................................................................................................................................... 45 Table des annexes....................................................................................................................................... 46 Liste des abréviations et sigles ALUR : Accès au Logement et un Urbanisme Rénové AJP : Apache JServ Protocol BDD : Base De Données CAS : Central Authentication Service CGI : Common Gateway Interface CMS : Content Management System (Système de gestion de contenu) DGFiP : Direction Générale des Finances Publiques DMZ : Demilitarized Zone (Zone démilitarisée) DSI : Direction des Systèmes d’Information EPCI : Établissement Public de Coopération Intercommunale HA : High Availibility (Haute disponibilité) HTTP : HyperText transfert Protocol IDG : Infrastructure de Données Géographiques INSPIRE : Infrastructure for Spatial Information in Europe IP : Internet protocole JEE : Java Enterprise Edition LDAP : Lightweight Directory Access Protocol Mbps : Megabits per second OFPI : Observatoire Foncier Partenarial de l’Isère OGC : Open Geospatial Consortium OS : Operating System (Système d’exploitation) PIGMA : Plateforme d’Information Géographique Mutualisée en Aquitaine PLU : Plan Local d’Urbanisme PLUi : Plan Local d’Urbanisme intercommunal RAM : Random Access Memory SAFER : Sociétés d'Aménagement Foncier et d'Etablissement Rural SIG : Système d’Information Géographique SPOF : Single Point Of Failure (Point individuel de défaillance) REST : Representational State Transfer SSH : Secure SHell SSL : Secure Sockets Layer VM : Virtual Machine (Machine Virtuelle) WFS : Web Feature Service WMS : Web Map Service -1Julien FRANCOIS - 31/07/2014 Introduction En parallèle des technologies web, les outils géomatiques ont subi une évolution exponentielle durant les dernières années. Le développement de l’informatique et plus particulièrement celui des technologies liées au web permettent d’aller de plus en plus loin dans les processus de collecte, d’analyse et de diffusion de l’information géographique. Ce dernier enjeu est devenu une des problématiques principales de la géomatique actuelle. Pour cadrer cette problématique, la directive européenne INSPIRE a été publié en 2007. Elle vise à promouvoir le partage des données par la mise en place de norme d’interopérabilité, la documentation systématique et la mise en place d’outils de catalogage et de diffusion. Au-delà des obligations légales, ViennAgglo souhaite depuis plusieurs années mettre en place un catalogue et une plateforme de partage des données qu’elle possède, et ce pour plusieurs raisons qui seront évoquées au cours de ce rapport. Au terme d’une étude interne, c’est la solution geOrchestra qui a été retenu. Le temps de mise en place d’une telle solution ne pouvant pas être absorbé par l’équipe en place, ViennAgglo a donc envisagé deux possibilités, l’aide d’un prestataire de services ou le recrutement d’un stagiaire de niveau ingénieur. Pour des raisons économiques c’est cette deuxième option qui a été retenue. J’ai donc rejoint l’équipe de ViennAgglo avec comme mission de mettre en place la solution geOrchestra au sein de l’agglomération. Ce rapport s’articule autour de plusieurs parties. Les deux premières parties présentent le contexte du stage, à savoir la structure d’accueil, ViennAgglo, et les enjeux du stage. La troisième partie décrit la mise en place de la solution technique. Ensuite la quatrième s’attarde sur les éléments liés à la mise en production de la plateforme et enfin la dernière partie présente les perceptives ouvertes par le stage. -2Julien FRANCOIS - 31/07/2014 -3Julien FRANCOIS - 31/07/2014 I. ViennAgglo 1.1. Le territoire La Communauté d’Agglomération du Pays Viennois est un Établissement Public de Coopération Intercommunale (EPCI). Née en 2002 de la transformation de l’ancien District de Vienne, qui regroupait 7 communes, l’Agglomération est aujourd’hui composée de 18 communes, 17 en Isère et une dans le Rhône, et compte environ 70 000 habitants. Figure 1 : Carte de présentation de ViennAgglo (Source : plaquette d’information ViennAgglo) 1.2. Le fonctionnement de ViennAgglo Un bureau communautaire Le bureau de la Communauté d’agglomération du Pays Viennois est composé du Président, des 9 Vice-présidents et de 9 conseillers délégués. Le bureau communautaire est un lieu d’information et d’orientation, il participe au processus d’élaboration de l’ordre du jour du conseil. Le bureau examine et arbitre les projets présentés par la communauté. -4Julien FRANCOIS - 31/07/2014 Un conseil communautaire La Communauté d’agglomération du Pays Viennois est administrée par un conseil communautaire, composé de conseillers élus des 18 communes membres. Le conseil communautaire délibère et vote les projets qui lui sont soumis par les différentes commissions. Le conseil communautaire de ViennAgglo est ainsi composé de 54 conseillers dont les 9 Viceprésidents et 9 conseillers délégués 360 agents Les services de la Communauté d’Agglomération sont répartis entre 3 pôles (le Pôle Ressources dit PRESS, le Pôle Stratégie et Développement Territorial dit PSDT, le Pôle Ingénierie et Technique Urbaine dit PITU) et la Direction Générale des Services (DGSRV). 1.3. Les compétences La communauté d’agglomération exerce en lieu et place des communes qui la composent des compétences obligatoires, optionnelles et complémentaires, dans la limite, pour la plupart d’entre elles, de l’intérêt communautaire. Les compétences obligatoires : o Développement économique o Aménagement de l’espace communautaire o Équilibre social de l’habitat o Politique de la ville Les compétences optionnelles : o Création ou aménagement et entretien de voirie d’intérêt communautaire o Protection et mise en valeur de l’environnement et du cadre de vie o Construction, aménagement, entretien et gestion d’équipements culturels et sportifs d’intérêt communautaires o Aménagement du territoire Les compétences facultatives o Environnement o Transport et déplacements o Développement touristique o Rayonnement communautaire o Action sociale d’intérêt communautaire -5Julien FRANCOIS - 31/07/2014 o Autres domaines (Informatique des écoles, gestion des aires d’accueil des gens du voyage) 1.4. Le service SIG Le service SIG et observatoires de ViennAgglo est combiné avec le service Foncier et sous la direction de l’Aménagement urbain. Moyens humain Deux personnes composent le service SIG : Jean-Luc Pontier, Responsable du service SIG-Foncier Fabien Allamanche, Géomaticien Moyens matériel Toutes les données du service sont stockées et gérées sous une base PostgreSQL/PostGIS, hébergée sur les serveurs de ViennAgglo. Tous les services de ViennAgglo ont accès aux données via le webSIG DynMAP. Les logiciels SIG utilisés sont QGIS et Cadcorp SIS. Concernant le matériel mis à ma disposition, j’ai travaillé sur un Dell Optiplex 780 (6Go RAM, Intel Core 2 Duo, 110Go Disque dur) ainsi que sur des serveurs virtuels montés par le service informatique. -6Julien FRANCOIS - 31/07/2014 -7Julien FRANCOIS - 31/07/2014 II. Pourquoi une plateforme de catalogage et d’échange à ViennAgglo 2.1. Centraliser et connaitre les données La mise en place d’un catalogue permet à la structure concernée de centraliser, documenter et partager toutes ses données. 2.1.1. Centralisation/homogénéisation des données géographiques D’un point de vue interne, la centralisation des données est très importante, elles sont en effet souvent réparties sur les postes personnels ou sur différents serveurs dans différents formats et différentes projections. Un projet comme la mise en place d’un catalogue permet de les homogénéiser et de les rassembler. A ViennAgglo, la centralisation est déjà très bien faite puisqu’elles sont stockées sur un serveur de base de données PostgreSQL/PostGIS (en interne) avec des projections homogènes et légales : Lambert 93 cc45 pour les données locales (Echelle EPCI, Département) ou Lambert 93 pour les données générales (Région, France). Des conventions de nommage des couches sont utilisées. 2.1.2. Documentation En revanche, leur documentation n’a pas encore été faite. La création de métadonnées est devenue obligatoire avec la directive INSPIRE (cf 2.2. Réponse à INSPIRE). La mise en place du catalogue doit permettre une saisie simplifiée et un catalogage des métadonnées. La saisie des métadonnées doit répondre à certains standards (INSPIRE propose un standard). Les métadonnées permettent de connaitre la donnée concernée via de nombreux attributs tels que : Le nom et la description synthétique des données Les liens d’accès à la données (flux WMS, WFS ou URL) Les dates liées à la donnée (Création, mise à jour, publication, etc) Des mots clés L’emprise géographique, le système de coordonnées de référence. Les points de contact pour la données (gestionnaire, auteur, etc) Les contraintes d’accès et d’utilisation Une fiche de métadonnées peut contenir potentiellement plus de 100 champs mais une trentaine sont obligatoire pour répondre à la directive INSPIRE -8Julien FRANCOIS - 31/07/2014 Les catalogues disponibles sur le marché permettent de répondre à ces standards en proposant des modèles de saisie et des fonctions de vérification et de validation. 2.1.3. Connaitre/faire connaitre La mise en place du catalogue permettra au service SIG de faire un point sur les données qu’il possède, de connaitre son patrimoine. Cette mise au point pourra permettre de relancer certains projets en collaboration avec les services métier concernés et ainsi de mettre en valeur les données stockées. En effet, certaines informations présentes dans la base ne sont pas utilisées par méconnaissance de leur existence. On pourra ainsi contacter le service qui avait commandé l’acquisition de cette donnée et savoir s’il souhaite la mettre à jour, l’utiliser, la diffuser ou l’abandonner. Cette relance des services s’inscrit dans une volonté d’impliquer, d’associer et de faire connaitre le service SIG dans les différents projets métier. 2.2. Réponse à INSPIRE 2.2.1. INSPIRE KEZAKO ? Tiré du site inspire.ign [IGN, 2014] : « La directive INSPIRE, élaborée par la Direction générale de l'environnement de la Commission européenne, vise à établir en Europe une infrastructure de données géographiques pour assurer l’interopérabilité entre les bases de données et faciliter la diffusion, la disponibilité, l'utilisation et la réutilisation de l’information géographique en Europe. » [IGN, 2014] La directive INSPIRE s’appuie sur plusieurs principes : Les données géographiques doivent être collectées une seule fois afin d'éviter la duplication, puis stockées, mises à disposition et actualisées par l'autorité la plus compétente. (principe de subsidiarité). Il doit être possible de combiner facilement et de manière cohérente des informations géographiques provenant de différentes sources à travers l’Europe, et de les partager entre différents utilisateurs et applications. Une information collectée par une autorité publique doit pouvoir être partagée par l’ensemble des autres organismes publics, quel que soit leur niveau hiérarchique ou administratif, par exemple des données de détail pour des enquêtes fines, et des informations générales pour des sujets stratégiques. -9Julien FRANCOIS - 31/07/2014 L’information géographique doit être disponible dans des conditions qui ne fassent pas indûment obstacle à une utilisation extensive. Il doit être facile de connaître quelles sont les informations géographiques disponibles, à quels besoins particuliers elles peuvent répondre, et sous quelles conditions elles peuvent être acquises et utilisées. La réponse à cette directive se fait par : La création de métadonnées : elles sont la porte d'entrée de l'infrastructure puisqu'elles permettent de connaître les données et les services disponibles ainsi que leurs utilisations possibles, La mise à disposition des données géographiques : elles doivent être disponibles dans des formats et des structures harmonisés afin d'en faciliter l'utilisation par tous, Les services en ligne : toutes les données et métadonnées doivent être accessibles via Internet, vecteur privilégié d'échange, Le partage entre autorités publiques : les principes d’échange, de tarification et les conditions d’utilisation doivent faciliter l’accès aux données et aux services en ligne, La mise en place de mécanismes de coordination et de suivi de la directive : il s'avère nécessaire de mettre en place des structures de coordination tant des contributeurs que des utilisateurs. Toutes les données ne sont pas concernées par cette directive, les thèmes concernés sont énumérés en annexe de la directive. 2.2.2. INSPIRE et les EPCI L’article L 127 - 1 précise qu’INSPIRE « est applicable aux séries de données géographiques détenues par une commune ou au nom de celle-ci, uniquement si des dispositions législatives en imposent la collecte ou la diffusion ». Pour l’essentiel, les communes ne sont concernées que pour leur document d’urbanisme : PLU (plan local d'urbanisme), POS (anciens plans d’occupation des sols), ou carte communale. Les EPCI détenant leurs prérogatives des communes : ils sont soumis à INSPIRE de la même façon que les communes. De plus, avec la loi ALUR, le PLU devient PLUi (sauf si un quart des communes représentant au moins 20 % de la population s’y oppose), ce sont donc les EPCI qui récupèrent la compétence PLU. - 10 Julien FRANCOIS - 31/07/2014 ViennAgglo est donc concernée partiellement par la directive INSPIRE. En revanche, pour favoriser les échanges de données, il convient de respecter les normes imposées par INSPIRE même si ce n’est pas une obligation législative. L’amélioration des échanges de données passe par l’utilisation de standards d’interopérabilité qui se présentent sous la forme de format ou de services répertoriés par des organismes comme Open Geospatial Consortium. L’interopérabilité est la capacité des systèmes à communiquer, à échanger des données, à "travailler" ensemble, sans que l’utilisateur ait besoin de connaître les caractéristiques spécifiques à chaque système. L’interopérabilité est basée sur l’utilisation de standards définissant les interfaces des composants des systèmes. Une application connaissant les interfaces standards est capable d’utiliser n’importe quel composant respectant ces standards. [OGC, 2014] 2.2.3. La plateforme de catalogage et de partage, une réponse à INSPIRE Grâce aux services qu’elle propose, la plateforme permet d’apporter une réponse à la directive INSPIRE. Pour reprendre les points énumérés ci-dessus, la plateforme permet : De créer et diffuser des métadonnées « INSPIRO-compatible » via un catalogue De mettre à disposition les informations géographiques en téléchargement ou sous forme de services web (WMS, WFS, etc) sous plusieurs formats. De conserver le lien entre les données et les métadonnées. De centraliser les données. 2.3. Augmenter l’autonomie des services métier/communes et des partenaires 2.3.1. Les services métier/communes Actuellement, à ViennAgglo, seul le service SIG a accès aux données brutes. Aucun personnel n’a de logiciel permettant la consultation de celles-ci. En revanche, tout le personnel (technicien et mairie) a accès au WebSIG DynMAP pour créer des cartes thématiques. Ces cartes (mise en forme, couches, etc) sont déjà préconfigurées par le service SIG. La création de cartes spécifiques passe donc par le service SIG. DynMAP s’apparente plus à un logiciel métier (Voir 2.5. Complémentaire à DynMAP). La mise en place d’une plateforme permettra de partager des cartes statiques déjà produites par le service SIG. Les agents pourront aussi directement fournir aux partenaires externes l’adresse de la plateforme pour qu’ils puissent récupérer les données dont ils ont besoin. - 11 Julien FRANCOIS - 31/07/2014 2.3.2. Les structures partenaires ViennAgglo est régulièrement amenée à travailler avec des structures extérieures. Aujourd’hui, toutes les demandes de données géographiques passent par le service SIG. Le temps consacré pour les extraire et les élaborer, en vue de les transmettre, est considérable. La plateforme permettra de répondre à cette demande des partenaires. De plus, du côté des partenaires, la présence du catalogue leur permettra de connaitre toutes les données disponibles et de choisir les plus pertinentes pour leurs études. La mise à disposition de service d’accès (WMS et/ou WFS) permet de distribuer des données toujours actualisées. Ainsi, la structure partenaire peut entrer une fois l’adresse du flux dans son logiciel SIG et n’a plus à se préoccuper de la validité des données. L’utilisation de flux évite aussi le stockage en local pour les structures partenaires. 2.4. Ouverture des données au public L’ouverture des données (Open Data) connait un essor considérable ces dernières années. Ainsi, différentes structures mettent à disposition leurs données sans contrepartie financière. Le citoyen a donc accès librement aux données produites et mises à disposition par les collectivités. Cette libération permet de valoriser l’information et peut contribuer à une meilleure transparence du service public vis à vis du citoyen. Les données géographiques sont spécifiques et sont souvent stockées dans des formats inconnus du grand public. En effet, si on permet aux citoyens de télécharger une donnée au format WMS ou Shapefile, celui-ci ne saura probablement pas comment la visualiser ni même ce qu’elle signifie. Il faut donc permettre la visualisation directe de ces données dans un visualiseur cartographique. Avec Google Maps ou Geoportail, les gens commencent à être habitués à ces types d’interfaces cartographiques. Aussi l’Open Data peut permettre de valoriser l’information géographique stockée par ViennAgglo. Grâce aux données géographiques gratuites, certaines personnes peuvent créer, par exemple, des applications mobiles ou en ligne (Ou garer mon vélo à ViennAgglo ? Gestion de l’assainissement, offre des transports publics, etc). Pour favoriser l’innovation, certaines collectivités (CU Strasbourg1, CU Toulouse2, etc.) organisent même des concours de création d’application à partir des données disponible sur leur portail Open Data. 1 2 http://www.strasbourg.eu/ma-situation/professionnel/open-data/concours-applications-open-data http://data.toulouse-metropole.fr/concours-opendata - 12 Julien FRANCOIS - 31/07/2014 Enfin, en consultant les données, les citoyens pourront prendre connaissance des projets et des actions de ViennAgglo. Ainsi, à partir de la participation du public, de nouveaux jeux de données seront ajoutés à la base de ViennAgglo et ceux existants pourront être complétés et mis à jour. On s’oriente ici vers des démarches participatives/collaboratives qui sont une des orientations que la géomatique est en train de prendre avec un citoyen au cœur des changements territoriaux, elle va contribuer à la participation et au débat citoyen. 2.5. Complémentaire à DynMAP et outils d’observatoires 2.5.1. DynMap DynMAP est un logiciel métier dont la vocation n’est pas la diffusion ou le catalogage des données. C’est un logiciel interne à ViennAgglo : accessible par les services de la communauté d’agglomération, par les communes et certains partenaires mais pas par la population. La plateforme, quant à elle, est ici pour répondre à la fois à une volonté de partager, d’ouvrir et de valoriser les données et à des exigences nationales et européennes. DynMAP sera donc toujours présent et permettra aux agents de continuer à alimenter les bases de données (éclairage public, signalisation verticale, voirie, etc.). Actuellement avec la version 8 de DynMAP, toutes les données doivent être stockées sur les serveurs DynMAP pour pouvoir être utilisées. Ceci implique un doublon de toutes les données entre les serveurs de ViennAgglo et le serveur de DynMAP. Les mises à jour entre les bases sont faites manuellement. Avec l’arrivée prochaine de la version 9, DynMAP permettra de se connecter directement à une base PostgreSQL : « Dans sa nouvelle version majeure 9, DynMAP franchira un nouveau cap très important dans son processus d’ouverture. Business Geografic proposera en effet une connexion directe entre DynMAP et les principales bases de données spatiales du marché » [DynMAP, 2014]. Ainsi seule la base de données de ViennAgglo sera maintenue et elle sera donc toujours à jour. La figure suivante résume la complémentarité et l’interaction qu’ont DynMAP et la plateforme. - 13 Julien FRANCOIS - 31/07/2014 Catalogue & plateforme Figure 2 : Complémentarité DynMAP/geOrchestra geOrchestra est la solution technique retenue pour mettre en place la plateforme. geOrchestra est présentée dans la partie III 2.5.2. Outils d’observatoire Dans le cadre de l’observation des politiques publiques, ViennAgglo doit réaliser des observatoires et souhaite se doter d’un outil le permettant. Grâce aux partenariats avec l’OFPI et la SAFER-RA, les outils en ligne Geoclip et VigiFoncier sont d’ores et déjà disponibles. Ils proposent des analyses thématiques et des indicateurs à partir de données issues de l’INSEE, de la DGFIP et de PERVAL (base de données sur l’immobilier remplie par les notaires) entre autres. L’objectif est, comme pour DynMap, différent de celui de la plateforme. En revanche, la plateforme permettra de cataloguer le résultat des observatoires et d’accéder aux outils cités précédemment. 2.6. Imbrication du catalogue avec les autres plateformes L’importance d’effectuer un catalogage a déjà été argumentée dans les paragraphes précédents. Chaque structure publique ou privée qui créée, stocke ou encore diffuse de - 14 Julien FRANCOIS - 31/07/2014 l’information géographique devrait avoir un catalogue. Les EPCI sont particulièrement concernés car ils sont de gros producteurs de données. En 2011, l’Association des Ingénieurs Territoriaux de France a lancé son sondage « INSPIRE : catalogage des données géographiques en France ». Le sondage a été fait auprès de 117 organismes (Conseils Régionaux, services de l’Etat, Conseil Généraux, EPCI, etc.) dont 35 EPCI. Ci-dessous le résultat du sondage de l’avancement des projets de catalogage spécifique aux EPCI. Au stade de réflexion 17% 20% Cadré mais pas encore effectif 17% Effectif 46% Suspendu, a l'arret Figure 3 : Etat d’avancement des projets de catalogue dans les EPCI Une des fonctions principales des catalogues est de pouvoir se connecter entre eux. Or, un des objectifs de la directive INSPIRE est d’éviter de recréer de la donnée existante. En se connectant à d’autres catalogues on peut accéder à toutes les données d’une structure. C’est ce qu’on appelle le moissonnage (cf. définition ci-dessous). Notre catalogue local pourra donc être accessible et « moissonable » à partir de n’importe quelle autre plateforme, il en sera de même dans le sens inverse. Le moissonnage et un mécanisme permettant de collecter des métadonnées sur un catalogue distant et de les stocker sur le nœud local pour un accès plus rapide. Cette action de moissonnage est une action périodique, par exemple, une fois par semaine. Le moissonnage n’est pas un import simple : les métadonnées locales et celle du catalogue distant sont synchronisées. En effet, un catalogue est capable de découvrir quelles sont les métadonnées ayant été ajoutée, supprimée ou mise à jour dans le nœud distant. [Geonetwork, 2014] - 15 Julien FRANCOIS - 31/07/2014 III. Solution technique : mise en place et configuration 3.1. GeOrchestra 3.1.1 Choix de la solution geOrchestra Au terme d’une pré-étude réalisée avant la publication de l’offre de stage, ViennAgglo avait choisis d’utiliser la solution geOrchestra. Cette solution a été retenue pour différents points : L’entreprise Camptocamp est porteuse du projet (gage de qualité). Le projet geOrchestra est un projet vivant (site web, développeurs de Camptocamp réactifs, plusieurs groupes Google existent et sont très actifs) Projet libre (licence GNU GPL) donc réutilisable gratuitement. Plusieurs collectivités ont déjà mis en place geOrchestra. Réponse aux besoins de ViennAgglo. 3.1.2 Présentation de la solution geOrchestra est un ensemble de logiciels qui forment ce qu’on appelle une infrastructure de données spatiales. Cette solution a été développée par la société Camptocamp dans le cadre de la mise en place de GéoBretagne financée par la région Bretagne et l’Etat. La structure en brique logiciel permet d’utiliser ou non chaque logiciel sans nuire au fonctionnement des autres. Les fonctionnalités principales proposées par cette solution sont les suivantes : 1 Un catalogue de données (Geonetwork)1 Un extracteur de données (Extractorapp) Un visualiseur cartographique (Mapfishapp) Un serveur cartographique (Geoserver) Un logiciel de gestion du cache (Geowebcache) Une gestion des droits d’utilisateur (ldapadmin) Un service d’authentification (CAS) Un proxy interne basé sur Spring security (ROOT) Statistiques de consultation et de téléchargement (Analytics & Downloadform) Les noms entre parenthèses correspondent au nom du composant dans geOrchestra - 16 Julien FRANCOIS - 31/07/2014 Exemple de plateforme basée sur geOrchestra : GeoBretagne1, PIGMA2, GéoPicardie3,… Solutions similaires basées sur une solution technique autre que geOrchestra : Prodige : En France : GeoRhoneAlpes4, GeoBourgogne5, GeoNormandie6. EasySDI7 : En France : CRIGEOS8 (Centre Régional de l’Information Géospatiale), OPCC (Observatoire Pyrénéen du Changement Climatique) Cette solution peut donc supporter de très gros projets (à l’échelle de région), mais peut aussi s’adapter à des projets moins importants. Les sources de geOrchestra sont accessibles via un dépôt GitHub. 3.2. Prises en main des outils Dans cette partie je présenterais la stratégie mise en place pour obtenir une installation geOrchestra stable et fonctionnelle. En effet, plusieurs tests sur des machines virtuelles sont nécessaires avant de comprendre les différents mécanismes de fonctionnement de cet outil. De nombreux termes informatiques seront cités ici et de nombreux ne seront pas expliqués si ils ne sont pas indispensables à la compréhension du rapport. En général, les explications sur les concepts d’informatiques seront présentées dans des cadres identiques à celui-là. « Une machine virtuelle (anglais virtual machine, abr. VM) est une illusion d'un appareil informatique créée par un logiciel d'émulation. Le logiciel d'émulation simule la présence de ressources matérielles et logicielles telles que la mémoire, le processeur, le disque dur, voire le système d'exploitation et les pilotes, permettant d'exécuter des programmes dans les mêmes conditions que celles de la machine simulée » [WIkipedia] http://cms.geobretagne.fr/ http://www.pigma.org/ 3 http://www.geopicardie.fr/portail/ 4 http://www.georhonealpes.fr/accueil 5 http://www.geobourgogne.fr/accueil 6 http://www.geonormandie.fr/accueil 7 http://www.crigeos.org/ 8 http://www.opcc-ctp.org/ 1 2 - 17 Julien FRANCOIS - 31/07/2014 3.2.1. Prérequis Avant même de comprendre comment fonctionne geOrchestra, il a fallu assimiler des concepts sur le fonctionnement des serveurs. Pour ce faire, j’ai utilisé des machines virtuelles, ce qui permet de faire des tests facilement et sans risques (On peut sauvegarder l’état de la machine à un instant t et revenir à cet état plus tard). Apport des machines virtuelles : - Configurer la distribution Debian de Linux. Nous avons retenu Debian pour nos serveurs puisque c’est lui qui est préconisé pour installer geOrchestra. En règle générale, c’est aussi la distribution par excellence installée sur les serveurs web. - Prendre en main les commandes Debian. Aucune interface graphique n’est installée, tout est donc réalisé en ligne de commande Shell. - Installer et configurer les logiciels prérequis à l’installation de geOrchestra (Tomcat, Apache 2, LDAP, PostgreSQL, JAVA, GDAL/OGR) - Assimiler les notions de protocoles de communication et de transfert de données (HTML, SSL, SSH, AJP, etc) - Assimiler les notions d’identifiant serveur (Nom d’hôte, ports d’écoute, IP) 3.2.2. geOrchestra Une fois que les bases pour accueillir geOrchestra sont prêtes, on passe à son installation. Les sources de geOrchestra sont disponibles sur un dépôt GitHub (service web d'hébergement et de gestion de développement de logiciels, utilisant le logiciel de gestion de versions Git). Les premières installations se sont faites aussi sur des machines virtuelles pour bien comprendre le fonctionnement. Apport des machines virtuelles : - Prendre en main la compilation de geOrchestra avec le logiciel Apache Maven (Outils pour produire un logiciel à partir de ses sources, en optimisant les tâches réalisées à cette fin et en garantissant le bon ordre de fabrication) - Comprendre comment s’imbriquent les différents composants de geOrchestra - Installer geOrchestra - Configurer geOrchestra (Voir 3.3. Configuration geOrchestra) - Tester des architectures logicielles pour les serveurs de production (Voir 3.4. Dimensionnement et architecture du serveur de production) - 18 Julien FRANCOIS - 31/07/2014 3.3. Configuration geOrchestra Dans cette partie, je reviens sur les adaptations que nous avons faites pour que geOrchestra soit parfaitement intégrée au contexte de ViennAgglo. 3.3.1. Configuration générale Pour simplifier la configuration, les développeurs de geOrchestra ont rassemblé les fichiers de configuration dans un dossier. On peut créer plusieurs dossiers qui seront appelés « profil de configuration ». Par défaut, un dossier « template » est livré avec les sources. Les profils de configuration sont composés : D’un fichier « shared.maven.filters » qui permet de rassembler tous les paramètres commun à l’application. On y retrouve par exemple : la langue, les identifiants de connexion aux bases de données, la hauteur de la barre des menus, etc. De sous-répertoires dont les noms correspondent à chaque module de geOrchestra (Mapfish, Geoserver, ldapadmin, etc). Ces dossiers contiennent des fichiers de configuration spécifiques à chaque module. Exemple d’éléments configurés : La barre de navigation (header) qui s’adapte à l’appareil utilisé (smartphone, ordinateur, etc.) et à l’utilisateur connecté. Ecran d’ordinateur, administrateur Ecran d’ordinateur, utilisateur anonyme Ecran de smartphone, utilisateur anonyme Figure 4 : Barre de navigation de l'application Les réponses mail automatique. Les serveurs WMS et WFS accessibles par défaut dans le visualiseur et l’extracteur. Les redirections du security-proxy. Création de contexte de cartes par défaut. - 19 Julien FRANCOIS - 31/07/2014 3.3.2. Site web L’intégration de la plateforme dans un site web qui lui est dédié est une étape importante. C’est la première page qui sera accessible par le client lorsque celui-ci accède au site. Les principales plateformes ont toutes une interface d’accueil qui présente le projet, les actualités, les groupes de travail ou encore les ressources d’aide. Cette partie a été réalisée par Fabien Allamanche qui a utilisé le Framework Bootstrap pour concevoir le modèle du site couplé à Wordpress pour l’administrer (ajout de billet, etc). Le site se présentera sous forme d’une page unique. 3.4. Dimensionnement et architecture du serveur de production La question du dimensionnement et de l’architecture du/des serveur(s) est très importante dans ce genre de projet. De nombreuses questions doivent être posées pour définir la meilleure solution, celle qui sera capable de répondre aux différentes requêtes des utilisateurs. Cette réflexion est menée conjointement avec la DSI. La première question à se poser est l’hébergement : Où sera hébergée notre plateforme ? Nous avons choisis l’hébergement en interne. En effet le matériel informatique déjà présent à l’agglomération est suffisant pour notre plateforme, aucun surcoût matériel n’est donc engagé. De plus, le parc disponible possède les ressources nécessaires pour permettre une éventuelle évolution de la plateforme. La question de la bande passante sera aussi évoquée puisque c’est souvent le facteur limitant des applications en réseau. Je présenterais d’abord l’architecture logicielle que nous avons retenue et ensuite l’architecture physique et le dimensionnement qui en découlent. 3.4.1. Architecture de la solution Pour choisir la bonne architecture, une multitude de questions ont été posées. Je vais commencer par présenter l’architecture que nous avons retenue (Figure 5) et succinctement le fonctionnement lors d’une requête émise par le client (Figure 6). Ensuite, j’expliquerais ses qualités et pourquoi elle a été choisie. L’objectif est d’obtenir une architecture dite HA (High availability). On pourra trouver en Annexe 1 l’évolution de l’architecture au fil du stage. Tomcat est un serveur d’applications, il permet donc de faire fonctionner des applications web (abrégées webapps) sur un serveur. Celles-ci génèrent des réponses aux requêtes du client. - 20 Julien FRANCOIS - 31/07/2014 LB LB : Load balancing Figure 5 : Architecture finale retenue Figure 6 : Fonctionnement de la solution - 21 Julien FRANCOIS - 31/07/2014 Une répartition sur deux serveurs et 3 instances. Pour augmenter la stabilité de l’application et répartir la charge, il est souvent conseillé de répartir les différentes applications qui composent geOrchestra sur plusieurs « instances » de Tomcat. Ceci a aussi l’avantage de favoriser le débogage puisqu’on isole les applications. Les instances peuvent être réparties selon deux concepts expliqués dans l’encadré ci-dessous [LANGLET, 2008] : Les deux concepts de répartition des instances de Tomcat : Répartition verticale : Toutes les instances sont sur le même serveur. On isole ainsi les applications sujettes aux défaillances dans leur machine virtuelle Java (chaque instance fait tourner sa propre machine virtuelle Java). Si cette application perturbe la machine virtuelle Java, les autres applications ne sont pas impactées. En revanche cette technique ne permet pas de se prémunir des pannes de serveur. Répartition horizontale : Les instances sont réparties sur plusieurs serveurs. On se prémunit ici de la panne matérielle en revanche comme les instances sont réparties sur plusieurs serveurs, les échanges entre instances dépendent du réseau. Nous avons donc ici utilisé ces deux types de répartition, en utilisant plusieurs instances sur plusieurs serveurs. Nous avons isolé Geoserver du fait que c’est l’application la plus sensible et la plus consommatrice en ressource. Ainsi, si Geoserver perturbe la machine virtuelle Java de son instance Tomcat, il ne perturbe pas le fonctionnement du reste de l’application. Isoler Geoserver sur un serveur permet aussi de lui allouer plus de ressources. Ensuite les webapps CAS (Système d’authentification) et ROOT (proxy interne) sont aussi isolés. Ces deux applications sont très stables et peu consommatrices de ressources. De plus, si la webapp ROOT ne fonctionne plus le reste de l’application ne peut plus fonctionner (plus de redirection d’URL). C’est ce qu’on appelle un SPOF (Single Point Of Failure). Pour éviter que des webapps, comme Mapfishapp ou Geonetwork, ne perturbent le fonctionnement du CAS et du ROOT, on isole ces deux webapps. On peut aussi se permettre de n’attribuer que très peu de ressources à l’instance de Tomcat qui les contient. - 22 Julien FRANCOIS - 31/07/2014 Un serveur web en frontal1 Un serveur web est un logiciel permettant de distribuer des pages web à des clients. Nous utilisons le serveur web Apache 2. Une fois l’url validée dans le navigateur, la première étape est le serveur web Apache. Une fois Apache passé, on accède à Tomcat. C’est la configuration par défaut de geOrchestra mais voyons quels sont les avantages d’une telle configuration. D’après E. Langlet [LANGLET, 2008] : Dans une architecture d’entreprise, il est souvent recommandé d’utiliser un serveur Web en frontal d’un serveur d’application. Ces recommandations s’appliquent également dans le cas de l’utilisation d’un conteneur Web JEE comme Tomcat 6, et ce, pour les raisons suivantes : Sécurité : Le serveur Web sert de « bastion » pour les requêtes entrantes dans l’infrastructure, et isole le conteneur Web de l’Internet. Le conteneur Web se trouve également au plus près des données qu’il doit manipuler. Apache propose des paramètres de proxy de sécurité qui nous permettront de solidifier la sécurité de notre application. Performances : le moteur HTTP de Tomcat reste quand même plus lent que le moteur HTTP d’un serveur Web, il n’est qu’un moyen d’invoquer les composants Web JEE dynamiques (Servlet, JSP). Positionné ainsi dans l’infrastructure, le serveur Web a la responsabilité de servir le contenu statique (Pages HTML, images, applets Java, …) d’un site ou d’une application aux clients, alors que Tomcat 6 sert le contenu dynamique et s’occupe de l’intégration avec l’existant du système d’information. En effet, dans notre cas, le contenu statique (page d’accueil) est directement servi par Apache sans solliciter Tomcat. Configurabilité : un serveur Web comme le serveur Apache par exemple, dispose de plus grandes possibilités de configuration (d’un point de vue de la communication HTTP) que Tomcat 6. On profite par exemple d’Apache pour effectuer le load balancing (Voir point ci-dessous) En frontal signifie que les requêtes du client passe par le serveur web avant d’être redirigées (si nécessaires) vers le serveur d’application Tomcat. 1 - 23 Julien FRANCOIS - 31/07/2014 Load balancing geoserver L'équilibrage de charge (parfois appelé répartition de charge ou en anglais load balancing) consiste à distribuer une tâche à un pool de machines ou de périphériques afin : de lisser le trafic réseau, c'est-à-dire de répartir la charge globale vers différents équipements; de s'assurer de la disponibilité des équipements, en n'envoyant des données qu'aux équipements en mesure de répondre, voire à ceux offrant le meilleur temps de réponse. [BERT, 2010] Le load balancing a donc deux objectifs, améliorer les performances en répartissant la charge et doublonner certaines applications sensibles pour qu’elles restent toujours accessibles. Le load balancing se fait avec le module proxy_balancer d’Apache L’algorithme utilisé pour réaliser la répartition de charge est appelé Round-Robin. C’est en fait un algorithme très simple qui envoie une requête au premier serveur, une autre au second puis de retour au premier et ainsi de suite. Utilisée tel quel, cette configuration pose un problème puisque le client perd ses informations de session dès qu’il change de page. Ça n’a pas d’importance quand les échanges se passent uniquement dans le sens serveur–client. En revanche dès que le client a envoyé une information au serveur, celui-ci ne peut pas en tenir compte à la requête suivante. Pour résoudre ce problème, on utilise des affinités de session (sticky session). L'utilisation de cette technologie implique qu'un utilisateur ayant une session active travaillera toujours avec le même serveur : toutes ses requêtes seront traitées par le même serveur. On remarquera que les deux instances de Geoserver partagent le même « geoserver_datadir ». C’est dans ce dossier qu’est stockée toute la configuration (sécurité, user, groupe, connexion aux BDD,…) de Geoserver. Un second problème apparait avec ce dossier. En effet, la configuration est importée au démarrage de Geoserver (donc au démarrage de l’instance de Tomcat), les changements fait sur une instance ne sont donc pas dynamiquement reportés sur la deuxième. Pour résoudre ce problème, un script python a été créé par Camptocamp, il permet de recharger la configuration via l’api REST (pour simplifier l’api REST nous permet ici de lancer des commandes directement via une url1) de Geoserver. Lorsque l’administrateur fait une modification de la configuration, il faut lancer le script pour synchroniser toutes les instances. Un 1 http://host/geoserver/rest/reload?recurse=true - 24 Julien FRANCOIS - 31/07/2014 bouton, permettant d’exécuter le script en mode CGI (script exécuté du coté serveur), a été ajouté à la barre des menus lorsque l’on est connecté en administrateur. D’autres améliorations ? Il existe certes d’autres améliorations pour augmenter la stabilité et la performance de l’application. Celles-ci n’ont pas été adoptées dans notre projet car elles compliquent trop l’architecture pour un apport moindre. Comme pour la question de la résolution d’un raster (il n’y a pas de meilleure résolution, seulement une résolution optimale pour chaque projet), l’architecture doit répondre aux besoins du projet et il ne sert à rien de la surdimensionner (augmentation de la consommation électrique des serveurs, complication de débogage, de mise à jour, etc.) 3.4.2. Matériel / Dimensionnement / Architecture Système La solution retenue se basera sur deux serveurs. Lorsque l’on parle de deux serveurs, il s’agit dans la réalité de deux machines virtuelles distinctes mais virtualisées sur le même serveur physique. Les serveurs seront nommés SRV3SIG et SRV4SIG par la suite. Le serveur physique (matériel) L’applicatif est déployé sur des serveurs DELL R320 (processeur Intel Xeon E5-2420, 6 cœurs). Ces serveurs fonctionnent par paire. En cas de panne d’un serveur physique, les machines s’exécutent sur le deuxième serveur du pool de manière automatique ou bien via une manipulation manuelle (moins de 2 minutes). Le stockage disque et partitionnement Le dimensionnement de l’espace de stockage doit être réfléchit avant la mise en place de l’installation. Il est en effet assez complexe de le modifier une fois la machine virtuelle configurée. Il convient donc de prendre en compte les évolutions futures de la plateforme et ainsi d’anticiper l’augmentation du volume de données à stocker. Il faut aussi partitionner le disque dur. Le partitionnement consiste à créer des zones sur le disque dont les données ne seront pas mélangées. Il permet par exemple de formater uniquement la partie système tout en conservant intacte les autres partitions. La figure ci-après montre le partitionnement et l’espace disque mis en place. - 25 Julien FRANCOIS - 31/07/2014 Figure 7 : Dimensionnement de l'espace disque nécessaire - 26 Julien FRANCOIS - 31/07/2014 La mémoire vive Contrairement au disque dur, la taille de la mémoire vive peut être augmentée ou diminuée assez rapidement et facilement. Pour démarrer, nous avons décidé d’attribuer 3 Go de RAM au serveur SRV3SIG et 4 Go au serveur SRV4SIG. La bande passante Dans le cas d’hébergement en interne, c’est bien souvent le facteur limitant d’un projet informatique ouvert vers l’extérieur. En théorie, les débits disponibles annoncés par le fournisseur sont : o 20 Mbps en download (On reçoit jusqu’à 20Mb par seconde depuis l’extérieur débit entrant) o 1 Mbps en upload (on envoie jusqu’à 1Mb par seconde vers l’extérieur débit sortant) Tous les accès à la plateforme depuis ViennAgglo se font via le réseau interne et ne passent pas par le réseau internet. Cela permet de limier la surcharge du réseau. Cette bande passante limitée est discutée dans la dernière partie du rapport (5.2. Le réseau internet) 3.5. Sécurité La mise en place d’une plateforme accessible depuis l’extérieur via internet implique des règles de sécurité strictes pour éviter toute intrusion dans le système informatique de ViennAgglo. Ce sont ici des questions qui sont gérées principalement par le service informatique, mes connaissances étant très limitées dans le domaine. Je ne détaillerai donc pas tous les mécanismes utilisés ici. De mon côté, j’ai simplement défini que le seul point d’entrée de l’application soit le serveur web Apache de SRV3SIG. Après discussion avec la DSI, le choix a été fait de mettre SRV3SIG dans la DMZ et de laisser SRV4SIG sur le réseau local. Les connexions entre les deux serveurs seront limitées au maximum (on ouvre uniquement les ports utilisés). L’ouverture des ports nécessaires est faite par la DSI. Les échanges entre les deux services ont donc été très importants durant cette partie. - 27 Julien FRANCOIS - 31/07/2014 La DMZ (Demilitarized Zone) est un sous-réseau situé entre le réseau local et Internet. C'est une partie du réseau contenant tous les services accessibles de l'extérieur. Elle est séparée du réseau local par un pare-feu. Cela permet d'avoir une partie du réseau accessible depuis le monde IP sans pour autant laisser l’accès à tout le réseau. Figure 8 : Fonctionnement de la DMZ - 28 Julien FRANCOIS - 31/07/2014 - 29 Julien FRANCOIS - 31/07/2014 IV. Production, maintenance et transfert de connaissances 4.1. Mise en production Cette partie s’attarde sur les aspects pratiques de chargement et mise à disposition des données. 4.1.1. Licence, droits d’accès L’objectif de la plateforme, outre le fait de cataloguer les données, est de pouvoir les partager avec les partenaires et le public. Toutes les données ne peuvent pas être diffusées au grand public. Il convient donc de définir des groupes d’utilisateurs privilégiés qui auront des accès sur certaines données. Cette gestion des droits se fait via deux applications, ldapadmin qui permet de gérer les groupes et les utilisateurs ainsi que Geoserver qui permet de servir des flux WMS et WFS en limitant les accès à certains groupes (voir 4.1.2. Geoserver) Aussi, la mise à disposition des données impose de les mettre sous licence. Plusieurs licences existent pour une diffusion gratuite. Nous avons retenu la licence proposée par Etalab1 : la Licence Ouverte (Open Licence). Cette licence facilite et encourage la réutilisation des données publiques mises à disposition gratuitement. La « Licence Ouverte / Open Licence » présente les caractéristiques suivantes : Une grande liberté de réutilisation des informations : o Une licence ouverte, libre et gratuite, qui apporte la sécurité juridique nécessaire aux producteurs et aux réutilisateurs des données publiques ; o Une licence qui promeut la réutilisation la plus large en autorisant la reproduction, la redistribution, l’adaptation et l’exploitation commerciale des données ; o Une licence qui s’inscrit dans un contexte international en étant compatible avec les standards des licences Open Data développées à l’étranger et notamment celles du gouvernement britannique (Open Government Licence) ainsi que les autres standards internationaux (ODC-BY, CC-BY 2.0). Une exigence forte de transparence de la donnée et de qualité des sources en rendant obligatoire la mention de la paternité. Une opportunité de mutualisation pour les autres données publiques en mettant en place un standard réutilisable par les collectivités territoriales qui souhaiteraient se lancer dans l’ouverture des données publiques. [Etalab, 2014] Service du Premier Ministre chargé de l'ouverture des données publiques et du développement de la plateforme française Open Data. http://www.etalab.gouv.fr/pages/Qui_sommes_nous_-5883786.html 1 - 30 Julien FRANCOIS - 31/07/2014 4.1.2. Geoserver Gestion des couches Geoserver est un serveur cartographique open-source qui permet de publier des couches sous forme de services cartographiques (WMS, WFS, etc.). L’organisation des couches est importante puisque c’est à travers elle que les droits d’accès vont s’appliquer. Trois niveaux de gestion de stockage sont présents dans Geoserver (voir Figure 9) : - Le « workspace » (espace de travail) : il rassemble en générale des couches similaires, qui appartiennent à une même thématique. C’est aussi via ce conteneur que l’on va gérer les droits : on peut décider qui a accès au workspace et de quelle manière (lecture, écriture ou admin). - Le « store » (entrepôt) : les entrepôts sont des connexions aux sources de données. Une source de données peut être un fichier (raster ou vecteur) ou un groupe de fichiers, autant qu’une table dans une base de données (PostGIS). - Le « layer » (couche) : les couches sont les données géographiques à proprement parler. Figure 9 : Architecture de gestion des couches de Geoserver [PennState, 2014] - 31 Julien FRANCOIS - 31/07/2014 A ViennAgglo, nous avons donc décidé de créer un workspace par thématique de données. Ce workspace pourra être doublonné pour permettre des accès restreint à certaines couches. Par exemple : Le workspace cadastre_public contiendra les couches du cadastre avec seulement la géométrie (pas d’information nominative, ni numéro de parcelle). Les couches présentes pourront être diffusées au grand public et sans création de compte sur geo.viennagglo.fr Le workspace cadastre_privé contiendra les couches du cadastre avec la totalité des attributs. En revanche, son accès sera permis uniquement aux personnes autorisées par le service SIG. Création des styles La publication de couche WMS implique la création de style. En effet les tuiles affichées par le client doivent être esthétiques et compréhensibles. Au-delà de l’aspect esthétique, les styles doivent être optimisés pour ne pas surcharger Geoserver. Quelques règles doivent être respectées [GeoSolutions, 2013] : - Ne pas afficher plus de 1000 entités - Afficher les couches uniquement au zoom utile (ne pas afficher les parcelles à l’échelle régionales) - Eviter la transparence - Montrer les détails progressivement (Label à certaines échelles) 1/125 000ème 1/30 000ème Figure 10 : Style appliqué au stationnement vélo - 32 Julien FRANCOIS - 31/07/2014 1/10 000ème 4.1.3. Geonetwork Les métadonnées La gestion d’un catalogue de données et la rédaction de métadonnées n’est pas une chose aisée et il est facile de se perdre entre la multitude de champs présents dans GeoNetwork et le flou toujours persistant autour de la directive INSPIRE. Certaines entités, comme Cigalasce, préfèrent ne pas utiliser le mode édition de métadonnées de Geonetwork et utilise une feuille Excel avec uniquement les champs obligatoire pour INSPIRE. Cette feuille doit ensuite être transformée, via une application, au format xml. Ce fichier xml pourra ensuite être intégré dans Geonetwork. Nous préfèrerons le mode d’édition natif de Geonetwork. Pour faciliter les prochaines entrées, une fiche de métadonnée type a donc été rédigée pour servir de modèle [CNIG, 2013]. La mise à disposition L’accès aux données via Geonetwork se fait de plusieurs manières pour les données vectorielles : - Mise à disposition d’un flux WMS (avec accès direct au visualiseur de geOrchestra) - Visualisation sur un visualiseur simplifiée - Téléchargement d’un dossier zippé contenant la couche au format Shapefile via un flux WFS Ces différentes méthodes d’accès correspondent au degré d’expertise et au besoin de l’utilisateur. Acces Mapfish Visualiseur simple Dossier zip Figure 11 : Mise à disposition des données dans Geonetwork - 33 Julien FRANCOIS - 31/07/2014 Flux WMS 4.2. Maintenance La mise en place de ce type de solution nécessite un suivi technique. Le projet étant en constante évolution, celui-ci nécessite des mises à jour pour profiter du meilleur produit disponible. La défaillance d’une partie du système est possible, il faut donc que le service SIG soit capable de comprendre le problème et de relancer l’application le plus facilement possible. 4.2.1 Détecter des défaillances Il peut arriver que la plateforme comporte des bugs ou que certaines parties de celle-ci subissent un crash. Pour résoudre ces problèmes, différents fichiers logs permettent d’identifier la source du problème. Pour faciliter l’accès aux logs, j’ai ajouté une petite interface en ligne pour les consulter (Bootstrap + jQuery +Ajax pour la partie cliente, python en CGI pour la partie serveur). Figure 12 : Capture de l'interface de consultation des logs 4.2.2 Redémarrer les services Une fois le problème détecté et résolu, l’application en question doit être relancée. Pour les différentes instances de Tomcat, un service (daemon) a été créé pour permettre un redémarrage plus facile via une seule commande (service tomcat60d start|stop|restart). - 34 Julien FRANCOIS - 31/07/2014 4.2.3. Compilation des sources Pour prendre en compte les modifications dans la configuration de geOrchestra, il faut recompiler les sources (avec Apache Maven). Cette compilation génère des fichiers « *.war », formats d’archives contenant une application web destinée à un serveur d’application (Tomcat). Une fois créés, les fichiers war doivent être déployés sur leur instance de Tomcat et pour automatiser ce déploiement, un script bash a été conçu (partie « Codes » de la documentation disponible en Annexe 4). 4.2.4. Processus de mise à jour Les développeurs de geOrchestra ont programmé un rythme d’environ 2 versions par an. En plus de corriger les bugs déclarés par les utilisateurs, celles-ci permettent d’ajouter de nouvelles fonctionnalités à l’outil. Les développeurs mettent à disposition un fichier des instructions pour migrer correctement son application. J’ai pu réaliser la mise à jour de geOrchestra de la version 14.01 à 14.061. Le changement de version était assez bien documenté, la transition s’est faite assez facilement. C’est avec cette version que nous avons mis à disposition de la communauté notre documentation d’installation multi-instances de geOrchestra en Licence Ouverte (Disponible en Annexe 4). 4.3. Documentation utilisateur 4.3.1. Sensibiliser à la géomatique La mise en place de la plateforme est aussi un moyen de mettre en avant et de faire connaitre la géomatique au grand public. Ainsi, plusieurs vidéos ludiques sont directement ajoutées à la page d’accueil : Un épisode de « C’est pas sorcier » sur la cartographie, le film « Geospatial Revolution » réalisé par le Penn State Public Broadcasting ou encore un épisode du « Dessous des cartes ». 4.3.2. Documentation technique Les possibilités offertes par geOrchestra en font un outil SIG à part entière et nécessite donc un apprentissage de son fonctionnement. De nombreuses documentations ont été réalisées sur les différentes plateformes déjà en production. Celles-ci peuvent prendre plusieurs formes. GéoBretagne met, par exemple, des kits de formation permettant aux personnes de s’auto-former, CIGAL met en ligne des manuels d’utilisation et Camptocamp propose des tutoriels vidéo. Les documentations produites par les 1 http://www.georchestra.org/blog/2014/07/10/version-14.06/ - 35 Julien FRANCOIS - 31/07/2014 régions concernent aussi bien l’utilisateur que le producteur de données. Nous ne sommes intéressés que par la partie utilisateur de données (consommateur), puisque la seule entité à produire des données à ViennAgglo est le service SIG (qui est déjà formé !). Les vidéos de Camptocamp ont été ajoutées directement au site puisqu’elles traitent du fonctionnement utilisateur des applications de geOrchestra. Ensuite, nous avons demandé à la région Bretagne s’il était possible d’utiliser leur kit de formation comme base pour notre documentation, leur réponse a été favorable. Nous avons donc utilisé leurs supports pour créer des diaporamas explicatifs en ligne avec la bibliothèque (http://viennagglo.github.io). - 36 Julien FRANCOIS - 31/07/2014 Javascript Reveal.js - 37 Julien FRANCOIS - 31/07/2014 V) Perspectives, évolution Du fait de sa modularité, geOrchestra peut être modifié pour s’adapter au besoin des utilisateurs. Les perspectives d’évolution dépendent beaucoup des retours sur l’utilisation et du public concerné. On peut cependant émettre certaines remarques sur la solution mise en place. Les échanges que nous avons eus avec les autres développeurs/utilisateurs de geOrchestra lors du GeoCom (Voir Annexe 2 le programme du meeting) nous ont permis d’avoir des premiers retours d’utilisation. Ces retours viennent en majorité de structures régionales, donc avec des charges beaucoup plus importantes que nous. 5.1. Trop complexe pour une majorité ? Les outils proposés par geOrchestra permettent une utilisation avancée des données. Le visualiseur en est l’exemple parfait, il permet par exemple de définir des styles personnalisés, de réaliser requêtes attributaires et spatiales ou encore d’éditer les données. Ce sont des fonctions présentes dans les logiciels desktop classiques utilisés par les géomaticiens. Est-ce que ces outils ne sont pas trop complexes pour un public non expert ? Lors du meeting annuel des utilisateurs et développeurs de geOrchestra (le GeoCom), les responsables du projet GeoBretagne annoncent que 90 % des utilisateurs de leur plateforme ne sont pas experts et que le visualiseur est trop complexe pour ces personnes. Il n’est pas question de remettre en cause la pertinence de celui-ci, il est utile pour les 10% qu’il reste, qui sont experts. En revanche, comment réussir à rester accessible à tous ? Pour répondre à cette demande, différents autres visualiseurs voient le jour ces dernier temps : - Le Sviewer (simple viewer) permet l’affichage d’une seule couche déjà stylisée - le Mviewer (middle viewer) permet d’afficher plusieurs couches préconfigurées (pas de services en plus). La problématique est de réussir à intégrer ces niveaux de complexité sans perdre l’utilisateur dans des choix multiples de visualiseur. A ViennAgglo, nous utilisons déjà le Sviewer pour les aperçus à partir de Geonetwork. Autre application disponible dans geOrchestra, l’extracteur. Celui-ci permet d’extraire des données sur une emprise rectangulaire dans un format et une projection que l’on choisit. C’est un outil qui va être réservé aux experts puisqu’on rentre dans des notions de projection et de formats de données. Je ne suis pas convaincu de la pertinence de cet outil pour ViennAgglo. Je pense - 38 Julien FRANCOIS - 31/07/2014 qu’un des objectifs est d’encourager au maximum les partenaires à utiliser des flux WMS et WFS pour obtenir les données. L’enjeu est de leur faire comprendre qu’une fois l’URL entrée dans leur logiciel, il n’y a plus à se préoccuper de la mise à jour et de la validité des données. Pour les personnes qui souhaitent absolument avoir les données en local, le WFS permet de télécharger des fichiers Shape zippé. Exemple de WFS fournissant un shape zippé : http://geo.viennagglo.fr/geoserver/wfs?service=wfs&version=1.0.0&request=getFeature&typeName=transport :capv_transport_arret&outputFormat=shape-zip 5.2. Le réseau internet La solution est actuellement hébergée à ViennAgglo qui n’est pas rattaché au réseau par la fibre mais par ADSL et SDSL. En fonction de la popularité de la plateforme (saturation du réseau), il faudra peut-être envisager de l’externaliser ou bien de réaliser les travaux pour apporter la fibre. En effet, le temps de réponse d’un site est un élément essentiel à la fidélisation d’un client. Selon des enquêtes effectuées par Gomez et Akamai, près de la moitié des internautes s'attendent à ce qu'un site se charge en 2 secondes voir moins, et ils ont tendance à abandonner un site qui n'est pas chargé dans les 3 premières secondes. 80% des acheteurs sur le web qui ne sont pas satisfaits des performances du site disent qu'ils ne reviendront pas sur le même site pour acheter à nouveau et plus d'un tiers ont parlé aux autres de leur mauvaise expérience. [Weboxeur, 2014] 5.2.1. La fibre L’installation de la fibre dans plusieurs villes ou agglomération du département Isérois est en cours de discussion. Si ces discussions arrivent à terme, ViennAgglo pourrai être équipé en fibre d’ici quelques années. 5.2.2. Hébergement externe Concernant l’hébergement externe, plusieurs étapes sont envisageables. La première étape serait d’héberger sur un serveur très peu couteux (du type Kimsufi1) le cache de nos tuiles. Ainsi les données en cache utilisées dans le visualiseur ne passeraient plus par ViennAgglo et soulageraient donc le réseau. Ce type de serveur est peu cher car il n’y a aucun service derrière (backup, hotline, dépannage, etc.) et ils ne sont pas puissant (2 Gb de RAM, processeur Intel Atom pour le moins chers). La puissance et les services sont utiles lorsque l’on héberge des applications mais pour stocker du cache, il est inutile d’avoir un serveur très puissant 1 https://www.kimsufi.com/fr/index.xml - 39 Julien FRANCOIS - 31/07/2014 mais plutôt un bon débit internet et un bon disque de stockage, c’est le cas ici (100Mbps et 500Go pour le basique). Le prix de départ est 5€/mois HT. La seconde étape serait d’héberger toute l’application sur un serveur dédié externe. Cette fois il faut se tourner vers un service comprenant des garanties de disponibilité, des services de sauvegarde et de dépannage. Chez OVH1, les serveurs dédiés de base (largement suffisant en terme de puissance pour héberger notre application) démarrent à 82 €/mois HT (hors frais d’installation) en revanche les services proposés ne comportent pas de restauration de système en cas de crash. Il faut prévoir 2400€/an environ pour un serveur suffisant pour notre plateforme. 5.3. Automatiser l’administration Actuellement, toutes les actions de gestion des applications (compilation, déploiement, redémarrage, etc.) doivent être réalisées via une console SSH (connexion à distance sur le serveur). Des scripts et services ont certes été créés pour faciliter leur exécution, mais on continue avec des lignes de commande et uniquement sur les postes de ViennAgglo. L’étape suivante serait de pouvoir gérer toute ces actions via une interface web. GeoBretagne utilise par exemple l’outil Jenkins2 pour monitorer son serveur. 5.4. Métadonnées Maintenant que le catalogue est fonctionnel, un gros travail de documentation des données existantes est nécessaire. Cette charge de travail ne pourra probablement pas être absorbée par l’équipe actuelle, il faudrait envisager d’ajouter une personne temporairement au service. Une fois le retard rattrapé, le service SIG devra prendre le « reflexe métadonnée » pour chaque donnée créée. Cette charge de travail supplémentaire pourra, quant à elle, normalement être absorbée. 1 2 http://www.ovh.com/fr/serveurs_dedies/enterprise/ http://jenkins-ci.org/ - 40 Julien FRANCOIS - 31/07/2014 - 41 Julien FRANCOIS - 31/07/2014 Conclusion A la fin du stage, ViennAgglo a donc une solution technique opérationnelle, basée sur geOrchestra, et prête à être mise en production. Avec la plateforme on a donc accès à un outil de catalogage des données, un visualiseur avancé, un serveur cartographique, un extracteur de données et des outils d’administration. Toutes ces fonctionnalités permettent à la plateforme de répondre à la directive INSPIRE et de s’articuler avec les autres plateformes du territoire. De plus, des modèles de métadonnées ont été produites pour servir de modèles aux prochaines données renseignées. Enfin, une documentation, de toute la procédure de mise en place de geOrchestra, a été rédigée. Celle-ci a été diffusée à toute la communauté geOrchestra et est disponible sous Licence Ouverte en Annexe 4 ou sur GitHub1. ViennAgglo doit maintenant faire face à différents enjeux. D’abord, la plateforme doit être validée par les élus de l’agglomération. Pour ça, une note est en cours de validation par le directeur général adjoint des services avant d’être transmise aux élus (la note est consultable en Annexe 3). Ensuite, une procédure de demande de financement est en cours avec le chargé de mission Politiques territoriales. La communication de l’ouverture de la plateforme se fera en premier lieu sur l’AggloMag (Magazine trimestriel tiré à 32 000 exemplaires et distribué sur toute l’agglomération). Ensuite le site de ViennAgglo offrira un accès à la plateforme. Enfin, le dernier enjeu de taille est la rédaction des métadonnées pour toutes les données. Cette rédaction ne pourra pas se faire avec les moyens humains actuellement présent. Il sera donc nécessaire de se doter de moyen humain supplémentaire, actuellement c’est la piste d’un stage qui est envisagé. L’objectif du stagiaire serait de rencontrer les services commanditaires des données présentes dans la base actuelle et de savoir si ceux-ci sont intéressés par une mise à jour, une publication ou un abandon. De plus celui-ci devra aussi entrer les métadonnées dans le catalogue, travailler sur la conformité avec INSPIRE et sur les conditions de mise à disposition. D’un point de vue personnel, ce stage m’a apporté les différents éléments qu’ils me manquaient en sortant du Master : des connaissances sur les mécanismes liés au fonctionnement des serveurs. J’ai pu découvrir la distribution Linux Debian, les différents protocoles d’échange et d’identification (ssh, IP, http, ssl, ports d’écoute, etc.) ou encore, comment configurer un serveur web et un serveur d’application. D’un point de vue applicatif, j’ai pu découvrir la solution geOrchestra et tous les logiciels qui la composent (Geoserver, Geonetwork, mapfish,etc.). D’un point de vue moins technique, j’ai pu prendre le temps de comprendre la directive INSPIRE et 1 https://github.com/viennagglo/georchestra-doc - 42 Julien FRANCOIS - 31/07/2014 de rédiger des métadonnées conformes. Finalement, ce stage s’est présenté comme un excellent complément à mon année de master 2. - 43 Julien FRANCOIS - 31/07/2014 Bibliographie Document & Livres CNIG, Groupe de travail « Métadonnées ». Guide de saisie des éléments de métadonnées INSPIRE (Version 1.1). 2013 GeoSolutions. GeoServer on steroids. FOSS4G 2013, Nottingham 20/09/2013 Langlet, É. Apache Tomcat 6: guide d’administration du serveur Java EE sous Windows ou Linux. (Editions ENI, 2008). Sites Web Bert L. Tutoriel : Load balancing avec Apache et Tomcat. http://java4it.blogspot.fr/2008/09/tutorielload-balancing-avec-apache-et.html, [consulté le 27/05/2014] DynMAP, Actualités, http://www.dynmap.com/actualites/, [consulté le 23/04/2014] Etalab, Licence Ouverte / Open Licence, http://www.etalab.gouv.fr/pages/licence-ouverteopen-licence-5899923.html, [consulté le 09/07/2014] Geonetwork, Moissonage, http://geonetwork-opensource.org, [consulté le 21/05/2014] IGN, Présentation INSPIRE, http://inspire.ign.fr/directive/presentation, [consulté le 14/04/2014] OGC, Forum Français de l’OGC, http://www.forumogcfrance.org/Interoperabilite-et- OGC/Specifications-OGC/, [consulté le 27/05/2014] PennState, GeoServer Admin Interface and Concepts, https://www.e-education.psu.edu/cloudGIS/node/53, [consulté le 09/07/2014] Weboxeur, Pourquoi le Temps de Chargement de vos Pages http://weboxeur.com/temps-de-chargement/, [consulté le 03/07/2014] - 44 Julien FRANCOIS - 31/07/2014 est Important, Listes des figures FIGURE 1 : CARTE DE PRESENTATION DE VIENNAGGLO (SOURCE : PLAQUETTE D’INFORMATION VIENNAGGLO) .............................. 4 FIGURE 2 : COMPLEMENTARITE DYNMAP/GEORCHESTRA ................................................................................................. 14 FIGURE 3 : ETAT D’AVANCEMENT DES PROJETS DE CATALOGUE DANS LES EPCI ....................................................................... 15 FIGURE 4 : BARRE DE NAVIGATION DE L'APPLICATION ........................................................................................................ 19 FIGURE 5 : ARCHITECTURE FINALE RETENUE ..................................................................................................................... 21 FIGURE 6 : FONCTIONNEMENT DE LA SOLUTION ............................................................................................................... 21 FIGURE 7 : DIMENSIONNEMENT DE L'ESPACE DISQUE NECESSAIRE ........................................................................................ 26 FIGURE 8 : FONCTIONNEMENT DE LA DMZ ..................................................................................................................... 28 FIGURE 9 : ARCHITECTURE DE GESTION DES COUCHES DE GEOSERVER [PENNSTATE, 2014] ...................................................... 31 FIGURE 10 : STYLE APPLIQUE AU STATIONNEMENT VELO .................................................................................................... 32 FIGURE 11 : MISE A DISPOSITION DES DONNEES DANS GEONETWORK................................................................................... 33 FIGURE 12 : CAPTURE DE L'INTERFACE DE CONSULTATION DES LOGS..................................................................................... 34 - 45 Julien FRANCOIS - 31/07/2014 Table des annexes ANNEXE 1 : EVOLUTION DE L'ARCHITECTURE DE LA SOLUTION ............................................................................................. 47 ANNEXE 2 : PROGRAMME GEOCOM 2014 ..................................................................................................................... 50 ANNEXE 3 : NOTE A DESTINATION DES ELUS..................................................................................................................... 51 ANNEXE 4 : DOCUMENTATION INSTALLATION GEORCHESTRA .............................................................................................. 52 - 46 Julien FRANCOIS - 31/07/2014 Annexe 1 : Evolution de l'architecture de la solution Cette annexe présente l’évolution de l’architecture logicielle au cours du projet. En générale un changement de machine virtuelle entrainait une amélioration de l’architecture. 1) Architecture n°1 (VM1) Toutes les applications sont concentrées sur un seul serveur et toutes les webapps sont dans une seule instance de Tomcat. La base de données est une base interne. C’est la solution décrite sur le dépôt GitHub de geOrchestra. 2) Architecture n°2 (VM 2) Ici, une première répartition des webapps intervient. On créé des instances de Tomcat pour répartir la charge et augmenter la stabilité. - 47 Julien FRANCOIS - 31/07/2014 3) Architecture n°3 (Mise en situation). Premier test sur serveurs réelles, cette fois en plus d’être séparé on isole sur un autre serveur l’instance de Tomcat hébergeant Geoserver. On accède aussi directement à la base de données existante de ViennAgglo. - 48 Julien FRANCOIS - 31/07/2014 4) Architecture 4 (finale) On rajoute ici un load balancing sur les deux instances de Geoserver pour anticiper une éventuelle panne sur l’une des deux. - 49 Julien FRANCOIS - 31/07/2014 Annexe 2 : Programme GeoCom 2014 - 50 Julien FRANCOIS - 31/07/2014 Annexe 3 : Note à destination des élus - 51 Julien FRANCOIS - 31/07/2014 Direction de l’Aménagement Urbain Information Géographique Jean-Luc PONTIER S/C Isabelle FONTIVIELLE Mise en place d’une plate-forme de catalogage et de diffusion des données géographiques 10 Juillet 2014 Destinataire : Samuel RIBLIER - Directeur Général Adjoint des Services et du PSDT Plan de la note : I- Motivations du projet I-1 La connaissance patrimoniale et l’environnement juridique I-2 Les aspects sociaux économiques II-Les moyens d’amélioration et d’évolution de la plateforme II-1 Des moyens techniques pour prévoir une montée en charge progressive II-2 Des moyens humains en adéquation II-3 Les questions ANNEXE 1 L’OPENDATA ANNEXE 2 Pages d’accueil de la plate-forme geo.viennagglo.fr ANNEXE 3 Exemple de fiche de métadonnées Pour faire face à la montée en charge de notre système d’information géographique et aux besoins de l’intercommunalité, le service SIG et Observatoires a entrepris de centraliser progressivement les données dans une base unique. Par ailleurs, il envisage depuis quelque temps de mettre en place un catalogue informatique de métadonnées1 géographiques. Ce projet est motivé par le besoin de connaître notre patrimoine de données, son organisation et les contraintes règlementaires de diffusion qui s’imposent à nous, comme la directive Européenne INSPIRE ou le futur portail national de l’urbanisme. Pour cela nous avons fait le choix d’installer une plateforme diffusion des données géographiques. Elle nous permettra à la informations disponibles à travers d’autres plateformes comme celle Alpes (GeoRhonealpes), auprès de nos partenaires ou d’accéder à travers d’autres catalogues. de catalogage et de fois de rendre nos de la région Rhônedes informations au Il convient tout d’abord d’aborder les motivations du projet entrepris par le service SIG dans ce domaine, puis les moyens d’amélioration et d’évolution de la plate-forme. Cela soulève cependant des questions que nous allons proposer à la validation des élus. 1 Une métadonnée est une donnée servant à définir ou décrire une autre donnée quelque soir son support (papier ou électronique). 1 I- Motivations du projet Pour la plupart des collectivités qui ont mis en œuvre un système de catalogage2, les principaux arguments sont : la connaissance patrimoniale des données, les aspects sociaux économiques, la nécessité de répondre aux prescriptions juridiques. I-1 La connaissance patrimoniale et l’environnement juridique Les collectivités territoriales sont des acteurs incontournables dans la production de données géographiques. A ce titre, nous avons effectivement produit ou agrégé tout un patrimoine d’informations thématiques qu’il nous appartient d’inventorier, de cataloguer et de diffuser, par exemple : les boucles cyclo touristiques, les zones d’activité et leur signalétique, le balisage des sites d’hébergement, la gestion de l’ambroisie, la gestion des réseaux d’assainissement, la collecte de déchets … De plus, l’environnement juridique nous y contraint et en particulier la Directive Européenne INSPIRE. En effet, partant du constat que les phénomènes ne s’arrêtent pas aux frontières, cette directive, transposée en droit français en 2009 vise à établir une infrastructure pour assurer l’interopérabilité3 entre les bases de données géographiques des pays de l’union. La directive précise pour chaque thème les modalités de mise en œuvre, en termes d’interopérabilité, de normalisation et les délais à respecter pour y parvenir. Au niveau national, on citera la création d’un Géoportail de l’urbanisme qui obligera dès le 1er janvier 2016 l’ensemble des communes et groupement de transmettre « à l’Etat sous format électronique, au fur et à mesure des modifications de leurs dispositions, la version en vigueur des schémas de cohérence territoriale, des plans locaux d’urbanisme, des documents en tenant lieu et des cartes communales applicables sur leur territoire incluant les délibérations les ayant approuvés ». Par ailleurs, la modernisation des politiques publiques entreprise par l’Etat tend vers l’ouverture des données au travers notamment du concept de l’Open-Data4. En effet, cette tendance se traduit dans l’article 29 du projet de loi de développement des solidarités territoriales et de la démocratie locale, qui vise, dans le cadre fixé par la loi du 17 juillet 1978 (CADA*), « à rendre obligatoire pour les collectivités territoriales de 3500 habitants et plus ainsi que, pour les établissements publics de coopération intercommunale à fiscalité propre auxquels elles appartiennent, la mise à disposition de données publiques dont elles disposent au format électronique par une mise en ligne sur leur site internet ». 2 Un logiciel de catalogage est capable de parcourir le réseau pour rechercher des données thématiques disponibles à travers d’autres catalogues. Un catalogue peut aussi être moissonné : c’est-à-dire qu’on l’autorise à fournir des informations cataloguées vers l’extérieur. 3 L’interopérabilité est la capacité que possède un produit ou un système, dont les interfaces sont intégralement connues, à fonctionner avec d’autres produits ou systèmes existants ou futurs et ce sans restrictions d’accès ou de mise en œuvre. 4 Open data : l’ouverture des données (en anglais Open data) représente à la fois un mouvement, une philosophie d’accès à l’information et une pratique de publication de données librement accessibles et exploitables. 2 I-2 Les aspects sociaux économiques Les technologies de l’information et des communications (TIC) notamment « internet » ainsi que les applications et technologies « mobiles » se développent à grande vitesse et facilitent l’accès aux données. Il en est de même, qu’elles soient produites par les collectivités ou issues de contributeurs externes. Un nombre croissant de données sont ainsi consultables ou téléchargeables à partir de plates-formes publiques telles que Géobretagne, PIGMA ou GéoRhonealpes ou associatives (privées) comme le projet « OpenStreetMap ». En effet, ce site propose une cartographie des voies de communications et il est nourri par des utilisateurs répartis dans le monde entier. Nous devons saisir ces opportunités pour proposer aux communes, partenaires et usagers des services nouveaux, synonymes de proximité, de limitations des déplacements, de meilleures informations aux citoyens et d’économies d’échelle. La mise en place d’un catalogue et d’une plate-forme de diffusion favorise également la participation citoyenne et collaborative en associant les personnes à nos projets ; on citera par exemple : l’implantation de points d’apport volontaire de déchets, l’implantation de stationnements vélo, On s’oriente donc vers des services innovants développés pour les usagers où une expertise citoyenne peut s’exprimer et un marché se développer. Le monde économique est de plus en plus consommateur du web et la réutilisation des données publiques peut créer des retombées non négligeables. C’est le cas de la « base Adresse » qui alimente les répertoires d’entreprises ou des applications de géolocalisation, de la cartographie des commerces et des services mobiles à travers le potentiel des smartphones. La commission Européenne estime le marché des données publiques à 27 milliards d’Euros. II-Les moyens d’amélioration et d’évolution de la plateforme II-1 Des moyens techniques pour prévoir une montée en charge progressive En 2012, le service informatique de ViennAgglo, a mis à la disposition du SIG une solution matérielle suffisamment dimensionnée pour héberger à la fois les données et les solutions logicielles avec une anticipation des capacités techniques. Elle a également été prévue pour être utilisée comme serveur internet et ainsi permettre la diffusion ultérieure des informations à travers le catalogue de métadonnées. La partie matérielle installée et éprouvée, nous avons réfléchi aux solutions logicielles de catalogage et de diffusion. Nous avons donc orienté notre choix vers des technologies open source5 avec la solution « GeOrchestra » dont le développement a été commandé par la région Bretagne dans le courant de l’année 2010. Les principales raisons qui ont motivé ce 5 Open source : La désignation open source, ou « code source ouvert », s'applique aux logiciels dont la licence respecte des critères précisément établis par l'Open Source Initiative, c'est-à-dire les possibilités de libre redistribution, d'accès au code source et de créer des travaux dérivés. 3 choix sont le modèle économique et la communauté de développement de GeOrchestra, le respect des normes internationales préconisées par la directive INSPIRE, l’interopérabilité, ainsi que des modèles de plates-formes qui ont été développées. Pour la partie catalogage, GeOrchestra utilise l’application « GeoNetwork », accompagnée d’un extracteur destiné aux téléchargements. La solution permettra aussi de gérer la confidentialité des données à l’aide d’un module d’administration des droits. Dans un premier temps, la plate-forme sera hébergée dans les locaux de ViennAgglo. La seule interrogation réside dans le dimensionnement et le débit des lignes ADLS alimentant le bâtiment Antares. Pour éviter les frais liés à la création d’un nom de domaine, la plate-forme portera celui de « geo.viennagglo.fr ». II-2 Des moyens humains en adéquation Le service SIG et Observatoires est doté de deux personnes et l’utilisation des solutions open source et technologies web font partie de la vie quotidienne du service. La compétence dans ce domaine existe donc en interne. Cependant, la charge de travail n’a pas permis de dégager le temps nécessaire pour mettre en place une telle solution. Nous avons donc envisagé deux possibilités, l’aide d’un prestataire de services ou le recrutement d’un stagiaire de niveau ingénieur avec le potentiel adéquat. Bien que plus aléatoire et risquée, nous avons choisi la deuxième solution. C’est l’argument économique qui a été déterminant mais il a été long et difficile de trouver le bon profil. Après neuf mois de consultations, nous avons recruté pour une durée de 5 mois une personne en Master II SIG et Aménagement de l’espace de l’université de Saint-Etienne. Ses missions sont les suivantes : L’installation du système et la configuration des solutions logicielles telles qu’un serveur de données géographiques et toute la suite logicielle « GeOrchestra », La gestion administrative des données, Le développement des pages d’interfaces, La documentation des paramétrages des briques logicielles et des sources pour le transfert de compétence, La saisie de fiches du catalogue. Le travail collaboratif effectué entre les personnels du service SIG et le stagiaire a permis l’installation de la plate-forme qui est en cours de mise au point. A son départ, fin juillet 2014, le service SIG disposera de tous les moyens nécessaires à sa pérennisation. La suite du projet consistera à finaliser et à maintenir la plate-forme. C’est-à-dire : enrichir l’application de toutes les ressources géographiques que nous possédons, en passant par la donnée géographique brute aux cartes au format PDF réalisées pour les services de ViennAgglo. 4 Il sera peut-être utile de réviser notre mode d’hébergement si celui-ci impacte les performances de la plateforme. A cette occasion, nous allons tirer parti de cette dynamique pour intensifier la diffusion des données produites par ViennAgglo et relancer des projets métiers comme les observatoires. A terme, nous disposerons d’une plateforme de catalogage et de diffusion de données géographiques basée sur des techniques ouvertes et interopérables. Les informations seront donc visibles et téléchargeables en fonction des droits qui seront attribués aux utilisateurs et/ou aux données. Il en sera de même pour le personnel de ViennAgglo lorsqu’il cherchera des informations situées sur d’autres plates-formes. Nous respecterons donc les contraintes juridiques et adhérerons à la démarche globale de libération et de réutilisation des données publiques. Ces moyens contribueront à accroitre notre rôle économique et à faire vivre nos données. II-3 Les questions La plate-forme de diffusion et de catalogage est quasiment opérationnelle et nous disposons de moyens pour poursuivre son développement. Nous avons évoqué ci-dessus les arguments qui justifient sa mise en place. Cependant nous devons faire valider la poursuite du projet tout en précisant certains éléments. Sur l’aspect humain, le suivi et la mise en place des données de ViennAgglo dans le système ne nécessitent pas de moyens supplémentaires. Ce travail peut être absorbé par l’équipe actuelle. Il subsiste cependant les opérations très importantes de documentation des fiches du catalogue. Nous envisageons de confier ce travail à un stagiaire dans le cadre d’un sujet qui porterait sur : l’inventaire et la définition de la pertinence des données en relation avec les services et les partenaires, la détermination des droits et des conditions juridiques et financières de leur diffusion, la conformité à INSPIRE et le choix de la licence de diffusion. Sur l’aspect matériel, comme indiqué précédemment, les outils et les capacités de stockage sont suffisants. Cependant, nous risquons à terme de ne pas disposer d’un débit entrant/sortant suffisant lorsque la plate-forme montera en puissance. C’est pourquoi nous préconisons de sous-traiter l’hébergement de la solution chez un prestataire externe (type OVH). Le coût annuel de ce service est estimé à 2400,00 € Hors TVA. *Références Loi n° 78-753 du 17 juillet 1978 portant diverses mesures d’amélioration des relations entre l’administration et le public, modifiée par l’ordonnance 2005-650 du 6 juin 2005 relative à la liberté d’accès aux documents administratifs et à la réutilisation des informations publiques. Et en particulier le chapitre II de la loi. Directive européenne n°2003/98/CE du 17 novembre 2003 concernant la réutilisation des informations du secteur public (transposée par l’ordonnance de 2005). Décret n° 2005-1755 du 30 décembre 2005, Titre III concernant la réutilisation. Circulaire du Premier ministre n° 5156/SG du 29 mai 2006. 5 ANNEXE 1 L’OPENDATA 6 ANNEXE 2 Pages d’accueil de la plate-forme geo.viennagglo.fr 7 ANNEXE 3 Exemple de fiche de métadonnées 8 9 Annexe 4 : Documentation installation geOrchestra Pour la mise en place de cette documentation le logiciel Sphinx a été utilisé. Sphinx est un logiciel libre de type générateur de documentation. Il s'appuie sur des fichiers au format rst (reStructuredText), qu'il convertit en HTML, PDF, man, et autres formats. Il a été développé par Geord Brandl pour la communauté Python en 2008. (Wikipedia) Pour générer une documentation avec Sphinx tout se passe dans un ou plusieurs fichiers *.rst. Ensuite il suffit de compiler ces fichiers en choisissant un type de fichier de sortie (html pour en faire un site web, LaTeX pour générer ensuite un pdf, …) - 52 Julien FRANCOIS - 31/07/2014 geOrchestra Documentation Release 2.0 Julien July 28, 2014 CONTENTS 1 Introduction 1 2 Configuration des serveurs 2.1 Logiciels prérequis . . . . . . . . . 2.2 Configuration PostgreSQL/PostGIS 2.3 LDAP (Serveur 1) . . . . . . . . . 2.4 APACHE 2 (Serveur 2) . . . . . . . 2.5 APACHE 2 (Serveur 1) . . . . . . . 2.6 JAVA (serveur 1&2) . . . . . . . . 2.7 TOMCAT (serveur 1&2) . . . . . . 2.8 GDAL/OGR/JAI . . . . . . . . . . . . . . . . . . 3 3 3 3 4 4 8 8 11 3 Georchestra 3.1 Point de départ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Deploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 13 13 4 Configuration 4.1 shared.maven.filter 4.2 analytics . . . . . 4.3 cas-server-webapp 4.4 extractorapp . . . 4.5 geoserver-webapp 4.6 header . . . . . . 4.7 LDAP Admin . . . 4.8 mapfishapp . . . . 4.9 security-proxy . . . . . . . . . . . 15 15 15 15 15 16 16 16 16 16 5 Gestion des addons 5.1 Cadastre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Loupe Orthophoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 20 6 Mise à jour 14.06 6.1 Dossier de configuration . . 6.2 Migration base geonetwork 6.3 Supressions des “-privates” 6.4 LDAP . . . . . . . . . . . . . . . . 23 23 24 25 25 Codes 7.1 Création de la base PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i 7.2 7.3 8 ii Code Python CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Script de compilation & deploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 31 Memo, pense-bête 8.1 Fonctionnement du proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Accès privé aux couches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Créer un service tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 35 35 36 CHAPTER ONE INTRODUCTION Cette documentation a pour but de décrire la mise en place de la plateforme geOrchestra suivant l’architecture cidessous. Cette architecture est composée de deux serveurs* et les webapps de geOrchestra sont divisées sur quatres instances de Tomcat. Le serveur 2 met en place un load balancing entre deux instances de Tomcat contenant chacunes un Geoserver. La rédaction de cette documentation est passée par la mise en place de plusieurs machine virtuelle et a pour base la documentation disponible sur le dépot geOrchestra de GitHub. Elle n’est pas exhaustive et a été rédigé par prise de notes. Avant d’entrer à proprement dit dans l’installation de geOrchestra, il est necessaires de configurer les serveurs. Serveur Linux sous Debian 7.4 Ce travail est ditribué sous licence Licence Ouverte 1 geOrchestra Documentation, Release 2.0 Figure 1.1: Architecture de la solution. 2 Chapter 1. Introduction CHAPTER TWO CONFIGURATION DES SERVEURS 2.1 Logiciels prérequis Avant de commencer avec les logiciels requis, quelques logiciels facultatifs pour le confort de travail: • Openssh pour travailler avec putty • Samba pour partager les dossiers avec le poste de travail • Postfix comme serveur mail apt-get install openssh-server samba postfix Pour pouvoir compiler depuis les sources apt-get install build-essential python-virtualenv python-dev 2.2 Configuration PostgreSQL/PostGIS PostgreSQL est déjà installé sur un serveur distant. Il ne reste plus qu’à créer la base qui accueillera nos données. On peut le faire à partir du client PGAdmin. PostGIS est déjà installé et configuré. Attention la base geofence n’est pas deployée ici. • Se connecter avec un utilisateur ayant les droits d’ecriture • Création d’une base “georchestra” avec comme template celui livré à l’installation de PostGIS • Execution des requêtes SQL du dépot GitHub geOrchestra(Pour le code complet à executer, voir Création de la base PostgreSQL) • Création d’une base “geonetwork” avec comme template celui livré à l’installation de PostGIS 2.3 LDAP (Serveur 1) Installation apt-get install slapd ldap-utils git-core cd /home/user/download git clone git://github.com/georchestra/LDAP.git cd LDAP 3 geOrchestra Documentation, Release 2.0 Configuration ldapadd -Y EXTERNAL -H ldapi:/// -f georchestra-bootstrap.ldif ldapadd -D"cn=admin,dc=georchestra,dc=org" -W -f georchestra-root.ldif ldapadd -D"cn=admin,dc=georchestra,dc=org" -W -f georchestra.ldif 2.4 APACHE 2 (Serveur 2) Pour le serveur 2 on installe simplement apache apt-get install apache2 2.5 APACHE 2 (Serveur 1) Installation d’apache et configuration du site georchestra. apt-get install apache2 a2enmod proxy_ajp proxy_connect proxy_http proxy ssl rewrite headers service apache2 graceful #Création du fichier de configuration du nouveau site cd /etc/apache2/sites-available a2dissite default default-ssl #Desactivation des sites par defaut touch georchestra #Creation du Virtual host de notre site Modification du fichier créé <VirtualHost *:80> ServerName vm-georchestra DocumentRoot /var/www/georchestra/htdocs LogLevel warn ErrorLog /var/www/georchestra/logs/error.log CustomLog /var/www/georchestra/logs/access.log "combined" Include /var/www/georchestra/conf/*.conf ServerSignature Off </VirtualHost> <VirtualHost *:443> ServerName vm-georchestra DocumentRoot /var/www/georchestra/htdocs LogLevel warn ErrorLog /var/www/georchestra/logs/error.log CustomLog /var/www/georchestra/logs/access.log "combined" Include /var/www/georchestra/conf/*.conf SSLEngine On SSLCertificateFile /var/www/georchestra/ssl/georchestra.crt SSLCertificateKeyFile /var/www/georchestra/ssl/georchestra-unprotected.key SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt ServerSignature Off </VirtualHost> Configuration du dossier a2ensite georchestra cd /var/www mkdir georchestra 4 Chapter 2. Configuration des serveurs geOrchestra Documentation, Release 2.0 cd georchestra mkdir conf htdocs logs ssl chgrp www-data logs/ chmod g+w logs/ Page d’erreur mkdir -p /var/www/georchestra/htdocs/errors wget http://sdi.georchestra.org/errors/50x.html -O /var/www/georchestra/htdocs/errors/50x.html ProxyPass (/var/www/georchestra/conf/proxypass.conf) <IfModule !mod_proxy.c> LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so </IfModule> <IfModule !mod_proxy_http.c> LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so </IfModule> RewriteLog /tmp/rewrite.log RewriteLogLevel 3 SetEnv no-gzip on ProxyTimeout 999999999 AddType application/vnd.ogc.context+xml .wmc RewriteEngine On RewriteRule ^/analytics$ /analytics/ [R] RewriteRule ^/cas$ /cas/ [R] RewriteRule ^/catalogapp$ /catalogapp/ [R] RewriteRule ^/downloadform$ /downloadform/ [R] RewriteRule ^/extractorapp$ /extractorapp/ [R] RewriteRule ^/geoserver$ /geoserver/ [R] RewriteRule ^/geofence$ /geofence/ [R] RewriteRule ^/geowebcache$ /geowebcache/ [R] RewriteRule ^/header$ /header/ [R] RewriteRule ^/ldapadmin$ /ldapadmin/ [R] RewriteRule ^/ldapadmin/privateui$ /ldapadmin/privateui/ [R] RewriteRule ^/mapfishapp$ /mapfishapp/ [R] RewriteRule ^/proxy$ /proxy/ [R] RewriteRule ^/geonetwork-private/?(.*)$ /geonetwork/$1 [R] ErrorDocument 502 /errors/50x.html ErrorDocument 503 /errors/50x.html ProxyPass /casfailed.jsp ajp://localhost:8009/casfailed.jsp ProxyPassReverse /casfailed.jsp ajp://localhost:8009/casfailed.jsp ProxyPass /j_spring_cas_security_check ajp://localhost:8009/j_spring_cas_security_check ProxyPassReverse /j_spring_cas_security_check ajp://localhost:8009/j_spring_cas_security_check ProxyPass /j_spring_security_logout ajp://localhost:8009/j_spring_security_logout ProxyPassReverse /j_spring_security_logout ajp://localhost:8009/j_spring_security_logout <Proxy ajp://localhost:8009/analytics/*> Order deny,allow Allow from all </Proxy> 2.5. APACHE 2 (Serveur 1) 5 geOrchestra Documentation, Release 2.0 ProxyPass /analytics/ ajp://localhost:8009/analytics/ ProxyPassReverse /analytics/ ajp://localhost:8009/analytics/ <Proxy ajp://localhost:8009/cas/*> Order deny,allow Allow from all </Proxy> ProxyPass /cas/ ajp://localhost:8009/cas/ ProxyPassReverse /cas/ ajp://localhost:8009/cas/ <Proxy ajp://localhost:8009/catalogapp/*> Order deny,allow Allow from all </Proxy> ProxyPass /catalogapp/ ajp://localhost:8009/catalogapp/ ProxyPassReverse /catalogapp/ ajp://localhost:8009/catalogapp/ <Proxy ajp://localhost:8009/downloadform/*> Order deny,allow Allow from all </Proxy> ProxyPass /downloadform/ ajp://localhost:8009/downloadform/ ProxyPassReverse /downloadform/ ajp://localhost:8009/downloadform/ <Proxy ajp://localhost:8009/extractorapp/*> Order deny,allow Allow from all </Proxy> ProxyPass /extractorapp/ ajp://localhost:8009/extractorapp/ ProxyPassReverse /extractorapp/ ajp://localhost:8009/extractorapp/ <Proxy ajp://localhost:8009/geonetwork/*> Order deny,allow Allow from all </Proxy> ProxyPass /geonetwork/ ajp://localhost:8009/geonetwork/ ProxyPassReverse /geonetwork/ ajp://localhost:8009/geonetwork/ <Proxy ajp://localhost:8009/geonetwork-private/*> Order deny,allow Allow from all </Proxy> ProxyPass /geonetwork-private/ ajp://localhost:8009/geonetwork-private/ ProxyPassReverse /geonetwork-private/ ajp://localhost:8009/geonetwork-private/ <Proxy ajp://localhost:8009/geoserver/*> Order deny,allow Allow from all </Proxy> ProxyPass /geoserver/ ajp://localhost:8009/geoserver/ ProxyPassReverse /geoserver/ ajp://localhost:8009/geoserver/ <Proxy ajp://localhost:8009/geofence/*> Order deny,allow Allow from all </Proxy> ProxyPass /geofence/ ajp://localhost:8009/geofence/ ProxyPassReverse /geofence/ ajp://localhost:8009/geofence/ 6 Chapter 2. Configuration des serveurs geOrchestra Documentation, Release 2.0 ProxyPass /geowebcache/ ajp://localhost:8009/geowebcache/ ProxyPassReverse /geowebcache/ ajp://localhost:8009/geowebcache/ <Proxy ajp://localhost:8009/ldapadmin/*> Order deny,allow Allow from all </Proxy> ProxyPass /ldapadmin/ ajp://localhost:8009/ldapadmin/ ProxyPassReverse /ldapadmin/ ajp://localhost:8009/ldapadmin/ <Proxy ajp://localhost:8009/mapfishapp/*> Order deny,allow Allow from all </Proxy> ProxyPass /mapfishapp/ ajp://localhost:8009/mapfishapp/ ProxyPassReverse /mapfishapp/ ajp://localhost:8009/mapfishapp/ <Proxy ajp://localhost:8009/proxy/*> Order deny,allow Allow from all </Proxy> ProxyPass /proxy/ ajp://localhost:8009/proxy/ ProxyPassReverse /proxy/ ajp://localhost:8009/proxy/ <Proxy ajp://localhost:8009/header/*> Order deny,allow Allow from all </Proxy> ProxyPass /header/ ajp://localhost:8009/header/ ProxyPassReverse /header/ ajp://localhost:8009/header/ <Proxy ajp://localhost:8009/_static/*> Order deny,allow Allow from all </Proxy> ProxyPass /_static/ ajp://localhost:8009/_static/ ProxyPassReverse /_static/ ajp://localhost:8009/_static/ Certification SSL cd /var/www/georchestra/ssl openssl genrsa -des3 -out georchestra.key 1024 openssl req -new -key georchestra.key -out georchestra.csr Common name : vm-georchestra openssl rsa -in georchestra.key -out georchestra-unprotected.key openssl x509 -req -days 365 -in georchestra.csr -signkey georchestra.key -out georchestra.crt service apache2 graceful sudo nano /etc/hosts 127.0.0.01 vm-georchestra Test : http://vm-georchestra https://vm-georchestra 2.5. APACHE 2 (Serveur 1) 7 geOrchestra Documentation, Release 2.0 2.6 JAVA (serveur 1&2) apt-get install openjdk-7-jdk 2.7 TOMCAT (serveur 1&2) Le schéma de l’architecture montre que trois instances de Tomcat sont présentes. Elles seront nommées comme suit : Serveur 1 : • Tomcat60 : Instance contenant le CAS et le security proxy. • Tomcat61 : Instance contenant toutes les webapps sauf geoserver, le CAS et le proxy. Serveur 2 : • Tomcat62 : Instance contenant geoserver. • Tomcat63 : Instance contenant geoserver. 2.7.1 Utilisateur Un utilisateur spécifique est créé pour gérer Tomcat. groupadd tomcat useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat Cet utilisateur ne peut pas se logguer il sert uniquement à lancer Tomcat et stopper Tomcat de cette manière : cd /opt/tomcat6/tomcat6X/bin #Avec X, une instance de Tomcat su -p -s /bin/sh tomcat startup.sh su -p -s /bin/sh tomcat shutdown.sh Il est possible de créer des services pour gérer plus facilement les instances (Voir Créer un service tomcat) 2.7.2 Installation Pour créer plusieurs instances de Tomcat, la solution la plus souple est de télécharger le tar.gz plutôt que d’utiliser un apt-get install (liens symboliques...). #Serveur 1&2 mkdir /opt/tomcat6 cd /opt/tomcat6 wget http://apache.crihan.fr/dist/tomcat/tomcat-6/v6.0.39/bin/apache-tomcat-6.0.39.tar.gz tar -xf apache-tomcat-6.0.39.tar.gz Cloner le dossier une fois pour chaque instance. #serveur 1 cp -R apache-tomcat-6.0.39 tomcat60 mv apache-tomcat-6.0.39 tomcat61 #serveur 2 cp -R apache-tomcat-6.0.39 tomcat62 mv apache-tomcat-6.0.39 tomcat63 L’utilisateur tomcat est propriétaire des trois instances. 8 Chapter 2. Configuration des serveurs geOrchestra Documentation, Release 2.0 #serveur chown -R chown -R #serveur chown -R chown -R 1 tomcat:tomcat tomcat:tomcat 2 tomcat:tomcat tomcat:tomcat tomcat60 tomcat61 tomcat62 tomcat63 2.7.3 Configuration • Variable d’environnement Les scripts startup.sh et shutdown.sh des dossiers bin doivent être modifiés. (/opt/tomcat6/tomcat6X/bin) export export export export export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 PATH=$JAVA_HOME/bin:$PATH BASEDIR=/opt/tomcat6/tomcat6X CATALINA_BASE=/opt/tomcat6/tomcat6X CATALINA_HOME=/opt/tomcat6/tomcat6X Dans les scripts catalina.sh (/opt/tomcat6/tomcat6X/bin), rajouter : Tomcat60 JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Xms128m -Xmx256m -XX:MaxPermSize=256m" JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/opt/share/keystore -Djavax.net.ssl.trustStorePasswo Tomcat61 JAVA_OPTS="$JAVA_OPTS JAVA_OPTS="$JAVA_OPTS #GEONETWORK JAVA_OPTS="$JAVA_OPTS #EXTRACTORAPP JAVA_OPTS="$JAVA_OPTS #GDAL JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Xms512m -Xmx1024m -XX:MaxPermSize=256m" -Djavax.net.ssl.trustStore=/opt/share/keystore -Djavax.net.ssl.trustStorePasswo -Dgeonetwork.dir=/home/user/geonetwork_datadir -Dgeonetwork-private.schema.dir= -Dorg.geotools.referencing.forceXY=true -Dextractor.storage.dir=/home/user/tmp_ -Djava.library.path=/var/sig/gdal/NativeLibs" Tomcat62 & Tomcat63 JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/opt/share/keystore -Djavax.net.ssl.trustStorePasswo #GEOSERVER JAVA_OPTS="$JAVA_OPTS -Xms2G -Xmx2G -XX:PermSize=256m -XX:MaxPermSize=256m -DGEOSERVER_DATA_DIR=/var/ L’utilisateur Tomcat doit être propriétaire des dossiers qu’il utilise : geoserver_datadir, geowebcache_datadir... chown -R tomcat:tomcat geoserver_datadir • server.xml Ensuite, les numéros de port doivent être modifiés pour que chaque instance écoute sur un port différent. Les instances 1, 2 et 3 n’ont pas besoin du port SSL. Nom de l’instance Tomcat60 Tomcat61 Tomcat62 Tomcat63 Connecteur HTTP 8080 8180 8280 8380 Connecteur JK 8009 8109 8209 8309 Port d’arrêt 8005 8105 8205 8305 Port SSL 8443 x x x Modifier les ports dans le fichier server.xml en suivant le tableau ci-dessus. 2.7. TOMCAT (serveur 1&2) 9 geOrchestra Documentation, Release 2.0 cd /opt/tomcat6/tomcat6X/conf nano server.xml Modifier la configuration des connecteurs #Exemple pour l’instance 1 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" URIEncoding="UTF-8" maxThreads="150" scheme="https" secure="true" clientAuth="false" keystoreFile="/opt/share/keystore" keystorePass="mdp" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/java <Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" connectionTimeout="20000" redirectPort="8443" /> • Manager Par défaut, le manager n’est pas accessible puisque aucun utilisateur n’existe. Pour créer l’utilisateur, modifier le fichier /opt/tomcat6/tomcat6X/conf/tomcat-users.xml dans chaque instance de Tomcat <tomcat-users> <role rolename="manager-gui"/> <user username="admin" password="mdp" roles="manager-gui"/> </tomcat-users> • WebApp ROOT Supprimer la webapp ROOT des trois instances • Keystore Création du keystore (dans le dossier share) cd /opt/share/keystore keytool -genkey -alias georchestra_localhost -keystore keystore -storepass mdp -keypass mdp -keyalg R Prénom et nom : localhost 2.7.4 Load Balancing (serveur 2) Mise en place D’après http://java4it.blogspot.fr/2008/09/tutoriel-load-balancing-avec-apache-et.html • Copier depuis /etc/apache2/mods-available proxy_balancer.load, proxy_balancer.conf 10 vers /etc/apache2/mods-enabled : proxy_ajp.load, Chapter 2. Configuration des serveurs geOrchestra Documentation, Release 2.0 • Ajouter l’attribut jvmroute à l’élément engine (dans /opt/tomcat6/tomcat6X/conf/server.xml) #Tomcat62 <engine name="Catalina" defaulthost="localhost" jvmroute="tomcat62"> #Tomcat63 <engine name="Catalina" defaulthost="localhost" jvmroute="tomcat63"> • Ajouter au fichier proxy_balancer.conf (dans /etc/apache2/mods-enabled/): <Proxy balancer://mycluster> BalancerMember ajp://ip_server2:8209 min=10 max=100 route=tomcat62 loadfactor=1 BalancerMember ajp://ip_server2:8309 min=10 max=100 route=tomcat63 loadfactor=1 Order deny,allow Allow from all </Proxy> ProxyPass / balancer://mycluster/ stickysession=JSESSIONID • Redémarrer les deux instances de Tomcat puis apache2 Gestion du geoserver_datadir La configuration contenu dans le geoserver_data_dir est chargée uniquement au lancement de Geoserver (donc au lancement de Tomcat). Il faut donc qu’après chaque modification sur une instance, les autres instances soient synchronisées. L’api REST de Geoserver permet de recharger la conf via la commande reload en mode POST Camptocamp a écrit un script python qui permet d’exécuter les commandes REST sur chaque instance. Nous l’avons légèrement modifié pour l’intégrer à notre plateforme. Ce script est executé en mode CGI. Pour ce faire il faut : • Activer le module cgi d’Apache • Ajouter dans le virtualhost du site (/etc/apache2/sites-available/georchestra) ScriptAlias /scripts/ /var/www/georchestra/scripts/ <Directory /var/www/georchestra/scripts/> AddHandler cgi-script .cgi .py AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> • Attention : Les sauts de lignes du fichier python doivent être au format Unix (LF), le propriétaire du dossier est www-data (l’utilisateur Apache). • Pour le script voir Code Python CGI 2.8 GDAL/OGR/JAI L’installation de GDAL est nécessaire pour l’extracteur et permet l’ouverture de plus de format dans Mapfishapp. Elle permet aussi à Geoserver de supporter plus de formats. • Activer le support JAI (Serveur 2) D’après le blog geomatips : cd /usr/lib/jvm/java-1.7.0-openjdk-amd64/ #Librairies JAI wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64-jdk.bin 2.8. GDAL/OGR/JAI 11 geOrchestra Documentation, Release 2.0 sh jai-1_1_3-lib-linux-amd64-jdk.bin #Librairies JAI imageIO wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-amd64-jd export _POSIX2_VERSION=199209 sh jai_imageio-1_1-lib-linux-amd64-jdk.bin A noter que les paquets Debian sont disponibles Relancer TOMCAT (le support JAI doit être passé à TRUE dans l’etat du serveur, si geOrchestra a déjà été déployé) • Installer les Natives Libs (Serveur 1&2) Au début, nous avions pris les Natives de geo-solutions, maintenant C2C met à disposition les siennes cd /home/user/download wget http://sdi.georchestra.org/%7Epmauduit/gdalogr-java-bindings/gdal-georchestra-debian6-amd64-mifm tar xvzf gdal-georchestra-debian6-amd64-mifmid-patched.tar.gz mkdir -p /var/sig/gdal/NativeLibs/ cd /var/sig/gdal/NativeLibs/ #Copier le contenu du dossier java cd .. mkdir gdal-data #Copier le contenu du dossier share Il faut ensuite définir les variables d’environnement correspondantes. Dans /etc/environnement : GDAL_DATA="/var/sig/gdal/gdal-data" LD_LIBRARY_PATH="/var/sig/gdal/NativeLibs:/lib:/usr/lib" • Installer la libECW Récupérer l’archive http://mirror.ovh.net/gentoo-distfiles/distfiles/libecwj2-3.3-2006-09-06.zip unzip libecwj2-3.3-2006-09-06.zip cd libecwj2-3.3-2006-09-06 ./configure make make install • Installer GDAL Avant de lancer la compilation de GDAL, le paquet libxerces peut-être necessaire : apt-get install libxerces-c-dev cd /home/igeo/download wget http://download.osgeo.org/gdal/1.10.1/gdal-1.10.1.tar.gz tar xzf gdal-1.10.1.tar.gz cd gdal-1.10.1 ./configure make make install • Installer l’extension GDAL Geoserver cd /opt/tomcat6/tomcat62/webapps/geoserver/WEB-INF/lib/ wget http://downloads.sourceforge.net/geoserver/geoserver-2.3.2-gdal-plugin.zip unzip geoserver-2.3.2-gdal-plugin.zip rm -f geoserver-2.3.3-gdal-plugin.zip Retour au Sommaire 12 Chapter 2. Configuration des serveurs CHAPTER THREE GEORCHESTRA 3.1 Point de départ • Cloner le dépôt GitHub de georchestra : cd /home/user/download git clone -b 14.01 --recursive https://github.com/georchestra/georchestra.git • Compiler cd georchestra ./mvn -Dmaven.test.skip=true -Ptemplate install 3.2 Configuration La configuration de georchestra se fait en clonant le dossier template du dossier config/configuration. On peut ensuite modifier les élément de ce dossier et lancer la compilation comme suit. cd georchestra ./mvn -Dmaven.test.skip=true -Dserver=viennagglo install On peut aussi compiler une seule webapp à la fois cd /home/user/download/georchestra/mapfishapp ../mvn -Dmaven.test.skip=true -Dserver=viennagglo install 3.3 Deploiement Pour compiler/deployer les différentes webapps dans les trois instances de Tomcat, nous avons réalisé le script bash disponible ici Script de compilation Retour au Sommaire 13 geOrchestra Documentation, Release 2.0 14 Chapter 3. Georchestra CHAPTER FOUR CONFIGURATION La configuration de Georchestra se fait en dupliquant le dossier template disponible sous config/configurations/template. Ce dossier est divisé en sous-dossier représentant chacun une webapp. Un seul fichier est transversale à toutes les webapps : shared.maven.filter. Ce fichier contient des variables qui seront réutilisées dans toutes les webapps (nom du serveur, adresse mail, utilisateur postgres...). Cette doc présente la configuration par dossier/webapp. Certains fichiers/dossiers ne sont pas, par défaut, dans la config template, il faut les copier depuis config/default. Warning: Seuls les dossiers modifiés dans le cadre de la mise en place de notre plateforme sont présents. Cette page est donc vouée à évoluer au fur et à mesure de la personnalisation. 4.1 shared.maven.filter C’est le fichier qui définit les variables globales. La plupart des variables disponibles sont largement commentées. On y trouve notamment : la langue de l’interface, les paramètres de connexion aux BDD, le niveau de log, l’activation ou non du formulaire de téléchargement ou encore l’activation ou non des statistiques. 4.2 analytics Pas de conf particulière, les paramètres sont définis à partir du shared.maven.filter 4.3 cas-server-webapp Définition du css de la page de login. 4.4 extractorapp • WEB-INF/templates : Modèles des mails envoyés lors des extractions • app/js/GEOR_CUSTOM.js Ce fichier permet de configurer la page d’extraction (couches présentes par défaut dans l’extracteur, emprise par défaut, les SRS ...) 15 geOrchestra Documentation, Release 2.0 Warning: Il faut utiliser les services WMS pour les startups layers. Les services WFS ne fonctionnent pas 4.5 geoserver-webapp Le fichier web.xml copié depuis georchestra/geoserver/geoserver-submodule/src/web/app/src/main/webapp/WEBINF/web.xml permet de determiner le geoserver_datadir. 4.6 header • Modification du logo du header via le dossier img • Modification du header via le fichier header.jsp (copié depuis home/igeo/download/georchestra/header/src/main/webapp/WEBINF/jsp) 4.7 LDAP Admin Dans WEB-INF/template (copié depuis default) –> modification des mails envoyés lors d’inscription. 4.8 mapfishapp • Dans WEB-INF/print : Modification des templates d’impression • Dans app/js/GEOR_CUSTOM : C’est le fichier principal de configuration. On peut choisir les WMC présents, les echelles de visualisation, les addons (voir ici), les services proposés par défaut... • [*].wmc : Web Map Context : Ce sont des fichiers qui chargent une configuration. Une fois dans mapfish on peut choisir un des contextes disponibles. Ils définissent principalement l’emprise et les couches disponibles. Note: D’après le cours laval : Standardisé par l’OGC depuis 2005 Document permettant le regroupement d’une ou plusieurs cartes provenant d’un ou plusieurs services cartographiques (WMS). On y décrit les informations suivantes: • le(s) serveur(s) fournissant le(s) couche(s) de la carte générale, • l’étendue géographique et la projection cartographique de chaque couche partagée, • des métadonnées opérationnelles pour qu’un logiciel client puisse reproduire la carte générale, • des métadonnées auxiliaires pour annoter et décrire les cartes et leur provenance. 4.9 security-proxy Dans le maven.filter, il faut modifier les ports et IP de redirection 16 Chapter 4. Configuration geOrchestra Documentation, Release 2.0 proxy.defaultTarget=http://localhost:8080 # DEVIENT proxy.defaultTarget=http://localhost:8180 proxy.geoserver=http://ipserver2:8280 # Avec le load balancing, on ne précise plus le port de geoserver proxy.geoserver=http://ipserver2 Deuxième chose à modifier, geoserver-private devient geoserver <entry key="geoserver" value="${proxy.defaultTarget}/geoserver-private/" />\ <entry key="geoserver" value="${proxy.defaultTarget}/geoserver/" />\ Retour au Sommaire 4.9. security-proxy 17 geOrchestra Documentation, Release 2.0 18 Chapter 4. Configuration CHAPTER FIVE GESTION DES ADDONS L’activation d’un addon se fait dans le fichier de configuration GEOR_custom de Mapfishapp (/configuration/profil/app/js/). 5.1 Cadastre Ce plugin permet de localiser une parcelle en renseignant la commune, la section cadastrale et le numero de section. La recherche par propriétaire est aussi disponible mais elle ne permet pas la localisation de la parcelle. Il faut être connecté pour avoir accès à cette fonctionnalité. 5.1.1 Activation du plugin Rajouter dans la variable ADDONS { "id": "cadastre", // Nom tel qu’il est présent dans l’arborescence "name": "Cadastre", // Nom d’affichage "title": { "en": "Cadastre", "es": "Cadastro", "fr": "Cadatsre" }, "description": { "en": "Allow to locate a cadastral parcel", "es": "Puede localizar una parcela catastral", "fr": "Permet de localiser une parcelle cadastrale" } } 5.1.2 Configuration du plugin Dans les sources de GeOrchestra/mapfishapp/src/main/webapp/app/addons/cadastre Le fichier cities.json doit contenir toutes les villes pour lesquelles la recherche est possible. Mise en forme : {"type":"FeatureCollection","features":[ {"type":"Feature","id":"19","properties":{"nom":"VIENNE","insee":"38544"}}, {"type":"Feature","id":"20","properties":{"nom":"SEYSSUEL","insee":"38487"}}, ... ]} 19 geOrchestra Documentation, Release 2.0 Dans le fichier manifest.json modifier les serveurs wfs pour qu’ils correspondent à nos sections et parcelles. "tab1": { "field1": { "file": "citiesVA.json", "geometry": "the_geom", "wfs": "http://vm-georchestra/geoserver/wfs", "typename": "julien:capv_dgi_commune", "valuefield": "insee", "displayfield": "nom", "template": "<b>{nom}</b> ({insee})" }, "field2": { "wfs": "http://vm-georchestra/geoserver/wfs", "typename": "julien:capv_dgi_section", "geometry": "the_geom", "matchingproperties": { "field1": "insee" }, "valuefield": "designation", "displayfield": "designation", "template": "<b>{designation}</b>" }, "field3": { "wfs": "http://vm-georchestra/geoserver/wfs", "typename": "julien:capv_dgi_parcelle", "geometry": "the_geom", "matchingproperties": { "field1": "insee", "field2": "section" }, "valuefield": "numparc", "displayfield": "numparc", "template": "<b>{numparc}</b> {section}" } }, "tab2": { "field1": { "this field": "is currently the same as field1 from tab1", "no config option here": "is taken into account" }, "field2": { "wfs": "http://vm-georchestra/geoserver/wfs", "typename": "julien:capv_dgi_parcelle_unite_fiscale_avancee", "matchingproperties": { "field1": "insee" }, "valuefield": "ddenom", "displayfield": "ddenom" } } 5.2 Loupe Orthophoto La loupe orthophoto permet d’afficher dans une fenêtre flottante un service wms autre que le fond de plan. On peut zoomer dans cette fenêtre. Elle est déjà activée par défaut dans le GEOR_custom. Par défaut c’est une image satellite 20 Chapter 5. Gestion des addons geOrchestra Documentation, Release 2.0 proposée par un service de GeoBretagne. Pour modifier le service c’est dans le manifest.json que ça ce passe "default_options": { "mode": "static", "baseLayerConfig": { "wmsurl": "http://vm-georchestra/geoserver/wms", "layer": "julien:CAPV_ORTHO_2009", "format": "image/jpeg", "buffer": 8 } }, Retour au Sommaire 5.2. Loupe Orthophoto 21 geOrchestra Documentation, Release 2.0 22 Chapter 5. Gestion des addons CHAPTER SIX MISE À JOUR 14.06 Le processus de mise à jour est decrit dans les release_notes du depot GiHub de geOrchestra. Nous decrivons ici, les changements effectués à ViennAgglo 6.1 Dossier de configuration Quelques modifications dans le dossier de configuration sont à noter : • Remplacement du dossier CAS par le nouveau • Suppression du dossier security-proxy (le proxy est définit dans le script GenerateConfig.groovy) • Suppression des éléments du shared.maven.filter devenu obsolètes • Ajout du script GenerateConfig.groovy, et modification pour que le proxy fonctionne ... /** * updateSecProxyMavenFilters */ def updateSecProxyMavenFilters() { def proxyDefaultTarget = "http://localhost:8180" def proxyGeoserver= "http://192.168.20.114" new PropertyUpdate( path: ’maven.filter’, from: ’defaults/security-proxy’, to: ’security-proxy’ ).update { properties -> properties[’cas.private.host’] = "localhost" properties[’public.ssl’] = "443" properties[’private.ssl’] = "8543" properties[’proxy.defaultTarget’] = proxyDefaultTarget properties[’proxy.geoserver’] = proxyGeoserver properties[’proxy.mapping’] = """ <entry key="analytics" value="proxyDefaultTarget/analytics/" /> <entry key="catalogapp" value="proxyDefaultTarget/catalogapp/" /> <entry key="downloadform" value="proxyDefaultTarget/downloadform/" /> <entry key="extractorapp" value="proxyDefaultTarget/extractorapp/" /> <entry key="geonetwork" value="proxyDefaultTarget/geonetwork/" /> <entry key="geoserver" value="proxyGeoserver/geoserver/" /> <entry key="geowebcache" value="proxyDefaultTarget/geowebcache/" /> <entry key="geofence" value="proxyDefaultTarget/geofence/" /> 23 geOrchestra Documentation, Release 2.0 <entry <entry <entry <entry key="header" value="proxyDefaultTarget/header/" /> key="ldapadmin" value="proxyDefaultTarget/ldapadmin/" /> key="mapfishapp" value="proxyDefaultTarget/mapfishapp/" /> key="static" value="proxyDefaultTarget/header/" />""".replaceAll("\n|\t","").repla properties[’header.mapping’] = """ 6.2 Migration base geonetwork Dans la version 14.06, la base PostgreSQL de Geonetwork devient un schéma de la base georchestra. • Recuperation de la base geonetwork –> georchestra.sql • Injection dans la base georchestra pg_dump.exe --host 192.168.20.101 --port 5432 --username "dyndb" --role "dyndb" --no-password • Changement des droits d’accès postgres=# ALTER ROLE geonetwork WITH ENCRYPTED PASSWORD ’www-data’; postgres=# GRANT ALL PRIVILEGES ON DATABASE georchestra to geonetwork; postgres=# GRANT ALL PRIVILEGES ON TABLE geonetwork.categories to geonetwork; georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# georchestra=# 24 GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES PRIVILEGES ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE geonetwork.categories to geonetwork; geonetwork.categoriesdes to geonetwork; geonetwork.cswservercapabilitiesinfo to geonetwork; geonetwork.customelementset to geonetwork; geonetwork.groups to geonetwork; geonetwork.groupsdes to geonetwork; geonetwork.harvesthistory to geonetwork; geonetwork.isolanguages to geonetwork; geonetwork.isolanguagesdes to geonetwork; geonetwork.languages to geonetwork; geonetwork.metadata to geonetwork; geonetwork.metadatacateg to geonetwork; geonetwork.metadatanotifications to geonetwork; geonetwork.metadatanotifiers to geonetwork; geonetwork.metadatarating to geonetwork; geonetwork.metadatastatus to geonetwork; geonetwork.operationallowed to geonetwork; geonetwork.operations to geonetwork; geonetwork.operationsdes to geonetwork; geonetwork.params to geonetwork; geonetwork.regions to geonetwork; geonetwork.regionsdes to geonetwork; geonetwork.relations to geonetwork; geonetwork.requests to geonetwork; geonetwork.serviceparameters to geonetwork; geonetwork.services to geonetwork; geonetwork.settings to geonetwork; geonetwork.sources to geonetwork; geonetwork.statusvalues to geonetwork; geonetwork.statusvaluesdes to geonetwork; geonetwork.thesaurus to geonetwork; geonetwork.usergroups to geonetwork; geonetwork.users to geonetwork; geonetwork.validation to geonetwork; Chapter 6. Mise à jour 14.06 - geOrchestra Documentation, Release 2.0 6.3 Supressions des “-privates” Les applications ne comportent plus le suffixe “-private” dorénavant. Plusieurs fichiers sont donc à modifier : • Les JAVA_OPTS de geonetwork dans le catalina.sh • Le script de deploiement 6.4 LDAP Notre base LDAP n’étant pas encore en production au moment du changement de version, nous l’avons supprimé puis recréé avec les nouvelles préconisations de la version 14.06 Retour au Sommaire 6.3. Supressions des “-privates” 25 geOrchestra Documentation, Release 2.0 26 Chapter 6. Mise à jour 14.06 CHAPTER SEVEN CODES 7.1 Création de la base PostgreSQL -- MAPFISHAPP create schema mapfishapp; create table mapfishapp.geodocs ( id bigserial primary key, -- 1 to 9223372036854775807 (~ 1E19) username varchar(200), -- can be NULL (eg: anonymous user) standard varchar(3) not null, -- eg: CSV, KML, SLD, WMC raw_file_content text not null, -- file content file_hash varchar(32) unique not null, -- md5sum created_at timestamp without time zone default NOW(), -- creation date last_access timestamp without time zone, -- last access date access_count integer default 0 -- access count, defaults to 0 ); create create create create create create index index index index index index geodocs_file_hash on mapfishapp.geodocs using btree (file_hash); geodocs_username on mapfishapp.geodocs using btree (username); geodocs_standard on mapfishapp.geodocs using btree (standard); geodocs_created_at on mapfishapp.geodocs using btree (created_at); geodocs_last_access on mapfishapp.geodocs using btree (last_access); geodocs_access_count on mapfishapp.geodocs using btree (access_count); -- LDAP CREATE SCHEMA ldapadmin; SET search_path TO ldapadmin,public,pg_catalog; CREATE TABLE user_token ( uid character varying NOT NULL, token character varying, creation_date timestamp with time zone ); ALTER TABLE ONLY user_token ADD CONSTRAINT uid PRIMARY KEY (uid); CREATE UNIQUE INDEX token_idx ON user_token USING btree (token); -- DOWNLOAD FORM create schema downloadform; 27 geOrchestra Documentation, Release 2.0 set search_path to downloadform,public,pg_catalog; create table log_table ( id serial primary key, username varchar(200), -- can be NULL (eg: anonymous user) sessionid varchar(32) not null, -- this is the security-proxy JSESSIONID first_name varchar(200) not null, second_name varchar(200) not null, company varchar(200) not null, email varchar(200) not null, phone varchar(100), requested_at timestamp without time zone default NOW(), comment text ); create index log_table_username on log_table using btree (username); create index log_table_sessionid on log_table using btree (sessionid); -- GN: log MD id and filename (resource.get parameters) create table geonetwork_log ( metadata_id integer not null, -- this is not the UUID, but the local ID filename varchar(200) not null ) inherits (log_table); create index geonetwork_log_id_fname on geonetwork_log using btree (metadata_id, filename); -- extractorapp log table, which contains just the JSON spec for now (could be exploited later client -- json_spec example : {"emails":["[email protected]"],"globalProperties":{"projection":"EPSG:4326","reso create table extractorapp_log ( json_spec text not null ) inherits (log_table); create index extractorapp_log_json_spec on extractorapp_log using btree (json_spec); create table data_use ( id serial primary key, name varchar(100) ); -- sample data: insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use insert into data_use (name) (name) (name) (name) (name) (name) (name) (name) (name) (name) values values values values values values values values values values (’Administratif et budgétaire’); (’Aménagement du Territoire et Gestion de l’’Espace’); (’Communication’); (’Environnement’); (’Fond de Plan’); (’Foncier et Urbanisme’); (’Formation’); (’Gestion du Domaine Public’); (’Mise en valeur du Territoire (Tourisme)’); (’Risques Naturels et Technologiques’); create table logtable_datause ( logtable_id integer not null, datause_id integer not null, primary key (logtable_id, datause_id) ); -- commented out because it generates an error: --alter table logtable_datause add constraint fk_logtable_id foreign key (logtable_id) REFERENCES log 28 Chapter 7. Codes geOrchestra Documentation, Release 2.0 --org.postgresql.util.PSQLException: ERROR: insert or update on table "logtable_datause" violates for --Detail: Key (logtable_id)=(2) is not present in table "log_table". -- at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) alter table logtable_datause add constraint fk_datause_id foreign key (datause_id) REFERENCES data_us create table extractorapp_layers ( id serial primary key, extractorapp_log_id integer NOT NULL, projection character varying(12), resolution double precision, format character varying(10), bbox_srs character varying(12), "left" double precision, bottom double precision, "right" double precision, top double precision, ows_url character varying(1024), ows_type character varying(3), layer_name text ); create index extractorapp_layers_layer_name on extractorapp_layers using btree (layer_name); -- STATISTIQUES CREATE SCHEMA ogcstatistics; SET search_path TO ogcstatistics,public,pg_catalog; CREATE TABLE ogc_services_log ( user_name character varying(255), date date, service character varying(5), layer character varying(255), id bigserial NOT NULL, request character varying(20), org character varying(255), CONSTRAINT primary_key PRIMARY KEY (id ) ); CREATE CREATE CREATE CREATE INDEX INDEX INDEX INDEX user_name_index ON ogc_services_log USING btree (user_name); date_index ON ogc_services_log USING btree (date); service_index ON ogc_services_log USING btree (service); layer_index ON ogc_services_log USING btree (layer); 7.2 Code Python CGI Le script d’origine est disponible ici https://gist.github.com/fvanderbiest/f5d5e467c7ca004ce73b #!/usr/bin/env python #-*- coding: utf-8 -*print ’Content-Type: text/html; charset=utf-8\n’ """This is a script that we use to reload geoserver catalogs when load balancing them""" 7.2. Code Python CGI 29 geOrchestra Documentation, Release 2.0 """ Copyright 2014 Camptocamp. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY CAMPTOCAMP ‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CAMPTOCAMP OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Camptocamp. """ config = { ’geoserver’: [ ’ipserver2:8280’, ’ipserver2:8380’, #’’, # next one ] } # DO NOT MODIFY ANYTHING BELOW THIS # # (unless you know what you’re doing) import cgi import sys, os import urllib2 headers = { "sec-roles": "ROLE_ADMINISTRATOR", "sec-username": "fake_user", } failures = [] for host in config[’geoserver’]: req = urllib2.Request("http://"+host+"/geoserver/rest/reload?recurse=true", "nothing", headers) try: r = urllib2.urlopen(req) except urllib2.URLError as e: failures.append((host, e.reason)) #Le retour est json qui sera exploité avec jquery 30 Chapter 7. Codes geOrchestra Documentation, Release 2.0 if len(failures) == 0: print ’{"message": "Reload OK", "style": "btn-success"}’ else: #print "Status: 500 Internal Server Error" #print "" #for f in failures: #print "Reload failed for host %s, reason is ’%s’" % f print ’{"message": "Reload failed for ’+ failures[0][0] +’, reason is ’+ failures[0][1] +’", "sty 7.3 Script de compilation & deploiement Script serveur1 #!/bin/bash date #VARIABLE DE PROFIL, VERSION et repertoire GitHub PROFILE=viennagglo VERSION=14.06 GITDIR=/home/user/download/georchestra_1406/ TOMCAT60=/opt/tomcat6/tomcat60 TOMCAT61=/opt/tomcat6/tomcat61 #REPERTOIRE GEORCHESTRA cd ${GITDIR} #COMPILATION ./mvn -Dmaven.test.skip=true -Dserver=${PROFILE} install #CREATION D’UN DOSSIER TEMPORAIRE mkdir /tmp/georchestra_deploy_tmp cd /tmp/georchestra_deploy_tmp #COPIE DE TOUT LES WAR COMPILE DANS LE DOSSIER TEMPORAIRE find /root/.m2/repository/ -name "*${VERSION}-${PROFILE}.war" -exec cp {} /tmp/georchestra_deploy_tmp echo COPY TMP OK #RENOMMER TOUT LES WAR mv security-proxy-${VERSION}-${PROFILE}.war ROOT.war mv analytics-${VERSION}-${PROFILE}.war analytics.war mv cas-server-webapp-${VERSION}-${PROFILE}.war cas.war mv catalogapp-${VERSION}-${PROFILE}.war catalogapp.war mv downloadform-${VERSION}-${PROFILE}.war downloadform.war mv extractorapp-${VERSION}-${PROFILE}.war extractorapp.war mv geonetwork-main-${VERSION}-${PROFILE}.war geonetwork.war mv geoserver-webapp-${VERSION}-${PROFILE}.war geoserver.war mv ldapadmin-${VERSION}-${PROFILE}.war ldapadmin.war mv mapfishapp-${VERSION}-${PROFILE}.war mapfishapp.war mv header-${VERSION}-${PROFILE}.war header.war mv geowebcache-webapp-${VERSION}-${PROFILE}.war geowebcache.war echo RENAME OK #ARRET DE TOMCAT60 service tomcat60d stop echo TOMCAT60 SHUTDOWN 7.3. Script de compilation & deploiement 31 geOrchestra Documentation, Release 2.0 #ARRET DE TOMCAT61 service tomcat61d stop echo TOMCAT61 SHUTDOWN #SUPRESSION DES FICHIERS WAR (TOMCAT60) rm -Rf ${TOMCAT60}/webapps/ROOT* rm -Rf ${TOMCAT60}/webapps/cas* echo WAR60 DELETED #SUPRESSION DES FICHIERS WAR (TOMCAT61) rm -Rf ${TOMCAT61}/webapps/analytics* rm -Rf ${TOMCAT61}/webapps/catalogapp* rm -Rf ${TOMCAT61}/webapps/downloadform* rm -Rf ${TOMCAT61}/webapps/extractorapp* rm -Rf ${TOMCAT61}/webapps/geonetwork* rm -Rf ${TOMCAT61}/webapps/ldapadmin* rm -Rf ${TOMCAT61}/webapps/mapfishapp* rm -Rf ${TOMCAT61}/webapps/header* rm -Rf ${TOMCAT61}/webapps/geowebcache* echo WAR61 DELETED #COPIER le cas et root vers les webapps de TOMCAT60 cp -f /tmp/georchestra_deploy_tmp/cas.war ${TOMCAT60}/webapps cp -f /tmp/georchestra_deploy_tmp/ROOT.war ${TOMCAT60}/webapps echo COPY WAR60 OK #COPIER TOUT LES WAR VERS LES WEBAPPS DE TOMCAT61 SAUF GEOSERVER cp -f /tmp/georchestra_deploy_tmp/analytics.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/catalogapp.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/downloadform.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/extractorapp.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/geonetwork.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/ldapadmin.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/mapfishapp.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/header.war ${TOMCAT61}/webapps cp -f /tmp/georchestra_deploy_tmp/geowebcache.war ${TOMCAT61}/webapps echo COPY WAR61 OK #DEMARRAGE DE TOMCAT 60 service tomcat60d start echo TOMCAT60 STARTED #DEMARRAGE DE TOMCAT 61 service tomcat60d start echo TOMCAT61 STARTED #Copie du war geoserver sur le serveur 2 scp /tmp/georchestra_deploy_tmp/geoserver.war root@ipserveur2:/home/user/compil_data #Lancement du script de deploiement de geoserver sur le serveur 2 ssh root@ipserveur2 /home/user/scripts/DEPLOY.sh echo -----------------------------------echo -COMPILATION TERMINEE -date echo ------------------------------------ Script serveur2 32 Chapter 7. Codes geOrchestra Documentation, Release 2.0 #!/bin/bash #ARRET DE TOMCAT62 cd /opt/tomcat6/tomcat62/bin/ su -p -s /bin/sh tomcat shutdown.sh echo TOMCAT62 SHUTDOWN #ARRET DE TOMCAT63 cd /opt/tomcat6/tomcat63/bin/ su -p -s /bin/sh tomcat shutdown.sh echo TOMCAT63 SHUTDOWN #SUPRESSION DES FICHIERS WAR (TOMCAT62) rm -Rf /opt/tomcat6/tomcat62/webapps/*geoserver* echo WAR62 DELETED #SUPRESSION DES FICHIERS WAR (TOMCAT63) rm -Rf /opt/tomcat6/tomcat63/webapps/*geoserver* echo WAR63 DELETED #COPIER GEOSERVER VERS LES WEBAPPS DE TOMCAT62 cp /home/user/compil_data/geoserver.war /opt/tomcat6/tomcat62/webapps/ mkdir /opt/tomcat6/tomcat62/webapps/geoserver #DEPLOYER GEOSERVER cd /opt/tomcat6/tomcat62/webapps unzip geoserver.war -d geoserver #AJOUT DU LOG POUR GEOSERVER62 sed -i "60a <context-param>\n<param-name>GEOSERVER_LOG_LOCATION</param-name>\n<param-value>/var/geose #AJOUT DE L’EXTENSION ECW cd /opt/tomcat6/tomcat62/webapps/geoserver/WEB-INF/lib/ wget http://downloads.sourceforge.net/geoserver/geoserver-2.3.2-gdal-plugin.zip unzip geoserver-2.3.2-gdal-plugin.zip echo WAR62 OK #COPIER LE GEOSERVER VERS LES WEBAPPS DE TOMCAT63 cp /home/user/compil_data/geoserver.war /opt/tomcat6/tomcat63/webapps/ mkdir /opt/tomcat6/tomcat63/webapps/geoserver #DEPLOYER GEOSERVER cd /opt/tomcat6/tomcat63/webapps unzip geoserver.war -d geoserver #AJOUT DU LOG POUR GEOSERVER63 sed -i "60a <context-param>\n<param-name>GEOSERVER_LOG_LOCATION</param-name>\n<param-value>/var/geose #AJOUT DE L’EXTENSION ECW cd /opt/tomcat6/tomcat63/webapps/geoserver/WEB-INF/lib/ wget http://downloads.sourceforge.net/geoserver/geoserver-2.3.2-gdal-plugin.zip unzip geoserver-2.3.2-gdal-plugin.zip echo WAR63 OK #DEMARRAGE DE TOMCAT 62 cd /opt/tomcat6/tomcat62/bin/ 7.3. Script de compilation & deploiement 33 geOrchestra Documentation, Release 2.0 su -p -s /bin/sh tomcat startup.sh echo TOMCAT62 STARTED #DEMARRAGE DE TOMCAT 63 cd /opt/tomcat6/tomcat63/bin/ su -p -s /bin/sh tomcat startup.sh echo TOMCAT63 STARTED Retour au Sommaire 34 Chapter 7. Codes CHAPTER EIGHT MEMO, PENSE-BÊTE 8.1 Fonctionnement du proxy Dans Georchestra, les urls sont redirigées plusieurs fois entre le client et la webapp concernée. Le schéma ci-dessous récapitule les étapes de redirection : 8.2 Accès privé aux couches Problématique : On veut limiter l’accès à certaines couches à certains utilisateurs. On prend l’exemple des partenaires urbanistes qui accèdent à toutes les données publiques + les données d’urbanismes Dans Ldap_admin : Créer un groupe nommé URBA Dans Geoserver : • Créer un nouvel espace de travail • Créer un nouveau rôle ‘ROLE_URBA’ 35 geOrchestra Documentation, Release 2.0 • Editer les règle d’accès à l’espace de travail. • Catalog Mode : mélangé 8.3 Créer un service tomcat Problématique : On veut démarrer/stopper/redemarrer chaque instance de tomcat facilement via une simple commande. Tomcat doit aussi être lancé au démarrage du serveur. • Dans /etc/init.d, créer un fichier tomcat60d #!/bin/bash ### BEGIN INIT INFO # Provides: # Required-Start: # Required-Stop: # Default-Start: # Default-Stop: # Short-Description: # Description: ### END INIT INFO /etc/init.d/tomcat60d $remote_fs $syslog $remote_fs $syslog 2 3 4 5 0 1 6 Start daemon at boot time Enable service provided by daemon. START_TOMCAT=/opt/tomcat6/tomcat60/bin/startup.sh STOP_TOMCAT=/opt/tomcat6/tomcat60/bin/shutdown.sh PROG="tomcat60" start(){ echo -n "Starting $PROG: " #Demarrer avec l’utilisateur tomcat su -p -s /bin/sh tomcat ${START_TOMCAT} echo "done." } stop(){ echo -n "Shutting down $PROG: " su -p -s /bin/sh tomcat ${STOP_TOMCAT} echo "done." } restart(){ stop sleep 10 start } reload(){ restart } case "$1" in start) start ;; stop) stop ;; 36 Chapter 8. Memo, pense-bête geOrchestra Documentation, Release 2.0 restart) restart ;; reload) reload ;; ) * echo "Usage : $0 {start|stop|restart|reload}" esac exit 0 • Ajouter le script au services Debian chkconfig --add tomcat60d • Rendre executable le script chmod +x tomcat60d • Gérer le service via les commandes service tomcat60d start/stop/restart/reload • Même chose pour les autres instances de Tomcat Retour au Sommaire 8.3. Créer un service tomcat 37