Beginnen

Installatie op op Debian gebaseerde systemen

Op dit punt zullen we een korte en eenvoudige How-to geven voor een minimaal werkende configuratie op op Debian gebaseerde systemen. Echter, ook vele andere distributies en besturingssystemen verschaffen pakketten voor QGIS Server.

Vereisten en stappen om QGIS Server te installeren op een op Debian gebaseerd systeem worden gegeven op de pagina voor installatieprogramma’s voor QGIS. Bekijk dat gedeelte.

Configureren van de HTTP-server

Apache

Apache en zijn module mod_fcgid kunnen worden gebruikt voor het uitvoeren van QGIS Server.

Installeren van Apache en mod_fcgid:

sudo apt install apache2 libapache2-mod-fcgid

We gaan er hier van uit dat een Apache VirtualHost al is ingesteld. Dit is bijvoorbeeld hoe een basisiconfiguratie van VirtualHost eruit kan zien:

<VirtualHost *:80>

 ServerAdmin [email protected]
 DocumentRoot /var/www/html

 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Notitie

Op systemen van Debian is een standaard VirtualHost beschikbaar in /etc/apache2/sites-available/000-default.conf.

Laten we nu richtlijnen voor de configuratie van mod_fcgid voor QGIS Server toevoegen:

<VirtualHost *:80>

 ServerAdmin [email protected]
 DocumentRoot /var/www/html

 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined

 FcgidInitialEnv DISPLAY ":99"
 FcgidInitialEnv QGIS_SERVER_LOG_LEVEL "0"
 FcgidInitialEnv QGIS_SERVER_LOG_STDERR "1"

 <Location /qgisserver>
  SetHandler fcgid-script
  FcgidWrapper /usr/lib/cgi-bin/qgis_mapserv.fcgi virtual
  Options +ExecCGI -MultiViews +FollowSymLinks
  Require all granted
 </Location>

</VirtualHost>

Bekijk de documentatie voor mod_fcgid voor meer informatie over de gebruikte parameters Fcgid. En bekijk onderstaande om te begrijpen wanneer en waarom de omgevingsvariabele DISPLAY moet zijn ingesteld.

Herstart Apache nu opnieuw om er voor te zorgen dat de nieuwe configuratie daadwerkelijk wordt doorgevoerd:

sudo service apache2 restart

QGIS Server is nu beschikbaar op http://localhost/qgisserver.

NGINX

U kunt QGIS Server ook gebruiken met NGINX. Anders dan bij Apache voert NGINX niet automatisch FastCGI-processen uit. De processen van FastCGI moeten door iets anders worden gestart.

Op op Debian gebaseerde systemen kunt u fcgiwrap of spawn-fcgi gebruiken om de processen van QGIS Server te starten of te beheren. Officiële pakketten van Debian bestaan voor beide.

Notitie

fcgiwrap is gemakkelijker in te stellen dan spawn-fcgi, omdat het al is verpakt in een service Systemd. Maar het leidt ook tot een oplossing die veel trager is dan het gebruiken van spawn-fcgi. Met fcgiwrap wordt een nieuw proces voor QGIS Server gemaakt voor elk verzoek, wat betekent dat het proces voor initialisatie van QGIS Server, wat tevens omvat het lezen en parsen van het projectbestand van QGIS, voor elk verzoek wordt uitgevoerd. Met spawn-fcgi blijft het proces van QGIS Server levend tussen verzoeken in, resultierend in een veel betre uitvoering. Om die reden wordt spawn-fcgi aanbevolen voor gebruik voor productie.

NGINX installeren:

sudo apt install nginx
fcgiwrap

Als u fcgiwrap wilt gebruiken om QGIS Server uit te voeren, moet u eerst het corresponderende pakket installeren:

sudo apt install fcgiwrap

Plaats vervolgens het volgende blok in uw configuratie voor uw NGINX-server:

1
2
3
4
5
6
  location /qgisserver {
      gzip           off;
      include        fastcgi_params;
      fastcgi_pass   unix:/var/run/fcgiwrap.socket;
      fastcgi_param  SCRIPT_FILENAME /usr/lib/cgi-bin/qgis_mapserv.fcgi;
  }

Herstart tenslotte NGINX en fcgiwrap om de nieuwe configuratie door te voeren:

sudo service nginx restart
sudo service fcgiwrap restart

QGIS Server is nu beschikbaar op http://localhost/qgisserver.

spawn-fcgi

Als het uw voorkeur heeft spawn-fcgi te gebruiken in plaats van fcgiwrap, is de eerste stap om het pakket te installeren:

sudo apt install spawn-fcgi

Plaats vervolgens het volgende blok in uw configuratie voor uw NGINX-server:

location /qgisserver {
    gzip           off;
    include        fastcgi_params;
    fastcgi_pass   unix:/var/run/qgisserver.socket;
}

En herstart NGINX om de nieuwe configuratie door te voeren:

sudo service nginx restart

Tenslotte, omdat er geen standaard servicebestand is voor spawn-fcgi, dient u QGIS Server handmatig te starten in uw terminal:

sudo spawn-fcgi -s /var/run/qgisserver.socket \
                -U www-data -G www-data -n \
                /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi

Natuurlijk kunt u zelf een init script schrijven (zoals een qgisserver.service-bestand voor Systemd) om QGIS Server te starten bij opstarten of wanneer u maar wilt.

QGIS Server is nu beschikbaar op http://localhost/qgisserver.

Notitie

Met de bovenstaande opdracht voert spawn-fcgi slechts één proces voor QGIS Server uit. U kunt spawn-fcgi combineren met het gereedschap multiwatch, dat ook is verpakt in Debian, om meer dan één proces voor QGIS Server te gebruiken.

Configuratie

De include fastcgi_params;, gebruikt in eerdere configuratie, is belangrijk omdat het de parameters toevoegt vanuit /etc/nginx/fastcgi_params:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Natuurlijk kunt u deze variabelen in uw eigen configuratie overschrijven. Bijvoorbeeld:

include fastcgi_params;
fastcgi_param SERVER_NAME domain.name.eu;

Meer nog, u kunt enkele Omgevingsvariabelen gebruiken om QGIS Server te configureren. Met NGINX als HTTP-server moet u fastcgi_param gebruiken om deze variabelen, zoals hieronder weergegeven, te definiëren:

fastcgi_param  QGIS_DEBUG              1;
fastcgi_param  QGIS_SERVER_LOG_FILE    /tmp/qgis-000.log;
fastcgi_param  QGIS_SERVER_LOG_LEVEL   0;

Notitie

Bij het gebruiken van spawn-fcgi, kunt u direct omgevingsvariabelen configureren vóór het uitvoeren van de server. Bijvoorbeeld: export QGIS_SERVER_LOG_FILE=/home/user/qgis.log

Xvfb

QGIS Server heeft een werkende X Server nodig om volledig bruikbaar te zijn. Maar als u er geen hebt, kunt u xvfb gebruiken om een virtuele X-omgeving te maken.

Het pakket installeren:

sudo apt install xvfb

Dan, overeenkomstig uw HTTP-server, zou u de parameter DISPLAY moeten configureren of direct xvfb-run moeten gebruiken.

Bijvoorbeeld met NGINX en spawn-fcgi met xvfb-run:

xvfb-run /usr/bin/spawn-fcgi -f /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi \
                             -s /tmp/qgisserver.socket \
                             -G www-data -U www-data -n

De andere optie is om een virtuele omgeving voor X-server te starten met een specifiek getal voor de weergave, met dan aan Xvfb:

/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset

Dan hoeven we slechts de omgevingsvariabele DISPLAY in te stellen in de configuratie van de HTTP-server. Bijvoorbeeld met NGINX:

fastcgi_param  DISPLAY       ":99";

Of met Apache:

FcgidInitialEnv DISPLAY       ":99"

Installeren onder Windows

QGIS Server kan ook worden geïnstalleerd op systemen van Windows. Hoewel het pakket van QGIS Server beschikbaar is in de 64 bit-versie van het OSGeo4W netwerkinstallatieprogramma (https://qgis.org/nl/site/forusers/download.html) is er nog geen pakket voor Apache (of andere webserver) beschikbaar, die moeten dus op een andere manier geïnstalleerd worden.

Een eenvoudige procedure is de volgende:

../../../../_images/qgis_server_windows1.png
  • Download het installatieprogramma van OSGeo4W, volg de “Advanced Install” en installeer zowel de pakketten QGIS Desktop als QGIS Server

../../../../_images/qgis_server_windows2.png
  • Bewerk het bestand httpd.conf (C:\xampp\apache\httpd.conf als de standaard paden voor installeren zijn gebruikt) en maak de volgende wijzigingen:

Van:

ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"

Naar:

ScriptAlias /cgi-bin/ "c:/OSGeo4W64/apps/qgis/bin/"

Van:

<Directory "C:/xampp/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>

Naar:

<Directory "c:/OSGeo4W64/apps/qgis/bin">
SetHandler cgi-script
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
Require all granted
</Directory>

Van:

AddHandler cgi-script .cgi .pl .asp

Naar:

AddHandler cgi-script .cgi .pl .asp .exe

Voeg tenslotte aan het einde van httpd.conf toe:

SetEnv GDAL_DATA "C:\OSGeo4W64\share\gdal"
SetEnv QGIS_AUTH_DB_DIR_PATH "C:\OSGeo4W64\apps\qgis\resources"
SetEnv PYTHONHOME "C:\OSGeo4W64\apps\Python36"
SetEnv PATH "C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\qgis\bin;C:\OSGeo4W64\apps\Qt5\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem"
SetEnv QGIS_PREFIX_PATH "C:\OSGeo4W64\apps\qgis"
SetEnv QT_PLUGIN_PATH "C:\OSGeo4W64\apps\qgis\qtplugins;C:\OSGeo4W64\apps\Qt5\plugins"

Herstart de Apache webserver vanuit het XAMPP Control Panel en open een venster van de browser om een verzoek GetCapabilities te testen met QGIS Server

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

Een project op de server gebruiken

Nu QGIS Server is geïnstalleerd en werkt, hoeven we het aleen nog maar te gebruiken.

Uiteraard hebben we een project van QGIS nodig om mee te werken. Natuurlijk kunt u uw project volledig aanpassen door contactinformatie te definiëren, enkele beperkingen voor CRS bepalen of zelfs enkele lagen uitsluiten. Alles wat u daarover dient te weten wordt later beschreven in Uw project configureren.

Maar voor nu gaan we een eenvoudig project gebruiken dat als is geconfigureerd. Het project ophalen:

cd /home/user/
wget https://github.com/qgis/QGIS-Training-Data/archive/QGIS-Training-Data-v2.0.zip -O qgis-server-tutorial.zip
unzip qgis-server-tutorial.zip
mv QGIS-Training-Data-QGIS-Training-Data-v2.0/training_manual_data/qgis-server-tutorial-data ~

Het projectbestand is qgis-server-tutorial-data-master/world.qgs. Natuurlijk kunt u uw favoriete software voor GIS gebruiken om dit bestand te openen en kijken naar de configuratie en beschikbare lagen.

Bij het openen van het project en door snel even te kijken naar de lagen, weten we dat momenteel 4 lagen beschikbaar zijn:

  • airports

  • places

  • countries

  • countries_shapeburst

U hoeft nu niet het volledige verzoek te begrijpen. maar u zou een kaart met enkele van de eerdere lagen op kunnen halen dankzij QGIS Server door iets zoals dit te doen in uw webbrowser om de laag countries op te halen:

http://localhost/qgisserver?
  MAP=/home/user/qgis-server-tutorial-data-master/world.qgs&
  LAYERS=countries&
  SERVICE=WMS&
  REQUEST=GetMap&
  CRS=EPSG:4326&
  WIDTH=400&
  HEIGHT=200

Als u de volgende afbeelding ziet dan wordt QGIS Server correct uitgevoerd:

../../../../_images/server_basic_getmap.png

Antwoord van Server na een eenvoudig verzoek GetMap

Onthoud dat u de omgevingsvariabele PROJECT_FILE kunt definiëren om een standaard project te gebruiken in plaats van een parameter MAP op te geven (bekijk Omgevingsvariabelen).

Bijvoorbeeld met spawn-fcgi:

export PROJECT_FILE=/home/user/qgis-server-tutorial-data-master/world.qgs
spawn-fcgi -f /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi \
           -s /var/run/qgisserver.socket \
           -U www-data -G www-data -n

Uw project configureren

U moet een projectbestand van QGIS met enige gegevens maken of een van uw huidige projecten gebruiken om een nieuw QGIS Server WMS, WFS of WCS te verschaffen. Definieer de kleuren en stijlen van de lagen in QGIS en het CRS voor het project, als die nog niet gedefinieerd zijn.

../../../../_images/ows_server_definition.png

Definities voor een project QGIS Server WMS/WFS/WCS

Ga dan naar het menu QGIS Server van het dialoogvenster Project ‣ Eigenschappen… en geef enige informatie over de OWS in de velden onder Service-mogelijkheden. Dit zal verschijnen in het antwoord GetCapabilities van de WMS, WFS of WCS. Als u checkbox Service-mogelijkheden niet selecteert zal QGIS Server de informatie gebruiken die is opgegeven in het bestand wms_metadata.xml dat is opgeslagen in de map cgi-bin.

WMS-mogelijkheden

In het gedeelte WMS-mogelijkheden kunt u het bereik definiëren dat zal worden opgenomen in het antwoord van de WMS GetCapabilities door de minimum en maximum waarden voor X en Y in de velden onder Opgegeven bereik in te voeren. Klikken op Huidige bereik van kaartvenster gebruiken stelt deze waarden in op het bereik dat momenteel wordt weergegeven in het kaartvenster van QGIS. Door checkbox CRS-beperkingen te selecteren kunt u beperken in welke coördinaten referentiesystemen (CRS) QGIS Server zal aanbieden de kaarten te renderen. Aanbevolen wordt om u te beperken tot het aangeboden CRS omdat dat de grootte van het antwoord van WMS GetCapabilities reduceert. Gebruik de knop signPlus onderin om het CRS te selecteren uit de selectie voor Coördinaten ReferentieSysteem, of klik op Huidige gebruikte om het in het project van QGIS gebruikte CRS aan de lijst toe te voegen.

Als u afdruklay-outs hebt gedefinieerd in uw project, zullen zij worden vermeld in het antwoord GetProjectSettings en zij kunnen worden gebruikt in het verzoek GetPrint om afdrukken te maken, met een van de lay-outs voor afdruklay-out als een sjabloon. Dit is een QGIS-specifieke uitbreiding aan de specificatie voor WMS 1.3.0. Indien u niet wilt dat een afdruklay-out wordt gepubliceerd door de WMS, selecteer dan checkbox Exclusief lay-outs en klik op de knop signPlus onderin. Selecteer dan een afdruklay-out vanuit het dialoogvenster Lay-out selecteren om die toe te voegen aan de lijst met uitgesloten lay-outs.

Indien u niet wilt dat een laag of groep lagen wordt gepubliceerd door de WMS, selecteer dan checkbox Kaartlagen uitsluiten en klik op de knop signPlus onderin. Dit opent het dialoogvenster Selecteer lagen en groepen met restricties dat u in staat stelt de lagen en groepen te kiezen die u niet wilt publiceren. Gebruik de toetsen Shift of Ctrl als u meerdere items in één keer wilt selecteren. Aanbevolen wordt dat u het publiceren van lagen die u niet gebruikt uitsluit omdat dat de grootte van het antwoord WMS GetCapabilities reduceert, wat leidt tot snellere laadtijden aan de zijde van de cliënt.

U kunt de door u verzochte GetFeatureInfo als platte tekst, XML en GML ontvangen. XML is standaard, de indelingen tekst of GML zijn afhankelijk van de indeling die wordt gekozen in het verzoek GetFeatureInfo.

Als u wilt kunt u checkbox Geometrie aan feature response toevoegen selecteren. Dit zal de geometrieën van de objecten in tekstindeling opnemen in het antwoord GetFeatureInfo.

Omdat veel webclients geen cirkelvormige bogen in geometrieën kunnen weergeven heeft u de optie om de geometrie op te delen in segmenten vóórdat het naar de cliënt wordt verzonden in een antwoord GetFeatureInfo. Dit maakt het voor dergelijke clients mogelijk om nog steeds de geometrie van een object weer te geven (bijv. voor het accentueren van het object). U dient checkbox Informatie over segmenten van het object geometrie te selecteren om de optie te activeren.

U kunt ook de optie GetFeatureInfo precisie voor geometrie (decimale plaatsen) gebruiken om de precisie in te stellen voor de geometrie voor GetFeatureInfo. Dit stelt u in staat bandbreedte te besparen indien u niet de volledige precisie nodig hebt.

Als u wilt dat QGIS Server specifieke URL’s voor verzoeken vermeldt in het antwoord van WMS GetCapabilities, voer dan de overeenkomende URL in in het veld Gegeven URL.

Verder kunt u de maximale grootte van de door het verzoek GetMap teruggegeven kaarten beperken door de maximale breedte en hoogte in te voeren in de respectievelijke velden onder Maxima voor GetMap-verzoek.

Als één van uw lagen de weergave Map Tip display (d.i. om tekst met behulp van expressies weer te geven) zal dit worden vermeld binnen de uitvoer van GetFeatureInfo. Als de laag een Value Map gebruikt voor één van zijn attributen, wordt die informatie ook weergegeven in de uitvoer van GetFeatureInfo.

WFS-mogelijkheden

In het gebied WFS-mogelijkheden kunt u de lagen selecteren die u wilt publiceren als WFS, en specificeren of zij de bewerkingen Bijwerken, Toevoegen en Verwijderen zullen toestaan. Als u een URL invoert in het veld Opgegeven URL van het gedeelte WFS-mogelijkheden, zal QGIS Server deze specifieke URL opnemen in het antwoord WFS GetCapabilities.

WCS-mogelijkheden

In het gebied WCS-mogelijkheden kunt u de lagen selecteren die u wilt publiceren als WCS. Als u een URL invoert in het veld Opgegeven URL van het gedeelte WCS-mogelijkheden, zal QGIS Server deze specifieke URL opnemen in het antwoord van WCS GetCapabilities.

Fijn afstemmen van uw OWS

Voor vectorlagen geeft het menu Velden van het dialoogvenster Laag ‣ Eigenschappen u de mogelijkheid om voor elk attribuut te definiëren of het mag worden gepubliceerd of niet. Standaard worden alle attributen gepubliceerd door uw WMS en WFS. Als u een specifiek attribuut niet wilt publiceren, deselecteer dan het overeenkomende keuzevak in de kolom WMS of WFS.

U kunt watermerken over uw door WMS geproduceerde kaarten leggen door tekst-annotaties of SVG-annotaties toe te voegen aan het projectbestand. Bekijk het gedeelte Gereedschappen voor annotatie voor instructies over het maken van annotaties. Het keuzevak Vaste positie op kaart in het dialoogvenster Annotatie tekst moet worden gedeselecteerd om annotaties als watermerken te laten weergeven op de uitvoer van WMS. Toegang hiertoe kan worden verkregen door te dubbelklikken op een annotatie als een van de gereedschappen voor annotaties actief is. Voor SVG-annotaties dient u ofwel het project in te stellen om absolute paden op te slaan (in het menu Algemeen van het dialoogvenster Project ‣ Eigenschappen…) of door het pad voor de SVG-afbeelding handmatig zo aan te passen dat het een geldig relatief pad weergeeft.