Installation de Lizmap sous Linux Debian ou Ubuntu

Configuration générique du serveur

La documentation fournit un exemple pour configurer un serveur avec une distribution Debian ou Ubuntu. Nous supposons que vous avez un système de base installé et mis à jour

Avertissement

Cette page ne décrit pas comment sécuriser votre serveur Apache.

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.6. Vous devez installer au minimum la version 5.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 5.4).

Note

La version actuelle prend en charge PHP 7, donc il devrait y être avant de l’installer sur Debian 9 ou ubuntu 16.04.

sudo su # only necessary if you are not logged in as root
apt update # update package lists
# On Ubuntu 14.04 LTS install the following packages
apt-get install xauth htop curl apache2 libapache2-mod-fcgid libapache2-mod-php5 php5-cgi php5-gd php5-sqlite php5-curl php5-xmlrpc python-simplejson python-software-properties
# On Ubuntu 18.04 LTS
apt install xauth htop curl apache2 libapache2-mod-fcgid libapache2-mod-php7.2 php7.2-cgi php7.2-gd php7.2-sqlite php7.2-curl php7.2-xmlrpc php7.2-xml python-simplejson software-properties-common

Configuration php7

On utilise dans cet exemple le mpm-worker d’Apache. On doit donc configurer manuellement l’activation de php5.

cat > /etc/apache2/conf-available/php.conf << EOF
<Directory /usr/share>
  AddHandler fcgid-script .php
  FCGIWrapper /usr/lib/cgi-bin/php5 .php
  Options ExecCGI FollowSymlinks Indexes
</Directory>

<Files ~ (\.php)>
  AddHandler fcgid-script .php
  FCGIWrapper /usr/lib/cgi-bin/php5 .php
  Options +ExecCGI
  allow from all
</Files>
EOF

Note

Dans des versions plus anciennes d’apache, la configuration pour php-cgi est située dans /etc/apache2/conf.d/php.conf. Copiez le texte ci-dessous, puis:

a2enconf php

Configuration du mpm-worker

On modifie le fichier de configuration d’Apache pour adapter les options du mpm_worker à la configuration du serveur.

# configuring worker
nano /etc/apache2/apache2.conf # aller au worker et mettre par exemple
<IfModule mpm_worker_module>
  StartServers       4
  MinSpareThreads    25
  MaxSpareThreads    100
  ThreadLimit          64
  ThreadsPerChild      25
  MaxClients        150
  MaxRequestsPerChild   0
</IfModule>

Configuration de mod_fcgid

QGIS Server fonctionne en mode fcgi. Il faut donc configurer le mod_fcgid d’Apache pour l’adapter aux capacités du serveur.

# Open the mod_fcgid configuration file
nano /etc/apache2/mods-enabled/fcgid.conf
# Paste the following content and adapt it
<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 300
  FcgidIOTimeout 300
  FcgidMaxProcessesPerClass 50
  FcgidMinProcessesPerClass 20
  FcgidMaxRequestsPerProcess 500
  IdleTimeout   300
  BusyTimeout   300
</IfModule>

Configuration de la compression

nano /etc/apache2/conf-available/mod_deflate.conf # y ajouter
<Location />
        # Insert filter
        SetOutputFilter DEFLATE
        # Netscape 4.x encounters some problems ...
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        # Netscape 4.06-4.08 encounter even more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        # MSIE pretends it is Netscape, but all is well
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        # Do not compress images
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
        # Ensure that proxy servers deliver the right content
        Header append Vary User-Agent env=!dont-vary
</Location>

Note

Dans les vieilles versions d’apache, la configuration pour DEFLATE compression est dans /etc/apache2/conf.d/mod_deflate.conf.

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

Redémarrer Apache

Il faut redémarrer le serveur Apache pour valider la configuration

service apache2 restart

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

 mkdir /home/data
 mkdir /home/data/cache/
# optional
 mkdir /home/data/ftp
 mkdir /home/data/ftp/template/
 mkdir /home/data/ftp/template/qgis

SGBD Spatial : PostGreSQL

Note

Cette partie est optionnelle

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

# Install packages
apt-get install postgresql postgresql-contrib postgis pgtune php5-pgsql

# A cluster is created in order to specify the storage directory
mkdir /home/data/postgresql
service postgresql stop
pg_dropcluster --stop 9.5 main
chown postgres:postgres /home/data/postgresql
pg_createcluster 9.5 main -d /home/data/postgresql --locale fr_FR.UTF8 -p 5678 --start

# Creating a "superuser" user
su - postgres
createuser myuser --superuser
# Modifying passwords
psql
ALTER USER postgres WITH ENCRYPTED PASSWORD '************';
ALTER USER myuser WITH ENCRYPTED PASSWORD '************';
\q
exit

Adapatation de la configuration de PostgreSQL

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

# PostgreSQL Tuning with pgtune
pgtune -i /etc/postgresql/9.5/main/postgresql.conf -o /etc/postgresql/9.5/main/postgresql.conf.pgtune --type Web
cp /etc/postgresql/9.5/main/postgresql.conf /etc/postgresql/9.5/main/postgresql.conf.backup
cp /etc/postgresql/9.5/main/postgresql.conf.pgtune /etc/postgresql/9.5/main/postgresql.conf
nano /etc/postgresql/9.5/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 increas 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

Serveur FTP : pure-ftpd

Note

Cette partie est optionnelle

Installation

apt-get install pure-ftpd pure-ftpd-common

Configuration

# Creating an empty shell for users
ln /bin/false /bin/ftponly
# Configuring FTP server
echo "/bin/ftponly" >> /etc/shells
# Each user is locked in his home
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
# Allow to use secure FTP over SSL
echo "1" > /etc/pure-ftpd/conf/TLS
# Configure the properties of directories and files created by users
echo "133 022" > /etc/pure-ftpd/conf/Umask
# The port range for passive mode (opening outwards)
echo "5400 5600" > /etc/pure-ftpd/conf/PassivePortRange
# Creating an SSL certificate for FTP
openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
chmod 400 /etc/ssl/private/pure-ftpd.pem
# Restart FTP server
service pure-ftpd restart

Création d’un compte utilisateur

# Creating a user accountr
MYUSER=demo
useradd -g client -d /home/data/ftp/$MYUSER -s /bin/ftponly -m $MYUSER -k /home/data/ftp/template/
passwd $MYUSER
# Fix the user's FTP root
chmod a-w /home/data/ftp/$MYUSER
# Creating empty directories that will be the future Lizmap Web Client directories
mkdir /home/data/ftp/$MYUSER/qgis/rep1 && chown $MYUSER:client /home/data/ftp/$MYUSER/qgis/rep1
mkdir /home/data/ftp/$MYUSER/qgis/rep2 && chown $MYUSER:client /home/data/ftp/$MYUSER/qgis/rep2
mkdir /home/data/ftp/$MYUSER/qgis/rep3 && chown $MYUSER:client /home/data/ftp/$MYUSER/qgis/rep3
mkdir /home/data/ftp/$MYUSER/qgis/rep4 && chown $MYUSER:client /home/data/ftp/$MYUSER/qgis/rep4
mkdir /home/data/ftp/$MYUSER/qgis/rep5 && chown $MYUSER:client /home/data/ftp/$MYUSER/qgis/rep5
# Create a directory to store the cached server
mkdir /home/data/cache/$MYUSER
chmod 700 /home/data/cache/$MYUSER -R
chown www-data:www-data /home/data/cache/$MYUSER -R

Serveur cartographique: QGIS Server

Note

Des étapes de l’installation peuvent être différentes pour des versions spécifiques du système d’exploitation. Veuillez vous référer à http://qgis.org/fr/site/forusers/download.html pour une documentation à jour.

Installation

# Add the repository UbuntuGis
cat /etc/apt/sources.list.d/debian-gis.list
deb http://qgis.org/debian trusty main
deb-src http://qgis.org/debian trusty main

# Add keys
sudo gpg --recv-key CAEB3DC3BDF7FB45
sudo gpg --export --armor CAEB3DC3BDF7FB45 | sudo apt-key add -

# Update package list
sudo apt-get update

# Install QGIS Server
sudo apt-get install qgis-server python-qgis

Note

Voir https://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/server/index.html pour plus d’informations sur Qgis Server.

Récupérer et installer LizMap Web Client

cd /var/www/

Depuis le fichier ZIP

Vous pouvez trouver la dernière version stable disponible à l’adresse https://github.com/3liz/lizmap-web-client/releases/

cd /var/www/
# Options
VERSION=3.2.3
# Archive recovery with wget
wget https://github.com/3liz/lizmap-web-client/archive/$VERSION.zip
# Unzip archive
unzip $VERSION.zip
# virtual link for http://localhost/lm
ln -s /var/www/lizmap-web-client-$VERSION/lizmap/www/ /var/www/html/lm
# Remove archive
rm $VERSION.zip

Mettez les droits pour Apache, afin que les scripts PHP puisse écrire des fichiers temporaires ou faire des changements.

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

Créez les fichiers lizmapConfig.ini.php, localconfig.ini.php et profiles.ini.php, et éditez les pour spécifier les paramètres pour votre installation. Vous pouvez modifier lizmapConfig.ini.php pour mettre l’url du serveur QGIS, et d’autres choses, et profiles.ini.php pour stocker les données dans une autre base que la base sqlite.

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

Au cas où vous voudriez activer le repertoire des démos, ajoutez juste dans localconfig.ini.php :

[modules]
lizmap.installparam=demo

Ensuite vous pouvez lancer l’installateur

php lizmap/install/installer.php

Pour tester : http://127.0.0.1/lm 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

Version de développement avec Github

Avertissement

la version de développement est en constante évolution, et des bugs peuvent survenir. Ne pas l’utiliser en production.

  • Pour installer

apt-get install git
cd /var/www/
VERSION=master
# Clone the master branch
git clone https://github.com/3liz/lizmap-web-client.git lizmap-web-client-$VERSION
# Go into the git repository
cd lizmap-web-client-$VERSION
# Create a personal branch for your changes
git checkout -b mybranch
  • Pour mettre à jour votre branche depuis le dépôt master

cd /var/www/lizmap-web-client-$VERSION
# Check that you are on the branch: mybranch
git checkout mybranch

# If you have any changes, make a commit
git status
git commit -am "Your commit message"

# Save your configuration files!
lizmap/install/backup.sh /tmp

# Update your master branch
git checkout master && git fetch origin && git merge origin/master
# Apply to your branch, marge and manage potential conflicts
git checkout mybranch && git merge master
# Apply rights
chown :www-data temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R
chmod 775 temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R

Note

Il est toujours bon de faire une sauvegarde avant toute mise à jour.

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

cd /var/www/lizmap-web-client-$VERSION
chown :www-data temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R
chmod 775 temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R

Premier test

Aller à l’accueil de Lizmap pour voir si l’installation a été correctement réalisée : http://localhost/lm

Note

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

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

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

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

et depuis QGIS:

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

http://localhost/lm/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.

Outil d’édition : Configurer le serveur avec le support des bases de données

Note

Cette partie est optionnelle

PostgreSQL

Pour que l’édition de couches PostGIS dans Lizmap Web Client fonctionnent, il faut installer le support de PostGreSQL pour PHP.

sudo apt-get install php5-pgsql
sudo service apache2 restart

Note

Pour l’édition, nous conseillons fortement d’utiliser une base de données PostGreSQL. Cela simplifie fortement l’installation et la récupération des données saisies par les utilisateurs.

Spatialite

Activer l’extension Spatialite

Pour pouvoir utiliser l’édition sur des couches spatiatlite, il faut ajouter l’extension spatialite dans PHP. Vous pouvez suivre les instructions suivantes pour le faire : http://www.gaia-gis.it/spatialite-2.4.0-4/splite-php.html

Lizmap Web Client teste si le support du spatialite est bien activé dans le php. S’il ne l’est pas, alors les couches spatialites ne seront pas utilisables dans l’outil d’édition. Vous pouvez toujours utiliser des données PostGreSQL pour l’édition.

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

Pour que l’application Lizmap Web Client puisse modifier les données contenues dans les bases Spatialite, il faut s’assurer que l’utilisateur Apache (www-data) ait bien les droits en écriture sur le répertoire contenant chaque fichier 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

c’est pourquoi, si vous souhaitez installer Lizmap pour offrir un accès à plusieurs utilisateurs, nous vous conseillons de leur dire de toujours créer un répertoire bdd au même niveau que les projets QGIS dans le répertoire Lizmap. Cela facilitera le travail de l’administrateur qui pourra modifier les droits de cet unique répertoire.