Skip to content
✅Geprüft90%
Vollständigkeit:
90%
Korrektheit:
90%
✓ Geprüft von Peter König am 15. September 2026

LXC: GeoServer ​

Auf der LXC geoserver-d11 läuft der GeoServer der p2d2-Standalone. Er stellt die OGC-Dienste WMS, WFS und WFS-T über einen Tomcat-9-Servlet-Container bereit. Die Datenquelle ist das PostgreSQL-Cluster 18/main (siehe PostgreSQL/PostGIS Container).

Container-Ressourcen ​

RessourceWert
Hostnamegeoserver-d11
BetriebssystemDebian 13 (trixie)
CPU4 vCPU
RAM6 GiB (4,3 GiB frei)
Swap1 GiB
Root-Filesystem12 GB, 29 % belegt (3,2 GB)

Software-Stack ​

KomponenteVersion
GeoServer2.27.0 (Build 03-Apr-2025)
GeoTools33
GeoWebCache1.27.0
JavaOpenJDK 17.0.19
tomcat99.0.43-2~deb11u12
tomcat9-common9.0.43-2~deb11u12
libtomcat9-java9.0.95-1
openjdk-17-jre-headless17.0.19+10-1~deb12u2

Tomcat und Java ​

Der Dienst tomcat9.service läuft seit 2026-09-15 23:02:24 (PID 151) mit 1,5 GiB RSS (Peak 1,6 GiB).

/etc/tomcat9/server.xml definiert drei Connectors:

PortProtokollAnmerkung
8080HTTP/1.1
8443HTTPSKeystore /etc/tomcat9/keystore.jks, Passwort changeit im Klartext in der Datei
8009AJP/1.3nur ::1

/etc/default/tomcat9:

JAVA_OPTS="-Djava.awt.headless=true"
GEOSERVER_DATA_DIR="/opt/geoserver_data"

/usr/share/tomcat9/bin/setenv.sh:

export GEOSERVER_DATA_DIR="/opt/geoserver_data"
export GEOSERVER_CSRF_WHITELIST=wfs.data-dna.eu,geoportal.udp.data-dna.eu,www.data-dna.eu,dev.data-dna.eu,f-fv.data-dna.eu,f-de1.data-dna.eu,f-de2.data-dna.eu

Weder setenv.sh noch der laufende Java-Prozess enthalten Heap-Flags (-Xmx/-Xms). Die JVM läuft mit dem Default-Heap.

Data Directory ​

Das Data Directory liegt unter /opt/geoserver_data (259 MB gesamt):

VerzeichnisGröße
data/183 MB
logs/72 MB
coverages/2,5 MB
www/652 KB
workspaces/528 KB
demo/296 KB
security/240 KB
plugIns/208 KB
styles/156 KB
gwc-layers/108 KB
übrigeje < 50 KB

Logging ​

Das Logging-Level ist DEFAULT_LOGGING (logging.xml). Neben dem aktiven geoserver.log (12 MB) liegen mehrere rotierte geoserver-N.log (je ca. 20 MB). Das aktive Log enthält vollständige WFS-T-Transaktionskörper, darunter Geometrien und Bearbeiter-E-Mail-Adressen im Klartext.

Workspaces ​

Sechs Workspaces sind eingerichtet:

WorkspaceNamespace-URIDatastoreSchemaDB-User
de1urn:data-dna:govdata:de1de1_pg (PostGIS)p2d2_de1P2D2-DE1
de2urn:data-dna:govdata:de2de2_pg (PostGIS)p2d2_de2P2D2-DE2
devurn:data-dna:govdata:devdev_pg (PostGIS)p2d2_developP2D2-DEVELOP
fvurn:data-dna:govdata:fvfv_pg (PostGIS)p2d2_fvP2D2-FV
mainurn:data-dna:govdata:mainmain_pg (PostGIS)p2d2_mainP2D2-MAIN
friedhofsplaeneurn:data-dna:tiffdatakeiner (Coveragestore)--

Alle fünf PostGIS-Datastores verbinden auf 192.168.122.110:5432, Datenbank data-dna. Das ist das Cluster 18/main aus der PostgreSQL-Dokumentation. Die Passwörter sind GeoServer-intern verschlüsselt gespeichert (Präfix crypt1:), nicht im Klartext.

FeatureTypes ​

In allen fünf PostGIS-Workspaces sind dieselben fünf FeatureTypes eingerichtet:

FeatureTypeNative QuelleTyp
geo-containersp2d2_containersTabelle
grabflurev_grabflure_aktuellView
grabflure_versionenp2d2_grabflure_versionenTabelle
graeberv_graeber_aktuellView
graeber_versionenp2d2_graeber_versionenTabelle

Attributlisten sind über alle fünf Workspaces identisch. "Pflicht" bedeutet minOccurs=1 (nicht nillable).

geo-containers ​

AttributTypPflicht
idIntegerja
categoryStringnein
nameStringnein
geometryMultiPolygonnein
created_atTimestampnein
updated_atTimestampnein
last_updatedTimestampnein
source_wfsStringnein
cache_expiresTimestampnein
container_typeStringnein
municipalityStringnein
wp_nameStringnein
osm_admin_levelIntegernein
osm_idStringnein
alt_nameStringnein
admin_nameStringnein

Das Attribut name ist auf die Quellspalte osm_name gemappt.

grabflure ​

AttributTypPflicht
p2d2_uuidStringnein
geomMultiPolygonnein
id_internLongnein
fh_nrStringnein
fh_nameStringnein
flur_nrStringnein
wp_nameStringnein
kommune_idIntegernein
created_atTimestampnein
updated_atTimestampnein
version_nrIntegernein
aktuelle_version_idUUIDnein
aktuelle_session_idLongnein
version_kommentarStringnein
version_erstellt_amTimestampnein
version_erstellt_vonStringnein
workflow_statusStringnein
letzte_session_idLongnein

grabflure_versionen ​

AttributTypPflicht
version_idUUIDja
grabflur_idUUIDja
version_nrIntegerja
session_idLongnein
is_session_boundaryBooleanja
created_atTimestampja
created_byStringja
edit_commentStringnein
geomMultiPolygonnein
id_internLongnein
id_importLongnein
fh_nrStringnein
fh_nameStringnein
flur_nrStringnein
wp_nameStringnein
kommune_idIntegernein

graeber ​

AttributTypPflicht
p2d2_uuidStringnein
geomGeometrynein
id_internIntegernein
problemeStringnein
fried_nrStringnein
fried_nameStringnein
grabflurStringnein
grabnummerStringnein
grabartStringnein
grabart_keyStringnein
anzahl_grabstellenIntegernein
sperrungStringnein
gkeyStringnein
nachnameStringnein
vornameStringnein
geburtsdatumDatenein
sterbedatumDatenein
satzschluesselStringnein
grabstaette_statusStringnein
bestattungsartStringnein
kommune_idIntegernein
version_nrIntegernein
osm_idLongnein
osm_versionLongnein
osm_changeset_idLongnein
osm_rohdatenStringnein
osm_merge_noteStringnein
osm_edit_commentStringnein
aktuelle_session_idLongnein
version_erstellt_amTimestampnein
version_erstellt_vonStringnein
workflow_statusStringnein
letzte_session_idLongnein

graeber_versionen ​

AttributTypPflicht
version_idUUIDja
grab_idUUIDja
version_nrIntegerja
session_idLongnein
is_session_boundaryBooleanja
created_atTimestampja
created_byStringja
edit_commentStringnein
geomMultiPolygonnein
id_internIntegernein
id_importIntegernein
problemeStringnein
fried_nrStringnein
fried_nameStringnein
grabflurStringnein
grabnummerStringnein
grabartStringnein
grabart_keyStringnein
anzahl_grabstellenIntegernein
sperrungStringnein
gkeyStringnein
nachnameStringnein
vornameStringnein
geburtsdatumDatenein
sterbedatumDatenein
satzschluesselStringnein
grabstaette_statusStringnein
bestattungsartStringnein
osm_raw_dataStringnein
osm_merge_noteStringnein
osm_idLongnein
osm_changeset_idLongnein
osm_versionLongnein
kommune_idIntegernein

Die OSM-Felder unterscheiden sich zwischen der aktuellen View graeber und der Versionstabelle graeber_versionen: Die View führt osm_rohdaten und osm_edit_comment, die Versionstabelle osm_raw_data ohne osm_edit_comment.

Coveragestore friedhofsplaene ​

EigenschaftWert
Storefriedhofsplaene_koeln_mosaic
TypImageMosaic
Quellefile:data/geotiffs/koeln
Coveragefriedhoefe_koeln

Das Verzeichnis data/geotiffs/parking-lot existiert, wird aber von keinem Coveragestore referenziert.

Layer, Styles und Cache ​

EigenschaftWert
Layer26 (5 FeatureTypes x 5 PostGIS-Workspaces + 1 Coverage-Layer friedhofsplaene:friedhoefe_koeln)
Styles8: 1_cologne_red, 2_Cologne_reds, 3_Cologne_pink, generic, line, point, polygon, raster
Layergroupskeine
GeoWebCachealle 26 Layer gecacht

Security ​

Rollen (9) ​

ADMIN, GROUP_ADMIN, P2D2_IMPORT_ROLE, P2D2_WFST_DE1, P2D2_WFST_DE2, P2D2_WFST_DEVELOP, P2D2_WFST_FV, P2D2_WFST_MAIN, WFS-USER

Nutzer (8) ​

admin, p2d2_wfs_user, p2d2_wfst_de1, p2d2_wfst_de2, p2d2_wfst_develop, p2d2_wfst_fv, p2d2_wfst_main, p2d2_wfst_user

p2d2_wfst_user ist der frühere WFS-T-Nutzer vor der Einführung der Branch-spezifischen p2d2_wfst_<branch>-Nutzer und wurde von p2d2_wfst_main abgelöst. Auf der Standalone existiert er weiterhin.

Layer-ACL ​

security/layers.properties arbeitet mit mode=HIDE (nicht lesbare Layer erscheinen als nicht vorhanden).

Fallback-Regeln:

  • *.*.r=* (Lesen öffentlich, sofern nicht spezifischer eingeschränkt)
  • *.*.w=GROUP_ADMIN,ADMIN (Schreiben standardmäßig nur Admin)

Branch-spezifische Schreibrechte liegen je P2D2_WFST_<BRANCH>-Rolle auf den jeweiligen *_versionen-Layern (beispielsweise de1.grabflure_versionen.w=P2D2_WFST_DE1,ADMIN). Schreibrechte auf die geo-containers-Layer liegen ausschließlich bei P2D2_IMPORT_ROLE.

Eine Ausnahme beim Lesen: fv.graeber ist auf P2D2_IMPORT_ROLE, ROLE_AUTHENTICATED, WFS-USER und ADMIN eingeschränkt (ohne ROLE_ANONYMOUS), alle übrigen Layer sind öffentlich lesbar.

global.xml (serverweite Einstellungen) ​

EinstellungWert
proxyBaseUrlhttps://wfs.data-dna.eu/geoserver
JAI tileThreads7
JAI memoryCapacity0.5
CoverageAccess corePoolSize5
CoverageAccess maxPoolSize10

Die Kontaktdaten (contact*) sind das unveränderte GeoServer-Beispiel und damit nicht konfiguriert. Die JAI-/Coverage-Werte liegen nahe den Defaults.

Netzwerkzugang ​

Der GeoServer ist intern unter http://192.168.122.112:8080/geoserver erreichbar. Nach außen läuft er über https://wfs.data-dna.eu/geoserver (proxyBaseUrl). Die CSRF-Whitelist in setenv.sh nennt zusätzlich geoportal.udp.data-dna.eu (CIVITAS/CORE-Domain) und die Standalone-Domains www.data-dna.eu, dev.data-dna.eu, f-fv.data-dna.eu, f-de1.data-dna.eu, f-de2.data-dna.eu.

Service-Management ​

bash
systemctl status tomcat9
systemctl restart tomcat9
journalctl -u tomcat9 -f --no-pager
tail -f /opt/geoserver_data/logs/geoserver.log

Weiterführende Dokumentation ​