Py-QGIS-Server

Py-QGIS-Server a été conçu pour gérer les processus cartographiques du serveur QGIS.

Prérequis

Nous supposons que vous avez déjà installé les paquets de QGIS Serveur, comme expliqué dans la documentation de QGIS Serveur.

Note

Vous n’avez pas besoin de lire la configuration du serveur web à propos de Nginx/Apache dans la documentation de QGIS. Py-QGIS-Server possède son propre serveur web.

Installer dans un venv Python

Nous ajoutons les paquets nécessaires qui ne sont pas fournis avec QGIS Serveur :

apt install python3-venv python3-psutil

Ensuite, nous créons l’environnement virtuel Py-QGIS-Server et installons py-qgis-server avec pip :

set -e
python3 -m venv /opt/local/py-qgis-server --system-site-packages
/opt/local/py-qgis-server/bin/pip install -U pip setuptools wheel pysocks typing py-qgis-server

Py-QGIS-Server est installé.

Configuration et fichiers associés

Dossiers utilisés ci-dessous

mkdir -p /srv/qgis/plugins /srv/qgis/config /var/log/qgis /var/lib/py-qgis-server /var/data

Fichier à surveiller pour le redémarrage des workers

Nous créons un fichier vide qui sera surveillé par Py-QGIS-Server pour vérifier quand redémarrer les workers cartographiques de QGIS Serveur.

touch /var/lib/py-qgis-server/py-qgis-restartmon
chmod 664 /var/lib/py-qgis-server/py-qgis-restartmon

Le fichier bash pour redémarrer les workers

Nous créons le fichier exécutable /usr/bin/qgis-reload pour redémarrer les workers cartographiques de QGIS Serveur. Il contiendra :

#!/bin/bash

touch /var/lib/py-qgis-server/py-qgis-restartmon

Ensuite, nous pouvons changer son mod :

chmod 750 /usr/bin/qgis-reload

Le fichier de configuration

Nous créons le fichier de configuration de Py-QGIS-Server /srv/qgis/server.conf. Il contiendra :

#
# Py-QGIS-Server configuration
# https://docs.3liz.org/py-qgis-server/
#

[server]
port = 7200
interfaces = 127.0.0.1
workers = 4
pluginpath = /srv/qgis/plugins
timeout = 200
restartmon = /var/lib/py-qgis-server/py-qgis-restartmon

[logging]
level = info

[projects.cache]
strict_check = false
rootdir = /srv/data
size = 50
advanced_report = no

[monitor:amqp]
routing_key =
default_routing_key=
host =

[api.endpoints]
lizmap_api=/lizmap

[api.enabled]
lizmap_api=yes

Dans cet exemple :

  • QGIS Serveur sera disponible à l’adresse http://127.0.0.1:7200/ows/.

  • les extensions sont installées dans /srv/qgis/plugins (pluginpath). Voir Extensions QGIS serveur.

  • le fichier à surveiller pour le redémarrage des workers est /var/lib/py-qgis-server/py-qgis-restartmon (restartmon).

  • le répertoire contenant les projets à publier /srv/data (rootdir). Les projets doivent être dans des sous-dossiers.

  • L’API Lizmap QGIS Server est activée

Gérer avec systemd

Tout d’abord, nous créons un fichier d’environnement /srv/qgis/config/qgis-service.env avec

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
DISPLAY=:99
QGIS_OPTIONS_PATH=/srv/qgis/
QGIS_AUTH_DB_DIR_PATH=/srv/qgis/
GDAL_CACHEMAX=2048
QGIS_SERVER_CACHE_SIZE=2048
QGIS_SERVER_LIZMAP_REVEAL_SETTINGS=TRUE
QGIS_SERVER_FORCE_READONLY_LAYERS=TRUE
QGIS_SERVER_TRUST_LAYER_METADATA=TRUE
QGIS_SERVER_APPLICATION_NAME=qgis-server

Dans ce dossier, nous avons défini :

  • La langue

  • Le port d’affichage du Xvfb, nécessaire pour imprimer le PDF

  • Les options QGIS et le chemin authDB (nécessaire pour HTTPS, lorsqu’il est utilisé dans des couches distantes telles que les tuiles OSM).

  • Variable d’environnement Lizmap pour révéler les paramètres

  • Autres variables du serveur QGIS, extraites de la documentation.

Ensuite, nous pouvons créer le fichier QGIS service systemd /etc/systemd/system/qgis.service avec

[Unit]
Description=QGIS server
After=network.target

[Service]
Type=simple

ExecStart=/opt/local/py-qgis-server/bin/qgisserver -c /srv/qgis/server.conf

# FIXME it is recommended to have a script *synchronous*, which is not the case here
ExecReload=/usr/bin/qgis-reload

KillMode=control-group
KillSignal=SIGTERM
TimeoutStopSec=10

Restart=always

StandardOutput=append:/var/log/qgis/qgis-server.log
StandardError=inherit
SyslogIdentifier=qgis

EnvironmentFile=/srv/qgis/config/qgis-service.env
User=root

LimitNOFILE=4096

[Install]
WantedBy=multi-user.target

Enfin, nous activons le service QGIS Serveur pour le démarrer et nous assurer qu’il est lancé au démarrage du système :

systemctl enable qgis
service qgis start

Debug et vérification

Astuce

1. We can check that QGIS Server with Py-QGIS-Server is working with : curl http://127.0.0.1:7200/ows/

2. After the installation of Lizmap Server QGIS plugin, we can check with : curl http://127.0.0.1:7200/lizmap/server.json | jq '.' Read Extensions QGIS serveur with the use of QGIS-Plugin-Manager.

Adapter la configuration du client Web Lizmap

Soit en modifiant manuellement le fichier lizmap/var/config/lizmapConfig.ini.php, soit en le modifiant dans l’interface graphique du client Web Lizmap :

[services]
;URL to QGIS Server for OGC web services
wmsServerURL="http://127.0.0.1:7200/ows/"
;URL to the API exposed by the Lizmap plugin for QGIS Server
lizmapPluginAPIURL="http://127.0.0.1:7200/lizmap/"

; path to find repositories
rootRepositories="/var/data"

Votre panneau Information serveur doit vous indiquer la version de QGIS Serveur et les extensions installées.