Configuration avancée

Journal

To log requests sent to the server, you have to set the following environment variables:

  • QGIS_SERVER_LOG_LEVEL

  • QGIS_SERVER_LOG_FILE

  • QGIS_SERVER_LOG_STDERR

Take a look on Variables d’environnement to understand their meanings.

Variables d’environnement

You can configure some aspects of QGIS Server by setting environment variables.

According to the HTTP server and how you run QGIS Server, there are several ways to define these variables. This is fully described in Configuration d’un serveur HTTP.

QGIS_OPTIONS_PATH

Specifies the path to the directory with settings. It works the same way as QGIS application --optionspath option. It is looking for settings file in <QGIS_OPTIONS_PATH>/QGIS/QGIS3.ini.

QUERY_STRING

The query string, normally passed by the web server. This variable can be useful while testing QGIS server binary from the command line.

For example for testing a GetCapabilities request on the command line to a project that also requires a PostgreSQL connection defined in a pg_service.conf file:

PGSERVICEFILE=/etc/pg_service.conf QUERY_STRING="MAP=/path/to/test.qgs&SERVICE=WMS&REQUEST=GetCapabilities" /path/to/qgis_mapserv.fcgi

The result should be either the content of the GetCapabilities response or, if something is wrong, an error message.

QGIS_PROJECT_FILE

The .qgs or .qgz project file, normally passed as a parameter in the query string (with MAP), you can also set it as an environment variable (for example by using mod_rewrite Apache module).

Note that you may also indicate a project stored in PostgreSQL, e.g. postgresql://localhost:5432?sslmode=disable&dbname=mydb&schema=myschema&project=myproject.

QGIS_SERVER_LOG_FILE

Specify path and filename. Make sure that server has proper permissions for writing to file. File should be created automatically, just send some requests to server. If it’s not there, check permissions.

QGIS_SERVER_LOG_FILE is deprecated since QGIS 3.4. File logging support will be removed in QGIS 4.0.

QGIS_SERVER_LOG_STDERR

Activate logging to stderr. It’s disabled by default. This variable has no effect when QGIS_SERVER_LOG_FILE is set.

  • 0 or false (case insensitive)

  • 1 or true (case insensitive)

MAX_CACHE_LAYERS

Specify the maximum number of cached layers (default: 100).

DISPLAY

This is used to pass (fake) X server display number (needed on Unix-like systems).

QGIS_PLUGINPATH

Useful if you are using Python plugins for the server, this sets the folder that is searched for Python plugins.

QGIS_SERVER_LOG_LEVEL

Specify desired log level. Available values are:

  • 0 or INFO (log all requests)

  • 1 ou WARNING

  • 2 or CRITICAL (log just critical errors, suitable for production purposes)

QGIS_SERVER_PARALLEL_RENDERING

Activates parallel rendering for WMS GetMap requests. It’s disabled (false) by default. Available values are:

  • 0 or false (case insensitive)

  • 1 or true (case insensitive)

QGIS_SERVER_MAX_THREADS

Number of threads to use when parallel rendering is activated. Default value is -1 to use the number of processor cores.

QGIS_SERVER_CACHE_DIRECTORY

Specifies the network cache directory on the filesystem. The default directory is named cache and located in the profile directory.

QGIS_SERVER_CACHE_SIZE

Sets the network cache size in MB. The default value is 50 MB.

Settings summary

When QGIS Server is starting, you have a summary of all configurable parameters thanks to environment variables. Moreover, the value currently used and the origin is also displayed.

For example with spawn-fcgi:

export QGIS_OPTIONS_PATH=/home/user/.local/share/QGIS/QGIS3/profiles/default/
export QGIS_SERVER_LOG_FILE=/home/user/qserv.log
export QGIS_SERVER_LOG_LEVEL=2
spawn-fcgi -f /usr/lib/cgi-bin/qgis_mapserv.fcgi -s /tmp/qgisserver.sock -U www-data -G www-data -n

 QGIS Server Settings:

   - QGIS_OPTIONS_PATH / '' (Override the default path for user configuration): '/home/user/.local/share/QGIS/QGIS3/profiles/default/' (read from ENVIRONMENT_VARIABLE)

   - QGIS_SERVER_PARALLEL_RENDERING / '/qgis/parallel_rendering' (Activate/Deactivate parallel rendering for WMS getMap request): 'true' (read from INI_FILE)

   - QGIS_SERVER_MAX_THREADS / '/qgis/max_threads' (Number of threads to use when parallel rendering is activated): '4' (read from INI_FILE)

   - QGIS_SERVER_LOG_LEVEL / '' (Log level): '2' (read from ENVIRONMENT_VARIABLE)

   - QGIS_SERVER_LOG_FILE / '' (Log file): '/tmp/qserv.log' (read from ENVIRONMENT_VARIABLE)

   - QGIS_PROJECT_FILE / '' (QGIS project file): '' (read from DEFAULT_VALUE)

   - MAX_CACHE_LAYERS / '' (Specify the maximum number of cached layers): '100' (read from DEFAULT_VALUE)

   - QGIS_SERVER_CACHE_DIRECTORY / '/cache/directory' (Specify the cache directory): '/root/.local/share/QGIS/QGIS3/profiles/default/cache' (read from DEFAULT_VALUE)

   - QGIS_SERVER_CACHE_SIZE / '/cache/size' (Specify the cache size): '52428800' (read from INI_FILE)

 Ini file used to initialize settings: /home/user/.local/share/QGIS/QGIS3/profiles/default/QGIS/QGIS3.ini

In this particular case, we know that QGIS_SERVER_MAX_THREADS and QGIS_SERVER_PARALLEL_RENDERING values are read from the ini file found in QGIS_OPTIONS_PATH directory (which is defined through an environment variable). The corresponding entries in the ini file are /qgis/max_threads and /qgis/parallel_rendering and their values are true and 4 threads.

Nom court pour les couches, les groupes et le projet

Un certains nombre d’éléments disposent d’un <Name> dt d’un <Title>. Le nom est une chaîne de caractères utilisée dans la communication de machine à machine alors que le titre est utilisé pour les êtres humains.

Par exemple, un jeu de données peut avoir un titre descriptif Température Atmosphérique Maximum et être requêté par le nom abrégé ATMAX. L’utilisateur peut indiquer un titre pour les couches, les groupes et le projet.

Le nom OWS est basé sur le nom utilisé dans l’arbre des couches. Ce nom est plus une étiquette pour les être humains qu’un nom utilisé dans la communication de machine à machine.

QGIS Server gère :

  • Modification de la ligne de nom abrégé pour les propriétés des couches. Vous pouvez modifier cela en cliquant avec le bouton droit de la souris sur un calque, choisissez Propriétés ‣ Onglet Métadonnées ‣ Description ‣ Nom court

  • une boîte de dialogue WMS pour les groupes (permet de saisir le nom court du groupe, le titre et un résumé)

    En faisant un clic-droit sur un groupe de couches et en sélectionnant l’option Définir un groupe de données WMS, vous obtiendrez:

    ../../../../_images/set_group_wms_data.png

    Définir la boîte de dialogue des données associées au groupe WMS

  • l’édition de nom court dans les propriétés du projet et l’ajout d’un validateur d’expressions régulières "^[A-Za-z][A-Za-z0-9\._-]*" pour les éditions de noms courts (via une méthode statique)

  • l’ajout d’un validateur de fonction rationnelles "^[A-Za-z][A-Za-z0-9\._-]*" pour les éditions de noms courts (via une méthode statique)

    Vous pouvez choisir un nom court pour la racine du projet en allant à : Propriétés du projet ‣ Serveur OWS ‣ Fonctionnalités du service ‣ Nom court.

  • l’ajout d’un élément TreeName dans les propriétés du projet (fullProjectSettings)

Si un nom court a été utilisé pour des couches, des groupes ou pour le projet, il sera utilisé par QGIS Server pour définir le nom de la couche.

Connexion au fichier de service

Pour faire en sorte qu’Apache puisse accéder au fichier de service PostgreSQL (consultez la section ref:pg-service-file), vous devez modifier vos fichiers *.conf de la manière suivante:

SetEnv PGSERVICEFILE /home/web/.pg_service.conf

<Directory "/home/web/apps2/bin/">
  AllowOverride None
.....

Ajouter des polices à votre serveur Linux

Gardez à l’esprit que vous pouvez utiliser des projet QGIS qui utilisent des polices qui n’existent pas par défaut sur les autres machines. Cela signifie que si vous partagez le projet, il pourra apparaître de manière différente sur d’autres machines (si les polices n’existent pas sur la machine cible).

Pour s’assurer que cela n’arrive pas, vous devez simplement installer les polices manquantes sur la machine cible. En règle général, le faire sur des systèmes bureautiques est relativement simple (double-cliquer sur des polices).

Sous Linux, si vous n’avez pas d’environnement de bureau d’installé (ou que vous préferrez la ligne de commande), vous devrez:

  • Sur les systèmes basés sur Debian:

    sudo su
    mkdir -p /usr/local/share/fonts/truetype/myfonts && cd /usr/local/share/fonts/truetype/myfonts
    
    # copy the fonts from their location
    cp /fonts_location/* .
    
    chown root *
    cd .. && fc-cache -f -v
    
  • Pour les systèmes basés sur Fedora:

    sudo su
    mkdir /usr/share/fonts/myfonts && cd /usr/share/fonts/myfonts
    
    # copy the fonts from their location
    cp /fonts_location/* .
    
    chown root *
    cd .. && fc-cache -f -v