Installation QGIS Server 3.4 LTR
Lokale Testinstallation unter Windows (erfolgreich getestete Umgebungen: Windows Server 2008 R2, Windows Server 2016), ohne PHP, da der QGIS Server selbst das nicht benötigt.
Basiert auf dieser hervorragenden, englischsprachigen Anleitung: https://opengislab.com/blog/2018/7/7/updated-installing-apache-qgis-server-and-lizmap-on-windows-os [nur Part 1, Part 2, Part 4 2.-4. & Part 5 (verändert)]— Thomas 2019-03-20 08:21
Basiert auf dieser hervorragenden, englischsprachigen Anleitung: https://opengislab.com/blog/2018/7/7/updated-installing-apache-qgis-server-and-lizmap-on-windows-os [nur Part 1, Part 2, Part 4 2.-4. & Part 5 (verändert)]— Thomas 2019-03-20 08:21
verwendete Software:
- Apache 2.4.37 VC15 (2018-11-21) →
https://www.apachelounge.com/download/VC15/binaries/httpd-2.4.37-win64-VC15.zip
- mod_fcgid 2.3.9 (2017-04-25) →
https://www.apachelounge.com/download/VC15/modules/mod_fcgid-2.3.9-win64-VC15.zip
- C++ Redistributable Visual Studio 2017 [aka VC15], aktuellste Version (14.16.27027.1): vc_redist_x64 →
https://aka.ms/vs/15/release/VC_redist.x64.exe
- QGIS Server 3.4.5 LTR, installiert mittels OSGeo4W-Netzwerkinstallation (64 bit) →
http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe
Installation und Konfiguration des Apache Webservers
- Erstellen eines Installations- und Arbeitsverzeichnises auf der lokalen Festplatte der Servermaschine. Der Einfachheit halber nennen wir dieses Verzeichnis
webserver
, also z.B.C:\webserver
. - Herunterladen der Softwarepakete von
https://www.apachelounge.com/download/
, s.o.- Hinweis: das C++ Redistributable Visual Studio 2017 Paket ist notwendig, um den Apache HTTPD als Windows-Dienst laufen zu lassen.
Die richtige Version hängt vom installierten Binary ab: wenn Apache 2.4 VC15 installiert wird, braucht es das Microsoft Visual Studio C 2017 Redistributable!
- Installation des C++ Redistributable Visual Studio 2017 Paktes vc_redist_x64 — falls nicht schon anderweitig geschehen.
- Entpacken des
Apache24
-Ordners aus httpd-2.4.37-win64-VC15.zip, um diesen ins vorbereitete Webserver-Verzeichnis zu schieben (→ z.B.C:\webserver\Apache24
)- TIP: einfaches Update bzw. Upgrade von Apache 2.4 auf eine neuere Version, siehe https://www.apachelounge.com/viewtopic.php?t=5768 (eng.)
- Entpacken von mod_fcgid-2.3.9-win64-VC15.zip, kopieren der Datei
mod_fcgid.so
aus dem Verzeichnis mod_fcgid-2.3.9 in das\Apache24\modules
-Verzeichnis - Anpassung der Webserverkonfiguration in der Datei
\Apache24\conf\httpd.conf
(hier:C:\webserver\Apache24\conf\httpd.conf
). Öffnen der Datei in einem fähigen Texteditor (ich verwende z.B. notepad++) und folgende Änderungen vornehmen:SRVROOT
: Ersetzen vonc:/Apache24
durchc:/webserver/Apache24
überall wo es vorkommt — bzw. entsprechend der getroffenen VoreinstellungenServerName
weiter unten sollte in unserem BeispielServerName localhost:80
, sofern der Standardport 80 verwendet wird/werden soll, ansonsten eben eine andere Portnummer (z.B. 90)- die
ServerName
-Zeile aktivieren („uncomment“), indem das vorstehende#
-(Kommentar-)Zeichen entfernt wird www.example.com:80
durchlocalhost:80
ersetzen- gegebenenfalls die Portnummer auch in der Zeile anpassen, in der
Listen 80
steht. Es ist ein Port zu verwenden, der auf dieser Maschine nicht schon von einem anderen Dienst/service verwendet wird! - Speichern der Änderungen, die Konfigurationsdatei kann im Texteditor geöffnet beliben.
- Überprüfen, ob der Apache startet. Um schnell zu sehen, ob Einstellungen funktionieren und der Apache Webserver korrekt startet, kann man
httpd.exe
ausführen. Entweder verwendet man die Windows Konsole (CMD) dafür, oder man wechselt in das entsprechende Verzeichnis und führthttpd.exe
„als Adminsitrator“ aus.- wechseln ins
\Apache24\bin
-Verzeichnis, Rechtsklick aufhttpd.exe
→ „Als Adminsitrator ausführen“ - es erscheint ein schwarzes Konsolenfenster, dieses geöffnet halten, wenn es geschlossen wird, wird der Apache gestoppt/beendet
- wenn man nun in einen Webbrowser
http://localhost
bzw. http://localhost:port eingibt, sollte eine Webseite ercheinen, auf der „It Works!“ steht, was bedeutet, das der Apache korrekt installiert ist. - Um den Apache zu stoppen, schließt man das Konsolenfenster (s.o.)
- Apache als Windows-Dienst laufen lassen, statt als Konsolenanwendung. Dies ist zu bevorzugen, da der Apache so alle Operationen sauber beendet. Weitere Infos unter https://httpd.apache.org/docs/2.4/platform/windows.html#winsvc.
- optional: Hinzufügen des Apache zur Windows Systempfad-Variable, um auf diese Weise den Apache direkt durch Eingabe von httpd.exe ohne den vollen Verzeichnispfad erreichen zu können.
- starten des Apache als Windows-Dienst:
- Kommandozeile (CMD) als Administrator öffnen/starten
- Apache als Dienst installieren durch Eingabe von
httpd.exe -k install
- Im Windows Dienste Manager sollte nun der Apache HTTPD Server aufgeführt sein
- diesen Dienst auswählen und starten
- darauf hin sollte im Webbrowser auf
http://localhost
bzw. http://localhost:port wieder „It Works!“ gezeigt werden - stoppen des Apache Dienste vorerst, um weitere Konfigurationen vorzunehmen (das Fenster des Dienste Managers kann noch offen bleiben)
- Wenn man den Dienst lieber mitels CMD starten, stoppen oder neu starten möchte, verwendet man
httpd.exe -k restart
bzw.httpd.exe -k shutdown
- Bearbeiten der Apache Konfiguration (
httpd.conf
) um benötigte Module einzuschalten (→C:\webserverApache24\conf\httpd.conf
)- Entfernen des
#
-Zeichens am Zeilenanfang, um die benötigten Module zu aktivieren
Hinweis: sollte ein Modul noch in der Datei fehlen, kann es einfach dazu geschrieben werden. In unserem Fall ist dies wahrscheinlich notwendig für das Modulmod_fcgid.so
(s.u.)LoadModule actions_module modules/mod_actions.so LoadModule deflate_module modules/mod_deflate.so LoadModule expires_module modules/mod_expires.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule fcgid_module modules/mod_fcgid.so LoadModule headers_module modules/mod_headers.so LoadModule ident_module modules/mod_ident.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule ssl_module modules/mod_ssl.so LoadModule fcgid_module modules/mod_fcgid.so
Hinweis: Wenn ein anderer als der Standardport 80 verwendet wird, müssen auch noch folgende Module aktiviert werden:
LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so LoadModule proxy_http_module modules/mod_proxy_http.so
- Hinzufügen des folgenden Codes an das Ende der httpd-Konfigurationsdatei:
<IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\\.0[678] no-gzip BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Reuqest_URI \\.(?:gif|jpe?g|png|rar|zip)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary </IfModule>
- Speichern der Änderungen an der Konfigurationsdatei und neu starten des Apache Dienstes. Prüfen, ob der Webserver immer noch unter localhost (bzw. localhost:port) erreichbar ist. — Wenn man das nach jedem Satz von Änderungen überprüft, ist es einfacher eventuell auftretende Fehler nachzuvollziehen.
Installation und Konfiguration des QGIS Server
Ich bevorzuge die Installation mittels OSGeo4W-Netzwerkinstallation, die nach dem Download im Modus „Fortgeschrittene Installation“ eine übersichtliche Auswahl aller zur Verfügung stehenden Pakete bietet.
Für dieses Beispiel wird QGIS 3.4.5 LTR verwendet (der erste LTR aus dem OSGeo4W-LTR-Repository).
- starten des OSGeo4W-Installers als Administrator, Auswahl der „Fortgeschrittenen Installation“
- „Aus dem Internet installieren“
- (standard) Wurzelverteichnis
C:\OSGeo4W64
beibehalten - folgende Pakete auswählen:
- Kategorie Web:
qgis-ltr-server
QGIS Server (long term release) → aktuelle Version: 3.4.5-1
- „Pakete installieren, um die [angezeigten, nicht erfüllten] Abhängikeiten zu erfüllen (EMPFOHLEN)“
- ggf. Lizenzvereinbarungen bestätigen
- In der Apache Konfigurationsdatei
C:\webserver\Apache24\conf\httpd.conf
die ZeileInclude conf/extra/httpd-vhosts.conf
un-kommentieren, also das führende #-Zeichen entfernen.- Konfigurationsdatei speichern.
- Die
httpd-vhosts.conf
-Datei öffnen und editieren (→C:\webserver\Apache\Conf\extra\httpd-vhosts.conf
)- die zwei Beispiele in der Datei löschen und statt dessen den folgenden Code einfügen, um den QGIS Server als Fast-CGI erreichbar zu machen.
Hinweis: Nicht vergessen den Port anzupassen, falls etwas anderes verwendet wird als der Standard 80!<VirtualHost *:80> ServerName localhost:80 # qgs-Deployment DocumentRoot "C:/webserver/qgis_ows/qgs/" <Directory "C:/webserver/qgis_ows/qgs/"> Options -Indexes +FollowSymLinks +ExecCGI AllowOverride All Require all granted </Directory> Alias /qgis/ "C:/OSGeo4W64/apps/qgis-ltr/bin/" <Directory "C:/OSGeo4W64/apps/qgis-ltr/bin/"> SetHandler fcgid-script Options +ExecCGI AllowOverride All Require all granted </Directory> # FIXME wofür? Alias /document/ "C:/webserver/qgis_ows/document/" <Directory "C:/webserver/qgis_ows/document"> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> # Apache logs (different than QGIS Server log) CustomLog "logs/qgis-access.log" combined ErrorLog "logs/qgis-error.log" </VirtualHost>
- abschließend speichern.
- in die
VirtualHost
-Konfiguration inhttpd-vhosts.conf
noch folgende Variablen einfügen und zwar oben zwischen<VirtualHost *:80>
undServerName localhost:80
FcgidInitialEnv PATH "C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\qgis-ltr\bin;C:\OSGeo4W64\apps\Qt5\bin;C:\OSGeo4W64\apps\grass\grass-6.4.3\lib;C:\OSGeo4W64\apps\grass\grass-6.4.3\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\WBem" FcgidInitialEnv QT_PLUGIN_PATH "C:\OSGeo4W64\apps\qgis-ltr\qtplugins;C:\OSGeo4W64\apps\Qt5\plugins" FcgidInitialEnv PYTHONHOME "C:\OSGeo4W64\apps\Python37" FcgidInitialEnv PYTHONPATH "C:\OSGeo4W64\apps\qgis-ltr\.\python;C:\OSGeo4W64\apps\qgis-ltr\.\python\plugins;C:\OSGeo4W64\apps\Python37\DLLs;C:\OSGeo4W64\apps\Python37\lib;C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\Python37;C:\OSGeo4W64\apps\Python37\lib\site-packages" FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0 FcgidInitialEnv QGIS_SERVER_LOG_FILE "C:\\webserver\\Apache24\\logs\\qgis_server.log" FcgidIOTimeout 120 FcgidInitialEnv LC_ALL "en_US.UTF-8" FcgidInitialEnv PYTHONIOENCODING UTF-8 FcgidInitialEnv LANG "en_US.UTF-8" FcgidInitialEnv QGIS_DEBUG 1 FcgidInitialEnv QGIS_PLUGINPATH "C:\OSGeo4W64\apps\qgis-ltr\python\plugins" SetEnvIf Request_URI ^/qgis QGIS_PREFIX_PATH "C:\OSGeo4W64\apps\qgis-ltr" SetEnvIf Request_URI ^/qgis TEMP "C:\Windows\Temp" SetEnvIf Request_URI ^/qgis GDAL_DATA "C:\OSGeo4W64\share\gdal" SetEnvIf Request_URI ^/qgis GDAL_DRIVER_PATH "C:\OSGeo4W64\bin" SetEnvIf Request_URI ^/qgis PDAL_DRIVER_PATH "C:\OSGeo4W64\bin" SetEnvIf Request_URI ^/qgis GDAL_SKIP "JP2ECW" SetEnvIf Request_URI ^/qgis PROJ_LIB "C:\OSGeo4W64\share\proj"
httpd-vhosts.conf
speichern- Apache Dienst neu starten
- im Webbrowser prüfen, ob der QGIS Server errichbar ist: die URL-Eingabe
http://localhost/qgis/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
sollte den Inhalt der mitgelieferten Dateiwms_metadata.xml
zeigen. Das bedeutet dann, dass QGIS Server richtig installiert worden ist und als fcgi angesprochen wird.
Wenn die Anzeige im Browser so oder so ähnlich aussieht, hat die Installation geklappt. (Die Hauptsache ist, dass ein beschreibender Text über den WMS erscheint und keine Fehlermeldung.)
OWS mit QGIS Server
- Um OpenGIS Web Services (OWS: WMS, WFS, etc.) über den QGIS Server bereit zu stellen, sind nach der obigen Anleitung QGIS-Projketdateien (
.qgs
) in das SerververzeichnisC:/webserver/qgis_ows/qgs/
abzulegen.- Die in diesen Projektdateien enthalten Layer werden entsprechend der notwendigen Diensteigenschaften, die in den QGIS Projekteigenschaften unter QGIS Server definiert werden1), veröffentlicht.
- Ein Dienstaufruf — z.B. über die Datenquellverwaltung (Data Source Manager)2) in QGIS Desktop — erfolgt dann über eine URL wie
http://localhost/qgis/qgis_mapserv.fcgi.exe?MAP=C:/webserver/qgis_ows/qgs/test_wms.qgs
QGIS Web Client 2 (QWC2)
QGIS Web Client 2 (QWC2) ist ein modularer, responsiver Web Client für QGIS Server, basierend auf dem ReactJS Framework und OpenLayers.
QWC2 ist eine Javascript Applikation, die in produktiven Umgebungen in kompilierter und optimierter Form als „Applikationsbundle“ installiert wird.
QWC2 ist eine Javascript Applikation, die in produktiven Umgebungen in kompilierter und optimierter Form als „Applikationsbundle“ installiert wird.