Installation
docker-compose.yml
version: '3'
services:
gws:
image: gbdconsult/gws-amd64:8.0.0
container_name: gws
ports:
- "80:80"
- "443:443"
volumes:
- "~/gws-welcome/data:/data:ro"
- "~/gws-var/print:/gws-var/print"
- "~/gws-var:/gws-var"
# - "~/gws-websuite/app:/gws-app:ro"
# extra_hosts:
# - "somehost:162.242.195.82"
# - "otherhost:50.31.209.229"
# environment:
# GWS_UID=1000 # default 1000
# GWS_GID=1000 # default 1000
# GWS_CONFIG=/data/config.json # default /data/config.json
qgis:
image: gbdconsult/qgis-3.28-amd64:0
container_name: qgis
ports:
- "80"
volumes:
- "~/gws-welcome/data:/data:ro"
- "~/gws-var/print:/gws-var/print:ro"
environment:
QGIS_DEBUG=0
QGIS_WORKERS=1
Voraussetzungen
Verzeichnisse
Innerhalb des Containers existieren die folgenden relevanten Verzeichnisse:
/data
: Enhält Konfiguration und Daten für die Anwendung (z.B. .json, .qgs, .geotiff). Der Container muss in diesem Verzeichnis nicht schreiben. Wird ein Verzeichnis auf dem Host in den Container gemounted, sollte dies readonly (:ro
) geschehen. Es ist bei Bedarf möglich weitere Datenverzeichnisse an beliebige Orte in den Container zu mounten. Diese müssen dann in der Konfiguration explizit referenziert werden.
/gws-var
: Enhält Cache und Sitzungsdaten. Die GBD WebSuite muss in dieses Verzeichnis schreiben können. Das Verzeichnis muss entweder vom Hostsystem in den Container gemounted werden, oder als persistentes Volume existieren damit Daten nicht zwischen Updates/Neustarts verlorengehen.
/gws-var/print
: Muss sowohl vom qgis- als auch vom gws-Container schreibbar sein, um einen Datenaustausch zwischen qgis-server und GBD WebSuite zu ermöglichen. Wird für Druckfunktionalitäten verwendet. Muss nicht persistieren.
/gws-app
: Enhält den Quellcode der GBD WebSuite Applikation. Nur für Entwickler interessant. In einer normalen Installation die das fertige Image von hub.docker.com verwendet ist der Quellcode bereits im Container hinterlegt. Ein Update geschieht im Normalfall durch Aktualisierung des gesamten Containers.
TODO: - ein temporäres Verzeichnis *tmp*. Normalerweise würde man es als
tmpfsbezeichnen.
Benutzerkonten
Innerhalb des Docker Containers hat das Benutzerkonto mit dem die GBD WebSuite ausgeführt standardmäßig die User- und Gruppen ID 1000
. Um ein problemloses Lesen und Schreiben auf aus dem Hostsystem in den Container gemountete Verzeichnisse zu gewährleisten muss das Hostsystem-Benutzerkonto mit der gleichen ID die entsprechenden Rechte auf die relevanten Verzeichnisse des Hostsystems haben.
Sollte es in Ihrer Infrastruktur nicht möglich sein dem Benutzer mit der ID 1000 die nötigen Rechte zu geben können Sie die innerhalb des Containers verwendete User- und Gruppen ID anpassen in dem Sie die folgenden Umgebungsvariablen beim Start des Containers übergeben: GWS_UID
, GWS_GID
.
Ports
Die GBD WebSuite antwortet auf HTTP und HTTPS Anfragen auf den Standardports 80 und 443. Haben Sie durch Hinterlegen von Zertifikaten in der Konfiguration HTTPS aktiviert, so wird auf 80/HTTP ein permanenter Redirect auf 443/HTTPS hinterlegt.
Konfiguration
Der Einstiegspunkt für die Konfiguration ist per Default /data/config.json
. Alle weiteres Konfigurationsdateien werden von dieser Datei eingebunden.
Um eine andere Datei als Einstiegspunkt zu verwenden setzen Sie die Umgebungsvariable GWS_CONFIG
.
Die Konfigurationsformate sind unter Einführung beschrieben.
Externe Adressen
Wenn Ihr GBD WebSuite Container externe Verbindungen benötigt (höchstwahrscheinlich zu Datenbankservern), müssen Sie die Adressen zu diesen Hosts explizit hinterlegen.
In der docker-compose.yml
ist dies unter dem Punkt extra_hosts
möglich. Siehe Beispiel oben.
Einstiegspunkt (alt?)
Die GBD WebSuite hat einen einzigen Einstiegspunkt, ein Shell-Skript namens gws
. Um den Server zu starten oder zu stoppen, nutzen Sie die folgenden Befehle:
gws server start
gws server stop
Ausführen mit gws
-Shell-Skript (alt?)
Folgende Optionen müssen Sie in Ihrem gws
-Shell-Skript anpassen:
- ein oder mehrere Daten-Verzeichnisse einbinden
- var und tmp Verzeichnisse einbinden
- Port-Mappings
- Konfigurationspfad
- externe Hosts
Hier ist eine Skript-Vorlage, die die GBD WebSuite mittels docker run
startet. Sie können diese Vorlage nach Ihren Bedürfnissen anpassen.
@quote #!/usr/bin/env bash
RELEASE=6.1
CONTAINER=gws-container
DOCKER='sudo docker'
IMAGE=gbdconsult/gws-server:$RELEASE
LOG_DRIVER=syslog
DATA_DIR=/your/gws/data/directory
VAR_DIR=/your/gws/var/directory
CONFIG_PATH=/data/config.cx
STARTOPTS=(
--name $CONTAINER
--mount type=bind,src=$DATA_DIR,dst=/data,readonly
--mount type=bind,src=$VAR_DIR,dst=/gws-var
--mount type=tmpfs,dst=/tmp,tmpfs-mode=1777
--publish 0.0.0.0:80:80
--publish 0.0.0.0:443:443
--log-driver $LOG_DRIVER
--log-opt tag=GWS
--env GWS_CONFIG=$CONFIG_PATH
)
start_server() {
$DOCKER run ${STARTOPTS[*]} --detach $IMAGE gws server start
}
stop() {
$DOCKER exec $CONTAINER gws server stop
$DOCKER stop $CONTAINER
$DOCKER rm --force $CONTAINER
}
case "$1_$2" in
server_start) start_server ;;
server_stop) stop ;;
server_restart) stop; start_server ;;
esac
@end
Sobald Sie dieses Skript als z.B. gws
in Ihren Pfad abspeichern, können Sie die WebSuite mit diesen Befehlen steuern:
gws server start
gws server stop
gws server restart
Aktuellen Quellcode anbinden (alt?)
Da die GBD WebSuite aktiv entwickelt wird, kann es vorkommen, dass eine in dem Docker-Image enthaltene Version von unserem Quellcode veraltet ist. Sie können aber das Image mit der aktuellen Version ausführen indem Sie das Quellcodeverzeichnis unter gws-app
mounten.
Laden Sie zuerst unser Paket von Ihrer Version herunter (in diesem Fall, Version 6.1):
curl -O http://gws-files.gbd-consult.de/gws-6.1.tar.gz
entpacken Sie das Paket:
tar xvzf gws-6.1.tar.gz
und mounten Sie den gws-server/app
Unterordner als gws-app
:
--mount type=bind,src=<absoluter Pfad>/gws-server/app,dst=/gws-app,readonly
Host-Installation (alt?)
Wir haben auch ein Skript, das die WebSuite direkt auf Ihrem System installiert, ohne docker. Das Skript finden Sie in unserem Github unter https://github.com/gbd-consult/gbd-websuite/blob/master/install/install.sh
.. caution:: Diese Entwicklung ist experimentell, nicht auf Produktionsserver probieren!