Installation

Dieser Guide behandelt die Installation der GBD WebSuite, nicht des unterliegenden Betriebssystems oder Docker.

Container Config

docker-compose.yml

Dies ist ein möglichst umfangreiches Beispiel für eine docker-compose.yml. Es werden in den meisten Fällen keineswegs alle hier demonstrierten Einstellungsmöglichkeiten benötigt. Die einzelnen Optionen werden im Verlauf dieses Abschnitts näher erläutert. Auskommtierte Zeilen sind initiell optional.

docker-compose.yml

version: '3'

services:
    gws:
        image: gbdconsult/gws-amd64:8.0
        container_name: gws
#       restart: unless-stopped
#       logging:
#           driver: syslog
#           options:
#               tag: GWS_APP
        ports:
            - "80:80"
#           - "443:443"
        volumes:
            - /var/gws/data:/data:ro
            - /var/gws-var:/gws-var
#           - /var/raster:/data/raster:ro
#           - /etc/letsencrypt/live/webgis.example.com:/data/ssl:ro
        tmpfs:
            - /tmp
        environment:
#           - MANIFEST=/data/MANIFEST.json
#           - GWS_CONFIG=/data/config.cx
#           - PGSERVICEFILE=/data/pg_service.conf
#           - GWS_LOG_LEVEL=INFO
#           - HTTP_PROXY=http://proxy.example.com:8080
#           - HTTPS_PROXY=http://proxy.example.com:8080
#           - NO_PROXY=localhost
#       extra_hosts:
#           - "host.docker.internal:host-gateway"
#       depends_on:
#           - qgis

    qgis:
        image: gbdconsult/qgis-amd64:8.0
        container_name: qgis
#       restart: unless-stopped
#       logging:
#           driver: syslog
#           options:
#               tag: GWS_QGIS
        volumes:
            - /var/gws/data:/data:ro
            - /var/gws-var:/gws-var
#           - /var/raster:/data/raster:ro
        tmpfs:
            - /tmp
        environment:
#           - PGSERVICEFILE=/data/pg_service.conf
#           - QGIS_SERVER_PROJECT_CACHE_STRATEGY=periodic
#           - QGIS_DEBUG=0
#           - QGIS_WORKERS=4
#           - SVG_PATHS=/data/web/svg
#           - HTTP_PROXY=http://proxy.example.com:8080
#           - HTTPS_PROXY=http://proxy.example.com:8080
#           - NO_PROXY=localhost
#       extra_hosts:
#           - "host.docker.internal:host-gateway"

Images & Versions

Stellen Sie sicher, dass Sie mit dem aktuellsten stabilen Release der GBD WebSuite arbeiten.
Eine Übersicht über die aktuellen Releases finden Sie hier: https://gbd-websuite.de/help.html

Die Images für die GBD WebSuite sind unter https://hub.docker.com/u/gbdconsult zu finden. Die relevanten Images sind: gws-amd64, qgis-amd64, gws-arm64 und qgis-arm64.

Es stehen Images für amd64 sowie arm zur Verfügung.

Version 8.0 zeigt stets auf die aktuellste 8.0.x. Sobald der nächste Release (z.B. 8.1) stabil ist, wird dies auf https://gbd-websuite.de/help.html angekündigt. Releases sind nicht immer Kompatibel, es ist also zu erwarten, dass Sie ein paar Änderungen an der Konfiguration vornehmen müssen wenn Sie von z.B. 8.0 auf 8.1 upgraden.

Es gibt sowohl ein Image für die GBD WebSuite gbdconsult/gws-<arch>:<version>, sowie für den unterstüzenden QGIS-Server (gbdconsult/qgis-<arch>:<version>). Für die Verfügbarkeit einiger Features müssen beide Images laufen.

Volumes & Mounts

Im docker-compose.yml Beispiel werden Verzeichnisse vom Host-Dateisystem in den Container eingebunden.

Sollen Volumes verwendet werden, muss für den Anwender der die Konfiguration in /data schreibt eine Zugriffsmöglichkeit durch einen weiteren Container geschaffen werden welcher scp/sftp/smb zur Verfügung stellt.

Für die im Beispiel verwendete Möglichkeit mit Dateisystem Mounts, ist zu beachten dass die Berechtigungen im Host Dateisystem relevant sind. Dafür kann es nötig sein die uid/gid (Default: 1000/1000) des Users im Container explizit zu setzen. Siehe Umgebungsvariablen.

/data

Das /data Verzeichnis in beiden Containern enthält die Konfiguration sowie Daten (.qgs, .geotiff, ...) für die GBD WebSuite. Der Inhalt dieses Verzeichnisses wird näher unter Konfigurationsgrundlagen erläutert.

Weder die GBD WebSuite, noch der QGIS Server müssen in diesem Verzeichnis schreiben. In den meisten fällen kann es in der docker-compose.yml auf readonly :ro gesetzt werden.

So lange sich in diesem Verzeichnis keine großen Mengen an z.B. Rasterdaten befinden empfiehlt es sich den Inhalt des Verzeichnisses mit z.B. git zu Versionieren.

Für größere Mengen an Rasterdaten kann ein weiteres Verzeichnis gemounted werden, z.B. nach /data/raster. Damit kann dieses Verzeichnis leicht auf ein einges Volume ausgelagert werden.

/gws-var

Dieses Verzeichnis wird zum Cachen unterschiedlichster Daten so wie zum Austausch mancher Daten zwischen beiden Containern genutzt.

Beide Container müssen auf dieses Verzeichnis schreiben können.

tmpfs

Stellt dem Container ein Verzeichnis /tmp zur Verfügung, welches lediglich im Arbeitsspeicher des Hosts existiert. Mehr dazu hier: https://docs.docker.com/storage/tmpfs/

/gws-app

Enhält den Sourcecode der Applikation. Der Sourcecode wird im jeweiligen Container mitgeliefert und muss (außer von Entwicklern) nicht gemounted werden.

Ports

Die GBD WebSuite antwortet auf HTTP und HTTPS Anfragen auf den Standardports 80/http und 443/https. Haben Sie durch Hinterlegen von Zertifikaten in der Konfiguration HTTPS aktiviert, so wird ein permanenter Redirect auf https hinterlegt.

Logging

Ohne den auskommentierten Logging Block im Beispiel wird das Logging von Docker verwendet, und die Logs sind über docker logs gws bzw. docker logs qgis abrufbar.

Wird der Logging Block einkommentiert, werden alle Ausgaben in die Datei /var/log/syslog weitergeleitet und mit einem entsprechenden Tag versehen nach dem gefiltert werden kann. z.B. sudo tail -f /var/log/syslog | grep "GWS_".

Dies sind Features von Docker, nicht von der GBD WebSuite. Weitere Informationen dazu sind in der Dokumentation von Docker zu finden.

Umgebungsvariablen

gws

Einige der Umgebungsvariablen für den gws-Container sind auch stattdessen direkt in der Konfiguration setzbar. Umgebungsvariablen überschreiben stets den Eintrag in der Konfiguration.

Variable Config Default Beschreibung
MANIFEST - /data/MANIFEST.json TODO LINK [MANIFEST.json]()
GWS_CONFIG - /data/config.cx Einstiegspunkt der Konfiguration
PGSERVICEFILE - Definition benannter PostgreSQL Connections (Dienste)
GWS_LOG_LEVEL server.log.level 'ERROR' Steuert granularität der Logs ('ERROR', 'INFO', 'DEBUG')
(HTTP|HTTPS|NO)_PROXY Proxy der für ausgehende Anfragen verwendet wird.
GWS_UID - 1000 Definiere die UID des Users welcher im Container den GWS Prozess ausführt.
GWS_GID - 1000 Definiere die GID des Users welcher im Container den GWS Prozess ausführt.

qgis

Eine Vollständige Liste von Umgebungsvariablen die zur Konfiguration des QGIS Servers verwendbar sind finden Sie hier: https://docs.qgis.org/latest/en/docs/server_manual/config.html#environment-variables

Zusätzlich dazu kann die Variable PGSERVICEFILE ebenfalls direkt an den Container übergeben werden.

Erwähnenswerte Variablen sind:

PGSERVICEFILE Definitionsdatei benannter PostgreSQL Connections (Dienste)
QGIS_WORKERS paralleles Rendern mehrerer Anfragen (limitiert durch CPU Kerne)
QGIS_SERVER_PROJECT_CACHE_STRATEGY automatische Aktualisieren von in PostGIS abgelegten QGIS Projekten
SVG_PATHS Pfade in denen nach Symbologie gesucht wird

GWS Config

Nicht alle Einstellungsmöglichkeiten sind über Umgebungsvariables kontrollierbar. Es wird empfohlen einen Blick in Konfigurationsgrundlagen zu werfen um zu Verstehen wie die folgenden Optionen gesetzt werden können.

Im Folgenden eine Liste an Themen die Sie als Systemadministrator entweder für Ihren GIS Administrator/Fachanwender konfigurieren müssen oder bei denen Sie mit diesem zusammenarbeiten müssen:

WebServer, URLS, Rewrites

Der interne WebServer (nginx) des gws-Containers benötigt mindestens eine Konfigurierte site mit entsprechenden Rewrites um die einzelnen Seiten und Karten der Applikation unter leserlichen URLs anzeigen zu können.

Eine minimale Beispielhafte Konfiguration finden Sie im TODO LINK starterguide

Eine Auführliche Dokumentation finden Sie im Thema TODO LINK (WEBSERVER SITES URLS REWRITES)

SSL

Aktivieren von SSL (und damit automatischer permanenter Redirect von http auf https) geschieht durch Hinterlegen eines Zertifikat+Schlüssel Paares:

web.ssl {
    crt "/data/ssl/example.com.crt"
    key "/data/ssl/example.com.key"
}

QGIS Server

In dem docker-compose.yml Beispiel ist der qgis-Container für den gws-Container wie folgt zu erreichen. Falls Sie die Konfiguration modifizieren müssen sind dies die relevanten Einträge in der /data/config.cx:

server.qgis.host "qgis"
server.qgis.port 80

Diverse Umgebungsvariablen für den qgis-Container sind auch hier setzbar, siehe gws.server.core.QgisConfig

PostgreSQL/PostGIS Datenbank

Damit die GBD WebSuite auf die Datenbank zugreifen kann muss ein Datenbank Provider in der /data/config.cx hinterlegt werden. Hostname muss dem gws-Container bekannt sein, evtl extra_hosts Eintrag in der docker-compose.yml ergänzen (für beide Container).

database.providers+ {
    type postgres
    uid "mydb" // beliebig setzbar, kann an anderen orten in der config dazu verwendet werden einen db provider eindeutig zu identifizieren
    host "db.example.com"
    port 5432
    username "bob"
    password "*****"
}

Es wird sehr empfohlen die Verwendung von pg_service.conf in Betracht zu ziehen, mehr dazu hier: #TODO link zu thema pg_service, qgis-projekte in postgis

Locale

Damit in der Benutzeroberfläche richtige Beschriftungen angezeigt werden, sowie Korrekte Zahlen- und Datumsformate ist ein locale zu setzen:

locales ["de_DE"]

Server Settings

Es wird empfohlen einmal durch gws.server.core.Config zu schauen um einen Überblick darüber zu erhalten welche Einstellungen noch interessant sein können.

z.B. Anzahl Worker/Threads, Timeouts, Timezones, maxRequestLengths, logging, FS-Monitoring & automatic Config reloading, ...

Applikationsteuerung

Starten und Stoppen des Containers geschieht mittels docker compose:

Starten:

docker compose -f docker-compose.yml up -d

Status anzeigen:

docker ps
CONTAINER ID   IMAGE                       ...  STATUS        PORTS                                      NAMES
c1d432be6d3b   gbdconsult/qgis-amd64:8.0   ...  Up 2 months                                              qgis
35b93c8834a1   gbdconsult/gws-amd64:8.0    ...  Up 2 months   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gws

Stoppen:

docker compose -f docker-compose.yml down

Um Befehle direkt an die Applikation innerhalb des Containers zu senden: Kommandozeilenreferenz

$ docker exec gws gws -h

GWS version 8.0.27
~~~~~~~~~~~~~~~~~~

    gws action invoke      - Invoke a web action.
    gws action profile     - Profile a web action.
    gws alkis index        - Create the ALKIS index.
    gws auth password      - Encode a password for the authorization file
    gws auth sessions      - Print currently active sessions
    gws cache cleanup      - Remove stale cache dirs.
    gws cache drop         - Remove active cache dirs.
    gws cache status       - Display the cache status.
    gws gekos index        - Create the GEKOS index.
    gws ows caps           - Print the capabilities of a service in JSON format
    gws printer print      - Print using the specified params
    gws qgis caps          - Print the capabilities of a document in JSON format
    gws qgis dbread        - Copy a project from the db to a local file.
    gws qgis dbwrite       - Copy a project from a local file to the db.
    gws server configtest  - Test the configuration.
    gws server configure   - Configure the server, but do not restart.
    gws server reconfigure - Reconfigure and restart the server.
    gws server reload      - Restart the server.
    gws server start       - Configure and start the server.

Try "gws <command> -h" for more info.