12.1. Lesson: QGIS Server installeren¶
Het doel voor deze les: Leren hoe QGIS Server te installeren op Debian Stretch. Met verwaarloosbare variaties kunt u dit ook volgen voor elke distributie die is gebaseerd op Debian, zoals Ubuntu en de afgeleiden daarvan.
Notitie
In Ubuntu kunt u uw gewone gebruiker gebruiken, sudo
vooraf laten gaan aan opdrachten die rechten van de admin vereisen. In Debian kunt u werken als admin (root
), zonder sudo
te gebruiken.
12.1.1.
Follow Along: Installeren vanuit pakketten¶
In deze les doen we alleen het installeren vanuit pakketten zoals hier is weergegeven.
QGIS Server installeren met:
apt install qgis-server
# if you want to install server plugins, also:
apt install python-qgis
QGIS Server in productie moeten worden gebruikt zonder geïnstalleerde QGIS Desktop (met de daarbij behorende X Server) op dezelfde machine.
12.1.2.
Follow Along: QGIS Server uitvoerbare bestand¶
Het voor QGIS Server uitvoerbare ebstand is qgis_mapserv.fcgi
. U kunt controleren waar het is geïnstalleerd door find / -name 'qgis_mapserv.fcgi'
uit te voeren wat iets uit zou moeten uitvoeren als /usr/lib/cgi-bin/qgis_mapserv.fcgi
.
Indien u, optioneel, op dit moment een test op de opdrachtregel wilt uitvoeren, kunt u de opdracht /usr/lib/cgi-bin/qgis_mapserv.fcgi
die iets uit zou moeten voeren als:
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>
Dat is goed, het vertelt u dat we op het juiste spoor zitten omdat de server zegt dat we niet hebben gevraagd naar een ondersteunde service. We zullen later zien hoe verzoeken voor WMS te maken.
12.1.3. Follow Along: HTTP serverconfiguratie¶
We moeten een HTTP-server gebruiken om toegang te krijgen tot de geïnstalleerde QGIS-server via een internetbrowser.
In deze les zullen we gaan gebruiken, de Apache HTTP server, gewoonlijk Apache genoemd.
We moeten eerst Apache installeren door de volgende opdracht in een terminal uit te voeren:
apt install apache2 libapache2-mod-fcgid
U kunt QGIS server uitvoeren op uw standaard website, of speciaal hiervoor een virtualhost configureren, als volgt.
Laten we in de map /etc/apache2/sites-available
een bestand maken, genaamd qgis.demo.conf
, met deze inhoud:
<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>
U kunt bovenstaande op een Linux desktopsysteem uitvoeren door de bovenstaande configuratie te plakken en op te slaan nadat u heeft gedaan nano /etc/apache2/sites-available/qgis.demo.conf
.
Notitie
Bekijk enkele van de opties voor configuratie die worden uitgelegd in het gedeelte voor de Server Gevorderde configuratie.
Laten we nu de mappen maken waarin de logboeken voor de QGIS Server en de database voor authenticatie zullen worden opgeslagen:
mkdir /var/log/qgis/
chown www-data:www-data /var/log/qgis
mkdir /home/qgis/qgisserverdb
chown www-data:www-data /home/qgis/qgisserverdb
Notitie
www-data
is de gebruiker van Apache op systemen die zijn gebaseerd op Debian en we dienen er voor te zorgen dat Apache toegang heeft tot deze locaties of bestanden. De opdrachten chown www-data...
wijzigen de eigenaar van de respectievelijke mappen en bestanden naar www-data
.
We kunnen nu de virtuele host inschakelen, schakel de module fcgid
in als dat nog niet is gebeurd en start de service apache2
opnieuw:
a2enmod fcgid
a2ensite qgis.demo
service apache2 restart
Notitie
Indien u QGIS Server installeerde zonder een X Server uit te voeren (opgenomen in Linux Desktop) en indien u ook de opdracht GetPrint
wilt gebruiken dan zou u een namaak- X Server moeten installeren en QGIS Server moeten vertellen om die te gebruiken. U kunt dat doen door de volgende opdrachten uit te voeren.
Installeren van xvfb:
apt install xvfb
Het servicebestand maken:
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"
Inschakelen, starten en de status controleren van de xvfb.service
:
systemctl enable xvfb.service
systemctl start xvfb.service
systemctl status xvfb.service
In het bovenstaande configuratiebestand staat een FcgidInitialEnv DISPLAY ":99"
dat vertelt instances van QGIS Server om weergavescherm nr. 99 te gebruiken. Indien u de Server uitvoert in Desktop is het niet noodzakelijk om xvfb te installeren en u zou deze specifieke instelling in het configuratiebestand eenvoudigweg kunnen laten voorafgaan door #
. Meer info op https://www.itopen.it/qgis-server-setup-notes/.
Nu Apache weet dat het antwoordverzoeken naar http://qgis.demo zou moeten beantwoorden, dienen we ook het cliëntsysteem in te stellen zodat het weet wie qgis.demo
. We doen dat door 127.0.0.1 qgis.demo
toe te voegen aan het bestand hosts. We kunnen dat doen met sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
. Vervang 127.0.0.1
door het IP van uw server.
Notitie
Onthoud dat de beide bestanden myhost.conf
en /etc/hosts
zouden moeten worden geconfigureerd om onze instellingen te laten werken. U kunt ook de toegang tot uw QGIS Server testen vanaf andere cliënten op het netwerk (bijv. machines van Windows of MacOS) door te gaan naar hun bestand /etc/hosts
en te verwijzen naar de naam myhost
naar het IP dat de servermachine op het netwerk heeft. U kunt er zeker van zijn dat dat specifieke IP niet 127.0.0.1
is omdat dat het lokale IP is, dat alleen toegankelijk is vanaf de lokale machine. Op *nix
-machines is het bestand hosts
geplaatst in /etc
, terwijl het op Windows staat in de map C:\Windows\System32\drivers\etc
. Onder Windows dient u uw tekstbewerker te starten met rechten als administrator voordat u het bestand hosts opent.
We kunnen een van de geïnstalleerde QGIS-servers testen met een HTTP-verzoek vanaf de opdrachtregel met curl http://qgis.demo/cgi-bin/qgis_mapserv.fcgi
wat terug zou moeten geven:
<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
Notitie
curl kan worden geïnstalleerd met apt install curl
.
Apache is nu geconfigureerd.
Vanuit uw webbrowser kunt u ook de capabilities van de server controleren:
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
12.1.4.
Follow Along: Een andere virtuele host maken¶
Laten we eens een andere Apache virtuele host maken die verwijst naar QGIS Server. U kunt elke naam kiezen die u wilt (coco.bango
, super.duper.training
, example.com
, etc.) maar omwille van de eenvoud gaan wij myhost
gebruiken.
Laten we de naam
myhost
instellen om te verwijzen naar het IP van de localhost IP door127.0.0.1 x
toe te voegen aan het bestand/etc/hosts
met de volgende opdracht:sh -c "echo '127.0.0.1 myhost' >> /etc/hosts"
of door handmatig te bewerken metgedit /etc/hosts
.We kunnen controleren of
myhost
verwijst naar de localhost door in de terminal de opdrachtping myhost
uit te voeren die terug zou moeten geven:
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
Laten we eens proberen of we toegang kunnen krijgen tot QGIS Server vanaf de site van
myhost
door uit te voeren:curl http://myhost/cgi-bin/qgis_mapserv.fcgi
of door toegang te krijgen tot de URL via de browser van uw Debianbox. U zult waarschijnlijk terugkrijgen:
<!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 weet niet dat het geacht wordt verzoeken te beantwoorden die verwijzen naar de server genaamd
myhost
. De meest eenvoudige manier om de virtuele host in te stellen zou zijn om een bestandmyhost.conf
te maken in de map/etc/apache2/sites-available
die dezelfde inhoud heeft als het bestandqgis.demo.conf
met uitzondering van de regelServerName
die zou moeten zijnServerName myhost
. U zou ook kunnen wijzigen waar de logboeken naartoe moeten worden gestuurd, omdat anders de logboeken voor de twee virtuele hosts zouden worden gedeeld maar dit is optioneel.Laten we nu de virtuele host inschakelen met
apt-get a2ensite myhost.conf
en dan de Apache-service opnieuw laden metservice apache2 reload
.Als u probeert toegang te krijgen tot de URL http://myhost/cgi-bin/qgis_mapserv.fcgi zult u merken dat nu alles werkt!
12.1.5. In Conclusion¶
U heeft geleerd verschillende versies van QGIS Server vanuit pakketten te installeren, hoe Apache te configureren met QGIS Server, op distributies voor Linux die zijn gebaseerd op Debian.
12.1.6. What’s Next?¶
Nu u QGIS Server hebt geïnstalleerd en het toegankelijk is via het protocol HTTP, moeten we leren hoe toegang te krijgen tot enkele services die het biedt. Het onderwerp van de volgende les is hoe te leren toegang te krijgen tot WMS-services van QGIS Server.