11.1. Lesson: Installer QGIS Server

Le but de cette leçon: Apprendre comment installer QGIS Server sur Debian Stretch. Avec des variations négligeables, vous pouvez également le suivre pour toute distribution basée sur Debian comme Ubuntu et ses dérivés.

Note

Dans Ubuntu, vous pouvez utiliser votre utilisateur normal, en ajoutant sudo aux commandes nécessitant des autorisations d’administrateur. Dans Debian, vous pouvez travailler en tant qu’administrateur (root), sans utiliser sudo.

11.1.1. moderate Installer Follow Along: depuis les packages

Dans cette leçon, nous allons seulement faire l’installation à partir de paquets comme indiqué ici .

Installez QGIS Server avec:

apt install qgis-server
# if you want to install server plugins, also:
apt install python-qgis

QGIS Server doit être utilisé en production sans que QGIS Desktop (avec le serveur X qui l’accompagne) soit installé sur la même machine.

11.1.2. moderate Follow Along: Exécutable QGIS Server

L’exécutable QGIS Server est qgis-mapserv.fcgi. Vous pouvez vérifier à quel endroit il a été installé au moyen de la commande: find / -name 'qgis_mapserv.fcgi' qui devrait renvoyer quelque chose comme /usr/lib/cgi-bin/qgis_mapserv.fcgi.

De manière facultative, si vous voulez tester l’exécutable en ligne de commande vous pouvez lancer: /usr/lib/cgi-bin/qgis_mapserv.fcgi, ce qui devrait produire un résultat semblable à:

QFSFileEngine::open: No file name specified
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Content-Length: 206
Content-Type: text/xml; charset=utf-8

<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
 <ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>

C’est une bonne chose. Ce message signifie que nous sommes sur le bon chemin puisque le serveur répond que nous n’avons demandé aucun service supporté. Nous verrons plus loin comment faire des requêtes WMS.

11.1.3. Follow Along: Configuration HTTP du Serveur

Pour accéder au serveur QGIS depuis un navigateur internet, il faut mettre en place un serveur HTTP.

Dans cette leçon, nous allons utiliser le serveur HTTP Apache, appelé familièrement Apache.

Nous devons d’abord installer Apache en exécutant la commande suivante dans un terminal: :

apt install apache2 libapache2-mod-fcgid

Vous pouvez faire fonctionner QGIS Server sur votre site web par défaut, ou configurer un hôte virtuel spécifiquement pour cela, comme suit.

Dans le répertoire /etc/apache2/sites-available créons un fichier nommé qgis.demo.conf, avec ce contenu:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName qgis.demo

  DocumentRoot /var/www/html

  # Apache logs (different than QGIS Server log)
  ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log
  CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined

  # Longer timeout for WPS... default = 40
  FcgidIOTimeout 120

  FcgidInitialEnv LC_ALL "en_US.UTF-8"
  FcgidInitialEnv PYTHONIOENCODING UTF-8
  FcgidInitialEnv LANG "en_US.UTF-8"

  # QGIS log (different from apache logs) see https://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/ogc_server_support.html#qgis-server-logging
  FcgidInitialEnv QGIS_SERVER_LOG_FILE /var/log/qgis/qgisserver.log
  FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0

  FcgidInitialEnv QGIS_DEBUG 1

  # default QGIS project
  SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs

  # QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the Server's FCGI process user
  FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/"
  FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE "/home/qgis/qgisserverdb/qgis-auth.db"

  # See https://docs.qgis.org/testing/en/docs/user_manual/working_with_vector/supported_data.html#pg-service-file
  SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf
  FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass"

  # Tell QGIS Server instances to use a specific display number
  FcgidInitialEnv DISPLAY ":99"

  # if qgis-server is installed from packages in debian based distros this is usually /usr/lib/cgi-bin/
  # run "locate qgis_mapserv.fcgi" if you don't know where qgis_mapserv.fcgi is
  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

 <IfModule mod_fcgid.c>
 FcgidMaxRequestLen 26214400
 FcgidConnectTimeout 60
 </IfModule>

</VirtualHost>

Vous pouvez faire ce qui précède dans un système linux Desktop en collant et en sauvegardant la configuration ci-dessus après avoir fait nano /etc/apache2/sites-available/qgis.demo.conf.

Note

Quelques unes des options de configuration sont expliquées dans la section Server Configuration avancée.

Créons maintenant les répertoires de stockage des logs de QGIS Server et de la base d’authentification.

mkdir /var/log/qgis/
chown www-data:www-data /var/log/qgis

mkdir /home/qgis/qgisserverdb
chown www-data:www-data /home/qgis/qgisserverdb

Note

www-data est l’utilisateur Apache sur les systèmes basés sur Debian et il faut qu’Apache accède à ces répertoires et aux fichiers qu’ils contiennent. La commande chown www-data... attribue la propriété des fichiers et répertoires à www-data.

Il est temps maintenant d’activer le Virtual host <https://httpd.apache.org/docs/2.4/vhosts>`_, le mode fcgid si ce n’est pas déjà le cas et de redémarrer le service apache2.

a2enmod fcgid
a2ensite qgis.demo
systemctl restart apache2

Note

Si vous avez installé QGIS Server sans serveur X (inclus avec Linux Desktop) et si vous voulez aussi utiliser la commande GetPrint alors il faut installer un serveur X factice et dire à QGIS Server de l’utiliser. Pour ce faire, il faut entre les commandes suivantes:

Installer xvfb:

apt install xvfb

Créer le fichier de service:

sh -c \
"echo \
'[Unit]
Description=X Virtual Frame Buffer Service
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset

[Install]
WantedBy=multi-user.target' \
> /etc/systemd/system/xvfb.service"

Activer, démarrer et vérifier le statut de xvfb.service:

systemctl enable xvfb.service
systemctl start xvfb.service
systemctl status xvfb.service

Dans le fichier de configuration ci-dessus, il y a un FcgidInitialEnv DISPLAY ":99" qui indique aux instances du serveur QGIS d’utiliser le numéro d’affichage. 99 Si vous utilisez le serveur dans le bureau, il n’est pas nécessaire d’installer xvfb et vous devez simplement commenter avec # ce paramètre spécifique dans le fichier de configuration. Pour plus d’informations, consultez le site https://www.itopen.it/qgis-server-setup-notes/.

Maintenant qu’Apache sait qu’il doit répondre aux demandes adressées à http://qgis.demo, nous devons également configurer le système client de manière à ce qu’il sache qui est qgis.demo. Pour ce faire, nous ajoutons 127.0.0.1 qgis.demo dans le fichier hosts. Nous pouvons le faire avec sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts". Remplacez 127.0.0.1 par l’IP de votre serveur.

Note

Rappelez-vous que les fichiers myhost.conf et /etc/hosts doivent être configurés pour que notre installation fonctionne. Vous pouvez également tester l’accès à votre serveur QGIS à partir d’autres clients sur le réseau (par exemple des machines Windows ou MacOS) en allant dans leur fichier /etc/hosts et en faisant pointer le nom myhost vers l’adresse IP de la machine serveur sur le réseau. Vous pouvez être sûr que cette IP spécifique n’est pas 127.0.0.1 car c’est l’IP locale, uniquement accessible depuis la machine locale. Sur les machines *nix, le fichier hosts est situé dans le répertoire /etc, alors que sous Windows, il se trouve dans le répertoire C:\Windows\System32\drivers\etc. Sous Windows, vous devez démarrer votre éditeur de texte avec des privilèges d’administrateur avant d’ouvrir le fichier hosts.

Nous pouvons tester un des serveur QGIS installé avec une requête http depuis la ligne de commande curl http://qgis.demo/cgi-bin/qgis_mapserv.fcgi qui devrait afficher en sortie :

<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>

Note

curl peut être installé avec apt install curl

Apache est maintenant configuré.

De plus, depuis votre navigateur web, vous pouvez vérifier les capacités du serveur :

http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

11.1.4. moderate Follow Along: Créer un autre virtual host

Créons un autre virtual host Apache pointant sur QGIS Server. Vous pouvez choisir n’importe quel nom vous faisant plaisir (coco.bango, super.duper.training, example.com, etc.) mais pour faire simple nous allons choisir myhost.

  • Configurons le nom myhost pour qu’il pointe vers l’IP localhost en ajoutant 127.0.0.1 x au /etc/hosts avec la commande suivante : sh -c "echo '127.0.0.1 myhost' >> /etc/hosts" ou en éditant manuellement le fichier avec gedit /etc/hosts.

  • Nous pouvons vérifier que myhost pointe sur le localhost en exécutant dans le terminal la commande ping myhost qui devrait afficher :

qgis@qgis:~$ ping myhost
PING myhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.029 ms
  • Voyons si nous pouvons accéder à QGIS Server depuis le site myhost en exécutant : curl http://myhost/cgi-bin/qgis_mapserv.fcgi ou en accédant à l’URL depuis le navigateur de votre box Debian. Vous obtiendrez probablement :

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /cgi-bin/qgis_mapserv.fcgi was not found on this server.</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at myhost Port 80</address>
</body></html>
  • Apache ne sait pas qu’il est censé répondre à des requêtes pointant vers le serveur nommé myhost. Pour configurer l’hôte virtuel, le plus simple serait de créer un fichier monhôte.conf dans le répertoire /etc/apache2/sites-available qui aurait le même contenu que le fichier qgis.demo.conf sauf pour la ligne ServerName qui devrait être ServerName myhost. Vous pouvez également changer l’emplacement des logs, sinon les logs des deux hôtes virtuels seront partagés, mais ceci est optionnel.

  • Activons maintenant l’hôte virtuel avec a2ensite myhost.conf et rechargeons ensuite le service Apache avec service apache2 reload.

  • Si vous essayez de nouveau d’accéder à http://myhost/cgi-bin/qgis_mapserv.fcgi vous verrez que tout fonctionne maintenant !

11.1.5. In Conclusion

Vous avez appris comment installer les différents versions de QGIS Server depuis les paquets, comment configurer Apache avec QGIS Server, sur Debian basé sur Linux.

11.1.6. What’s Next?

Maintenant que vous avez installé QGIS server et qu’il est accessible via le protocole HTTP, nous devons apprendre à accéder à certains des services qu’il peut offrir. Le sujet de la prochaine leçon est d’apprendre comment accéder aux services WMS de QGIS Server.