Installation de Lizmap sous Linux Debian ou Ubuntu

Note

Si vous souhaitez installer et tester rapidement Lizmap Web Client en quelques étapes, vous pouvez suivre ces instructions en utilisant Docker et Docker-Compose.

Note

Dans les distributions Debian, vous pouvez travailler en tant qu’administrateur (root) sans avoir à utiliser sudo, contrairement sur Ubuntu.

Configuration générique du serveur avec serveur Nginx

Cette documentation fournis un exemple pour configurer un serveur avec une distribution Debian 11. Nous supposons que vous avez un système fraîchement installé et mis à jour.

Avertissement

Cette page ne décrit pas comment sécuriser votre serveur Nginx. C’est juste pour une démonstration.

Configurer les locales

Pour simplifier les choses, il est intéressant de configurer le serveur avec l’encodage par défaut UTF-8.

# configure locales
locale-gen fr_FR.UTF-8 #replace fr with your language
dpkg-reconfigure locales
# define your timezone [useful for logs]
dpkg-reconfigure tzdata
apt install ntp ntpdate

Note

Il faudra aussi configurer les autres logiciels pour qu’ils utilisent cet encodage par défaut si ce n’est pas le cas.

Installation des paquets nécessaires

Avertissement

Lizmap Web Client s’appuie sur Jelix 1.8. Vous devez installer au minimum la version 7.4 de PHP. Les extensions dom, simplexml, pcre, session, tokenizer et spl sont requises (elles sont actives en général dans une installation standard de PHP 7 ou 8).

sudo su # only necessary if you are not logged in as root
apt update # update packages list
apt install curl openssl libssl1.1 nginx-full nginx nginx-common

Sur un système Debian 11 ou Ubuntu 20.04 LTS, installez ces paquets :

apt install php7.4-fpm php7.4-cli php7.4-bz2 php7.4-curl php7.4-gd php7.4-intl php7.4-json php7.4-mbstring php7.4-pgsql php7.4-sqlite3 php7.4-xml php7.4-ldap php7.4-redis

Configuration web

Créez un nouveau fichier /etc/nginx/sites-available/lizmap.conf :

server {
    listen 80;

    server_name localhost;
    root /var/www/html/lizmap;
    index index.php index.html index.htm;

    # compression setting
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_min_length 100;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript text/json;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ [^/]\.php(/|$) {
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       set $path_info $fastcgi_path_info; # because of bug http://trac.nginx.org/nginx/ticket/321
       try_files $fastcgi_script_name =404;
       include fastcgi_params;

       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $path_info;
       fastcgi_param PATH_TRANSLATED $document_root$path_info;
       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       fastcgi_param SERVER_NAME $http_host;
    }
}

Vous devez déclarer un domaine lizmap.local quelque part (dans votre fichier /etc/hosts, ou sur vos DNS), ou remplacez le par votre propre nom de domaine.

Activez l’hôte virtuel que vous venez juste de créer.

ln -s /etc/nginx/sites-available/lizmap.conf /etc/nginx/sites-enabled/lizmap.conf

Redémarrer Nginx

Vous devez redémarrer le serveur Nginx pour valider la configuration.

service nginx restart

Activer la géolocalisation

Le système de géolocalisation automatique fourni par lizmap est basé sur les services de Google. Pour l’activer, votre application WebSIG doit être accessible grâce à un protocole sécurisé comme https. Pour plus d’informations :

https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins

https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04

Création des répertoires pour les données

Les fichiers QGIS et les autres fichiers de cache seront stockés dans ces répertoires.

mkdir /home/data
mkdir /home/data/cache/

Base de données spatiale : PostgreSQL

Note

Cette section est optionnelle. Lisez PostgreSQL.

Il peut être très intéressant d’utiliser PostGreSQL et PostGIS pour gérer les données spatiales de manière centralisée sur le serveur.

Installation

Sur Debian 11, vous trouverez PostgreSQL 13.

Installez d’abord ces paquets :

apt install postgresql postgresql-contrib postgis pgtune

Vous aurez peut-être à recréer un cluster Postgresql sur une installation tout fraîche, pour pouvoir indiquer la locale à utiliser. Vous pouvez sauter cette étape si la locale est déjà celle attendue, ou si vous avez déjà des bases de données. Attention : ces instructions détruisent toutes bases de données existantes !

service postgresql stop
pg_dropcluster --stop 13 main
pg_createcluster 13 main --locale fr_FR.UTF8 -p 5432 --start

Maintenant vous pouvez dans PostgreSQL, créer un utilisateur et une base de donnée pour Lizmap.

Adapatation de la configuration de PostgreSQL

Nous utiliserons pgtune, un utilitaire qui peut générer automatiquement un fichier de configuration PostgreSQL adapté aux propriétés du serveur (mémoire, processeurs, etc.)

https://pgtune.leopard.in.ua/

# PostgreSQL Tuning with pgtune
pgtune -i /etc/postgresql/13/main/postgresql.conf -o /etc/postgresql/13/main/postgresql.conf.pgtune --type Web
cp /etc/postgresql/13/main/postgresql.conf /etc/postgresql/13/main/postgresql.conf.backup
cp /etc/postgresql/13/main/postgresql.conf.pgtune /etc/postgresql/13/main/postgresql.conf
nano /etc/postgresql/13/main/postgresql.conf
# Restart to check any problems
service postgresql restart
# If error messages, increase the linux kernel configuration variables
echo "kernel.shmall = 4294967296" >> /etc/sysctl.conf # to increase shred buffer param in kernel
echo "kernel.shmmax = 4294967296" >> /etc/sysctl.conf
echo 4294967296 > /proc/sys/kernel/shmall
echo 4294967296 > /proc/sys/kernel/shmmax
sysctl -a | sort | grep shm
# Restart PostgreSQL
service postgresql restart

Pour installer les tables de Lizmap dans PostgreSQL, (au lieu de SqLite par défaut), vous pouvez sauter cette section, et vous devrez modifier le fichier lizmap/var/config/profiles.ini.php.

Installer les sources de Lizmap Web Client

Vous pouvez trouver la dernière version stable disponible sur la page release de Github.

Avertissement

N’utilisez pas les zip générés automatiquement par Github sur son site. Utilisez uniquement les zip attachés à la release.

Nous définissons d’abord des variables pour simplifier les instructions. Définissons la version et le répertoire où Lizmap sera installé. Ajustez ces valeurs en fonction de vos besoins.

VERSION=3.6.5
LOCATION=/var/www

Ensuite vous pouvez installer le fichier zip :

cd $LOCATION
wget https://github.com/3liz/lizmap-web-client/releases/download/$VERSION/lizmap-web-client-$VERSION.zip
# Unzip archive
unzip lizmap-web-client-$VERSION.zip

# virtual link for http://localhost/lizmap/
ln -s $LOCATION/lizmap-web-client-$VERSION/lizmap/www/ /var/www/html/lizmap
# Remove archive
rm lizmap-web-client-$VERSION.zip

Configurer Lizmap pour la prise en charge des bases de données

Lizmap a besoin d’une base de donnée pour stocker ses propres données et pour accéder aux données utilisées par vos projets QGIS, dans l’outil d’édition.

Créer profiles.ini.php dans lizmap/var/config en copiant profiles.ini.php.dist.

cd lizmap/var/config
cp profiles.ini.php.dist profiles.ini.php
cd ../../..

PostgreSQL

Pour l’édition des couches PostGIS dans Lizmap Web Client, il faut installer la prise en charge de PostgreSQL pour PHP. Aucun fichier de configuration n’a besoin d’être modifier pour éditer une couche PostGIS. Vous devez seulement vous assurer que le serveur Lizmap puisse accéder à la base de donnée avec les paramètres d’accès stockés dans le projet QGIS (ou dans une fichier de service PostgreSQL).

apt install php7.4-pgsql
service php7.4-fpm restart

Pour les logs Lizmap, les utilisateurs et les groupes, cela peut être stocké soit dans une base SqLite, soit une base PostgreSQL. Pour stocker ces informations dans PostgreSQL, suivez ces instructions.

Dans une copie toute fraiche de lizmap/var/config/profiles.ini.php, vous devriez avoir :

[jdb:jauth]
driver=sqlite3
database="var:db/jauth.db"

[jdb:lizlog]
driver=sqlite3
database="var:db/logs.db"

C’est la configuration par défaut pour utiliser Sqlite. Vous devez changer ces sections pour utiliser Postgresql, et indiquer les paramètres d’accès à votre base de données Postgresql :

[jdb:jauth]
driver=pgsql
host=localhost
port=5432
database="your_database"
user=my_login
password=my_password
search_path=public

[jdb:lizlog]
driver=pgsql
host=localhost
port=5432
database="your_database"
user=my_login
password=my_password
search_path=public

Vous pouvez utiliser un schéma spécifique pour stocker les tables Lizmap. Et vous voudriez peut-être que Lizmap accède à d’autres schéma. Vous devez alors paramétrer correctement search_path. Exemple :

search_path=lizmap,my_schema,public

Si vous avez configuré un fichier de service pour Postgresql sur votre serveur, vous voudriez peut-être indiquer le nom du service au lieu d’indiquer le login, mot de passe etc. Utilisez alors le paramètre service :

[jdb:jauth]
driver=pgsql
service=my_service
database="your_database"
search_path=lizmap,public

[jdb:lizlog]
driver=pgsql
service=my_service
database="your_database"
search_path=lizmap,public

Spatialite

Activer l’extension Spatialite

Pour utiliser l’edition de couches spatialite, vous devez ajouter l’extension spatialite dans PHP. Vous pouvez suivre ces instructions pour le faire : http://www.gaia-gis.it/gaia-sins/spatialite-cookbook-fr/html/php.html

Lizmap Web Client test si Spatialite est activé dans PHP. Si ce n’est pas le cas, alors les couches Spatialite ne pourront pas être utilisée dans l’outil d’édition. Vous pouvez toujours utiliser Postgresql pour l’édition de données.

Donner les droits adéquats au répertoire contenant les bases de données Spatialite

Pour que Lizmap Web Client puisse modifier les données contenues dans les bases Spatialite, vous devez vous assurer que l’utilisateur du serveur web (www-data) a les droits en écriture dans le répertoire contenant les fichiers Spatialite

Par exemple, si un répertoire contient un projet QGIS, qui utilise une base de données Spatialite placée dans un répertoire bdd au même niveau que le projet QGIS :

/path/to/a/lizmap_directory
|--- mon_projet.qgs
|--- bdd
   |--- my_spatialite_file.sqlite

Alors il faut donner les droits de cette manière :

chown :www-data /path/to/a/lizmap_directory -R
chmod 775 /path/to/a/lizmap_directory -R

Note

Donc si vous voulez installer Lizmap pour fournir un accès à de multiple fournisseurs de cartes, vous devez leur demander de toujours créer un répertoire db au même niveau que les projets QGIS dans le répertoire de Lizmap. Cela facilitera le travail de l’administrateur, qui aura juste à changer les droits d’un seul répertoire.

Configurer Lizmap et lancer l’installateur

Donner les droits adéquats aux répertoires et fichiers

Mettez les droits pour Nginx/Apache, ainsi les scripts PHP pourront écrire des fichiers temporaires ou modifier des fichiers.

cd /var/www/lizmap-web-client-$VERSION/
lizmap/install/set_rights.sh www-data www-data

Modifier la configuration

Créez lizmapConfig.ini.php, localconfig.ini.php et éditez les pour mettre les paramètres spécifiques à votre installation. Vous pouvez modifier lizmapConfig.ini.php pour mettre l’URL du serveur QGIS et d’autres choses.

cd lizmap/var/config
cp lizmapConfig.ini.php.dist lizmapConfig.ini.php
cp localconfig.ini.php.dist localconfig.ini.php
cd ../../..

Lancement de l’installateur

Après avoir configuré les fichiers, vous pouvez lancer l’installateur

php lizmap/install/installer.php

Cela finira l’installation, et créera toutes les tables SQL nécessaires à Lizmap.

Ajouter des projets de démonstration

Si vous voulez tester Lizmap avec quelques projets de démonstration, vous devez installer unzip et soit wget ou curl.

lizmap/install/reset.sh --keep-config --demo

Premier test

Pour tester : http://localhost/lizmap dans votre navigateur.

Si vous avez un 500 - internal server error, lancez de nouveau :

cd /var/www/lizmap-web-client-$VERSION/
lizmap/install/set_rights.sh www-data www-data

Note

Remplacer localhost par l’adresse ou l’adresse IP de votre serveur.

Dans le panneau d’administration, vous pouvez vérifier Version de QGIS Server et URL du serveur WMS avec l’URL du serveur QGIS.

Avertissement

Avant d’essayer d’avoir un projet QGIS s’affichant dans Lizmap, vous devez avoir une connexion qui fonctionne correctement entre QGIS Server et Lizmap Web Client. Les versions des plugins de QGIS Server doivent être visible dans l’interface d’administration. Lisez Extension Lizmap QGIS Serveur.

Si vous n’avez pas installé la démo, vous pouvez vérifier que vous avez bien installé Lizmap et configuré le serveur QGIS en vérifiant dans Lizmap la section qgis_server à cette url : http://localhost/lizmap/index.php/view/app/metadata

{
    "qgis_server":{
        "test":"OK",
        "mime_type":"text\/xml; charset=utf-8"
    }
}

Lizmap est aussi accessible, sans plus de configurations, comme serveur WMS et WFS depuis un navigateur:

http://localhost/lizmap/index.php/lizmap/service/?repository=montpellier&project=montpellier&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetCapabilities

http://localhost/lizmap/index.php/lizmap/service/?repository=montpellier&project=montpellier&SERVICE=WFS&REQUEST=GetCapabilities

et depuis QGIS:

http://localhost/lizmap/index.php/lizmap/service/?repository=montpellier&project=montpellier&VERSION=1.3.0&

http://localhost/lizmap/index.php/lizmap/service/?repository=montpellier&project=montpellier&

Note

Les accès aux serveurs WMS et WFS peuvent être restreints en assignant des droits à certains projets, pour cela consultez la partie administration.

Modules Lizmap

Précédemment, nous expliquions comment vous pouviez ajouter des extensions pour QGIS Server, pour ajouter plus de fonctionnalités à QGIS. Maintenant que nous avons Lizmap prêt et fonctionnel, nous pouvons ajouter des modules Lizmap pour ajouter des fonctionnalités.

La liste est disponible dans Lizmap introduction. Dans leur dépôt Github, il y a en en général les instructions pour les installer. Vous devriez les suivre. Cependant voici les instructions générales pour installer un module.

Installer les modules avec Composer

Vous pouvez installer des modules avec Composer, le gestionnaire de paquet de PHP. Bien sûr, c’est possible seulement si l’auteur du module a créé un paquet pour son module. Un tel paquet a un nom, par exemple « lizmap/lizmap-pgmetadata-module ». La documentation du module devrait l’indiquer.

Vous devez installer Composer. Voyez les instructions sur son site web http://getcomposer.org.

Vous devez créer un fichier composer.json dans lizmap/my-packages/ en copiant le fichier composer.json.dist qui s’y trouve. Et lancer une première fois Composer

cp -n lizmap/my-packages/composer.json.dist lizmap/my-packages/composer.json
composer install --working-dir=lizmap/my-packages

Ensuite vous pouvez installer le paquet du module

composer require --working-dir=lizmap/my-packages "lizmap/lizmap-pgmetadata-module"

Si vous voulez installer une nouvelle version du module, lancez :

composer update --working-dir=lizmap/my-packages

Lisez la documentation du module pour savoir si il y a des étapes supplémentaires à faire pour le configurer.

Vous aurez au moins à lancer le configurateur du module avec cette commande :

php lizmap/install/configurator.php name_of_the_module
# example:
php lizmap/install/configurator.php pgmetadata

Pour finir l’installation, lancez une nouvelle fois l’installateur de Lizmap :

php lizmap/install/installer.php
lizmap/install/clean_vartmp.sh
lizmap/install/set_rights.sh

Installer des modules sans Composer

Pour installer le module sans Composer, récupérez le fichier zip du module.

  • Extrayez le module dans lizmap/lizmap-modules/. Par exemple, pour le module « PgMetaData » :

$ ls -hl lizmap/lizmap-modules/pgmetadata/
total 44K
drwxrwxr-x 2 etienne etienne 4,0K nov.  17 12:38 classes
drwxrwxr-x 2 etienne etienne 4,0K nov.   4 12:50 controllers
drwxrwxr-x 2 etienne etienne 4,0K nov.   4 10:09 daos
-rw-rw-r-- 1 etienne etienne  146 nov.   4 10:38 events.xml
drwxrwxr-x 2 etienne etienne 4,0K nov.   4 10:09 forms
drwxrwxr-x 2 etienne etienne 4,0K nov.   4 12:50 install
drwxrwxr-x 4 etienne etienne 4,0K nov.   4 10:09 locales
-rw-rw-r-- 1 etienne etienne  789 nov.  19 16:02 module.xml
drwxrwxr-x 2 etienne etienne 4,0K nov.   4 10:09 templates
-rw-rw-r-- 1 etienne etienne  106 nov.   4 10:39 urls.xml
drwxrwxr-x 2 etienne etienne 4,0K nov.  17 12:38 www
  • Lisez la documentation du module pour savoir si il y a des étapes supplémentaires à faire pour le configurer.

Vous aurez au moins à lancer le configurateur du module avec cette commande :

php lizmap/install/configurator.php name_of_the_module
# example:
php lizmap/install/configurator.php pgmetadata
  • Lancez l’installation :

php lizmap/install/installer.php
lizmap/install/clean_vartmp.sh
lizmap/install/set_rights.sh