{"id":41342469,"url":"https://github.com/lat-lon/deegree-workshop","last_synced_at":"2026-01-23T06:52:07.500Z","repository":{"id":150613360,"uuid":"103585391","full_name":"lat-lon/deegree-workshop","owner":"lat-lon","description":"Quickstart Tutorial for setting up INSPIRE Network Services with deegree web services","archived":false,"fork":false,"pushed_at":"2024-08-27T21:03:45.000Z","size":18450,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-08-28T22:14:55.541Z","etag":null,"topics":["configuration","deegree","docker","docker-commands","inspire","ogc-services","slide","tutorial","wfs","workshop-materials"],"latest_commit_sha":null,"homepage":"https://www.deegree.org","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lat-lon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-14T21:53:02.000Z","updated_at":"2024-08-27T21:03:49.000Z","dependencies_parsed_at":"2024-08-27T22:10:20.317Z","dependency_job_id":null,"html_url":"https://github.com/lat-lon/deegree-workshop","commit_stats":{"total_commits":32,"total_committers":2,"mean_commits":16.0,"dds":0.0625,"last_synced_commit":"1153e0ed4745fbf6fe40fd3a6c5e68d73d237393"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lat-lon/deegree-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lat-lon%2Fdeegree-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lat-lon%2Fdeegree-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lat-lon%2Fdeegree-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lat-lon%2Fdeegree-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lat-lon","download_url":"https://codeload.github.com/lat-lon/deegree-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lat-lon%2Fdeegree-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28682263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","deegree","docker","docker-commands","inspire","ogc-services","slide","tutorial","wfs","workshop-materials"],"created_at":"2026-01-23T06:52:06.329Z","updated_at":"2026-01-23T06:52:07.482Z","avatar_url":"https://github.com/lat-lon.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quickstart Tutorial \"INSPIRE Network Services with deegree 3.5 on Docker\" (90 minutes)\n\n[Online-Version (GitHub)](https://github.com/lat-lon/deegree-workshop/blob/main/README.md)\n\n## Agenda   \n\n1. [Set up the Docker Compose infrastructure](#1-set-up-the-docker-infrastructure)\n\n2. [Import ProtecedSites data into the PostgreSQL database ](#2-import-protecedsites-data-into-the-postgresql-database-)\n\n3. [Use QGIS to visualize the data](#3-use-qgis-to-visualize-the-data)\n\n4. [Validate the deegree webservices](#4-validate-the-deegree-webservices)\n\n    [Troubleshooting guide](#troubleshooting-guide)\n\n    [Overview of Basic Docker Commands](#overview-of-basic-docker-commands)\n\n    [Links for further reading and resources](#links-for-further-reading-and-resources)\n\n---\n\n## 1. Set up the Docker infrastructure\n\n\u003cimg alt=\"image alt text\" height=\"90\" src=\"resources/docker-logo-blue.svg\" width=\"350\"/\u003e\n\n### 1.1 Install Docker\n\n\u003e **Info**: \"Docker Desktop provides a user-friendly graphical interface that simplifies the management of containers and services. It includes Docker Engine as this is the core technology that powers Docker containers. Docker Desktop for Linux also comes with additional features like Docker Scout and Docker Extensions\" [(Docker Inc. 2024)](https://docs.docker.com/desktop/install/linux-install/).\n\n#### Docker Desktop\n \n* [Linux](https://docs.docker.com/desktop/install/linux-install/) (recommended)\n* [Windows](https://docs.docker.com/desktop/install/windows-install/)\n* [Mac](https://docs.docker.com/desktop/install/mac-install/)\n\n#### Docker Engine\n\n* [Linux](https://docs.docker.com/engine/install/) (advanced)\n\n### 1.2 Pull the desired Docker Image versions of deegree, PostgreSQL/PostGIS and pgAdmin4 (optional)\n\n#### PostgreSQL/PostGIS Database\n![image alt text](resources/postgresql-horizontal.svg) ![image alt text](resources/image_3.png)\n\n* Docker Hub: [https://hub.docker.com/r/postgis/postgis/](https://hub.docker.com/r/postgis/postgis/)\n\nTo download the Docker image from the Docker registry run:\n\n    docker pull postgis/postgis:16-3.4\n\n#### pgAdmin 4 Web Interface\n\n* Docker Hub: [https://hub.docker.com/r/dpage/pgadmin4/](https://hub.docker.com/r/dpage/pgadmin4/)\n\nTo download the Docker image from the Docker registry run:\n\n    docker pull dpage/pgadmin4:8.9\n\n#### deegree Webservices\n![image alt text](resources/deegree_logo.svg)\n\n* Docker Hub: [https://hub.docker.com/r/deegree/deegree3-docker/](https://hub.docker.com/r/deegree/deegree3-docker/)\n\nTo download the Docker image from the Docker registry run:\n\n    docker pull deegree/deegree3-docker:3.5.8\n\n* Dockerfile available under: [https://github.com/deegree/deegree3-docker](https://github.com/deegree/deegree3-docker)\n\n## 1.3 Setting up your Docker environment for deegree\n\nAll necessary configuration files and data required to set up and run an example INSPIRE ProtectedSites deegree workspace are available for download as a [ZIP-File](https://github.com/lat-lon/deegree-workshop/archive/refs/heads/main.zip).\n\nFor this tutorial, only the contents of the `/deegree-workshop-bundle` folder in the downloaded ZIP-File are relevant. The folder contains the following items:\n\n| Directory                  | Content                                                                                                                                                                                      | Documentation |\n|:---------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| :------------ |\n| `/deegree-workspace/ps-sl` | Complete deegree workspace with data and configuration files (WFS, WMS, layers, styles and database) for the INSPIRE Annex 1 data theme ProtectedSites from the federal state of Saarland    | [What is a deegree workspace?](https://download.deegree.org/documentation/current/html/#_the_deegree_workspace) |\n| `/sql`                     | SQL scripts for configuring the PostgreSQL database                                                                                                                                          | [PostgreSQL](https://www.postgresql.org/docs/current/tutorial.html), [PostGIS](https://postgis.net/workshops/postgis-intro/) |\n| `/sql-dump`                | SQL scripts for configuring the PostgreSQL database and populating it with data                                                                                                              |  [PostgreSQL](https://www.postgresql.org/docs/current/tutorial.html), [PostGIS](https://postgis.net/workshops/postgis-intro/)  |\n| `docker-compose.yaml`      | Docker Compose file for defining and running multi-container applications, in this case including deegree, PostgreSQL and pgAdmin 4                                                          | [How does Docker Compose work?](https://docs.docker.com/compose/compose-application-model/) |\n| `.env`                     | Used to set the necessery environment variables                                                                                                                                              | [How to use the `.env`?](https://docs.docker.com/compose/environment-variables/set-environment-variables/) |\n\n### Overview of the Docker compose file\nThe provided, ready-to-use, Docker Compose file contains the following configuration (break down):\n\n```\nservices:\n  deegree:\n    image: deegree/deegree3-docker:${DEEGREE_VERSION}\n    container_name: deegree_${DEEGREE_VERSION}\n    ports:\n      - 8181:8080\n    volumes:\n      - ./deegree-workspace:/root/.deegree:rw\n    depends_on:\n      postgres:\n        condition: service_healthy\n    networks:\n      - network\n```\n\nThe first service declared in the Docker Compose file is deegree, which runs the deegree web services.\nThe specific version of deegree used is determined by the DEEGREE_VERSION variable defined in the .env file.\nThe service depends on the successful startup and health of the PostgreSQL service (referred to as postgres).\nOnce PostgreSQL is running, the deegree service is started. The deegree container also mounts a local\ndirectory (./deegree-workspace) to /root/.deegree within the container, ensuring that the workspace\nconfiguration is persistent and shared.\n\n```\n  postgres:\n    image: postgis/postgis:${POSTGRES_POSTGIS_VERSION}\n    container_name: postgres_database\n    healthcheck:\n      test: [ \"CMD-SHELL\", \"pg_isready -h localhost -p 5432 -U postgres -d inspire\" ]\n      interval: 5s\n      retries: 3\n    ports:\n      - 5432:5432\n    environment:\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=postgres\n    volumes:\n      - ./sql:/docker-entrypoint-initdb.d/\n      #- ./sql-dump:/docker-entrypoint-initdb.d/\n    networks:\n      - network\n```\n\nThe second service is postgres, a PostgreSQL database with PostGIS extensions. \nThe exact version is specified by the POSTGRES_POSTGIS_VERSION variable from the .env file. \nIt exposes port 5432 and initializes the database using SQL scripts found in the ./sql directory, \nwhich are automatically executed at container startup. Optionally, the SQL database dump can be utilized,\nalthough it is typically commented out.\n\n```\n  pgadmin:\n    image: dpage/pgadmin4:${PGADMIN_VERSION}\n    container_name: pgadmin_${PGADMIN_VERSION}\n    ports:\n      - 5080:80\n    environment:\n      - PGADMIN_DEFAULT_EMAIL=pgadmin4@pgadmin.org\n      - PGADMIN_DEFAULT_PASSWORD=admin\n    depends_on:\n      postgres:\n        condition: service_healthy\n    networks:\n      - network\n```\n\nThe third service, pgadmin, is the pgAdmin 4 web interface, used for managing the PostgreSQL database via a web browser. \nThis service also waits for PostgreSQL to start before initializing. \nThe version of pgAdmin is determined by the PGADMIN_VERSION variable in the .env file, \nand it exposes port 5080 for access.\n\n```\nnetworks:\n  network:\n    name: deegree_workshop_network\n```\n\nAt last, a custom Docker network named `deegree_workshop_network` is created.\nThis network ensures that all services can communicate within the same isolated network environment, \nallowing containers to reference each other by their service names.\n\n\u003e**Info:** You can find an overview of basic Docker Compose commands at the end of this tutorial under: [Overview of basic Docker Compose commands](#overview-of-basic-docker-commands). \n\n### Specifying version variables for services\n\nThe `.env` file included in the provided `/deegree-workshop-bundle` defines specific version variables for \nthe services used in the Docker Compose setup. This file contains the following environment variables (breakdown):\n\n```\nDEEGREE_VERSION=3.5.8\n```\nThis variable specifies the exact version of deegree to be used. The Docker Compose file references this \nvariable to pull the corresponding deegree Docker image.\n\n```\nPOSTGRES_POSTGIS_VERSION=16-3.4\n```\n\nThis variable defines the version of PostgreSQL along with its PostGIS extensions. The Docker Compose file references \nthis variable to pull the corresponding PostgreSQL/PostGIS Docker image.\n\n```\nPGADMIN_VERSION=8.9\n```\n\nThis variable sets the version of pgAdmin 4 to be used. The Docker Compose file references\nthis variable to pull the corresponding pgAdmin 4 Docker image.\n\nUsing these version parameters in the `.env` file allows for easy updates and consistent configuration across different setups.\n\n## 1.4 Start the Docker compose environment\n\nThe Compose file, typically named `compose.yaml`, adheres to the rules outlined in the Compose Specification for\ndefining multi-container applications. The preferred file name and format is `compose.yaml`. However, for backward\ncompatibility with earlier versions, Compose also supports `docker-compose.yaml` and `docker-compose.yml`\nIf multiple Compose files are present, `compose.yaml` is given priority.\n\n### Key commands\n\nTo start all the services defined in your compose.yaml file, use:\n\n    docker compose up\n\nHowever, this command displays all logs, which can be overwhelming. A better approach is to run the services in detached mode:\n\n    docker compose up -d\n\nTo stop and remove the running services, use:\n\n    docker compose down\n\nIf you need to monitor container output for troubleshooting, you can view the logs with:\n\n    docker compose logs\n\nTo list all services along with their current status, use:\n\n    docker compose ps\n\n### Available endpoints\nAfter you have successfully started the Docker compose environment, the following endpoints are available:\n\n**deegree Webservices**\n*  http://localhost:8181/deegree-webservices\n\n**pgAdmin Web Interface**\n*  http://localhost:5080/\n\n# 2. Import ProtecedSites data into the PostgreSQL database \n\n## 2.1 Use the deegree GmlLoader\n\nIn order to import GML data of the INSPIRE Annex 1 data theme ProtectedSites into the SqlFeatureStore of deegree, \nthe `GmlLoader` of the deegree GML tools CLI is used. Since we are working with the Docker image of deegree, the CLI is \nalready available under `/opt` in the deployed Docker container. Since the GML data is stored in the provided workspace and \ntherefore also available on the Docker container, we can execute the `GmlLoader` with the one following commands.\nBe sure to use the right container name, which can change depending on the configured `DEEGREE_VERSION` in the `.env`.\n\n**One dataset**, 1317 polygon geometries, ~6 min duration (recommended):\n```\ndocker exec -w /opt deegree_[YOUR_DEEGREE_VERSION] java -Xmx16g -jar deegree-tools-gml.jar GmlLoader -pathToFile=/root/.deegree/ps-sl/data/gmlData/ProtectedSites_Naturschutz.gml -workspaceName=ps-sl -sqlFeatureStoreId=INSPIRE_ProtectedSites_WFS\n```\n**Two datasets**, 7 polygon and 3340 point geometries, ~20 min duration:\n```\ndocker exec -w /opt deegree_[YOUR_DEEGREE_VERSION] java -Xmx16g -jar deegree-tools-gml.jar GmlLoader -pathToList=/root/.deegree/ps-sl/data/gmlData/gmldatalist.txt -workspaceName=ps-sl -sqlFeatureStoreId=INSPIRE_ProtectedSites_WFS\n```\n\n\u003e**Info**: Setting the Java parameter `-Xmx16g` (value dependent on the resources provided) is highly advisable, to avoid\n\u003e a Java `OutOfMemoryError`. Further information regarding the parameters of the GmlLoader can be found in the \n\u003e [deegree documentation of the GML tools CLI](https://download.deegree.org/documentation/current/html/#deegree-gml-tools).\n\nBeware that the `GmlLoader` can only be executed when the used SqlFeatureStore in deegree was created using the\n`SqlFeatureStoreConfigCreator`, which is also a part of the deegree GML tools CLI. Since the configuration for this\ntutorial is provided, the usage of the `SqlFeatureStoreConfigCreator` is not necessary.\n\n### Optional:\nIf you can not use the `GmlLoader` due to errors or missing time resources, just uncomment the `./sql-dump` volume of the\n`postgres` service in the `compose.yaml`:\n\n```\n  postgres:\n    image: postgis/postgis:${POSTGRES_POSTGIS_VERSION}\n    container_name: postgres_database\n    healthcheck:\n      test: [ \"CMD-SHELL\", \"pg_isready -h localhost -p 5432 -U postgres -d inspire\" ]\n      interval: 5s\n      retries: 3\n    ports:\n      - 5432:5432\n    environment:\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=postgres\n    volumes:\n      #- ./sql:/docker-entrypoint-initdb.d/\n      - ./sql-dump:/docker-entrypoint-initdb.d/\n    networks:\n      - network\n```\n\nWhile using the SQL dump you can simply start the Docker environment and directly start using the deegree webservices\n([section 3](#3-use-qgis-to-visualize-the-data))!\n\n\u003e Info: Remember to comment out the `./sql` volume!\n## 2.2 Use the pgAdmin 4 Web Interface \n\nAfter the import of the GML data using the deegree `GmlLoader` is finished, we can verify the content of the PostgreSQL\ndatabase using the pgAdmin 4 web interface. To do so, open [http://localhost:5080/](http://localhost:5080/) in \nyour browser and use the following credentials to login into pgAdmin 4:\n\n* **User**: pgadmin4@pgadmin.org\n* **Password**: admin\n\nNext, add your database server under:\n##### Object \u003e Register \u003e Server...\n\nAfter navigating to the said point through the toolbar, a pop-up window opens. Fill the tabs General and Connection with\nthe given information below.\n\n**General**:\n* **Name**: inspire_ps_server\n\n**Connection**:\n* **Host name**: postgres_database\n* **Port**: 5432\n* **User**:\tpostgres\n* **Password**: postgres\n\n\u003e**Info**: The password is `postgres`, since the set Docker environment variable for the service postgres in the Docker Compose file is `POSTGRES_PASSWORD=postgres`!\n\nAfter connecting to the database server, you should see a database named `inspire` listed. If the GML data import was \nsuccessful, the tables within the `schutgeb` schema will be populated with data. To visualize this data, expand \nthe `inspire` database, then navigate to the `schutgeb` schema. Here, you'll find several tables that were created \nby the setup scripts executed during the Docker Compose environment initialization. To view the data, right-click \non a table and select `View/Edit Data \u003e All Rows`. This will run a predefined SQL query, displaying the data in \nthe pgAdmin 4 web interface.\n\n## 3. Use QGIS to visualize the data\n\n### 3.1 Retrieve the WFS and WMS endpoints \n\nTo retrieve the Web Feature Service (WFS) and Web Map Service (WMS) endpoints of the deegree workspace for the \nINSPIRE Annex 1 data theme ProtectedSites, navigate to the deegree web console with:\n* http://localhost:8181/deegree-webservices\n\nIn the web console, go to the pre-configured web services under:\n\n##### web services \u003e services\n\nIf everything is set up correctly, you should see a WFS named `inspirewfs_Schutzgebiete` and a WMS \nnamed `inspirewms_Schutzgebiete`. By clicking the `Capabilities` button for each service, you can access \nthe corresponding capabilities document in form of an XML response. This document provides metadata about the \noperations, services, and data offered by the service.\n\n* WFS Capabilities: [http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete?service=WFS\u0026request=GetCapabilities](http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete?service=WFS\u0026request=GetCapabilities)\n* WMS Capabilities: [http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete?service=WMS\u0026request=GetCapabilities](http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete?service=WMS\u0026request=GetCapabilities)\n\nBased on the capabilities address, the endpoint for each service can be identified:\n\n* WFS Endpoint: [http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete)\n* WMS Endpoint: [http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete)\n\n### 3.2 Launch QGIS\n\nLaunch QGIS on the device where your Docker Compose environment is set up.\n\nIf QGIS is not already installed, you can download the appropriate version for your operating system \nfrom [https://qgis.org/download/](https://qgis.org/download/) and follow the installation instructions.\n\n\u003e **Info**: You may also use other Geographic Information Systems (GIS) or similar software to visualize \n\u003e your data, if preferred.\n\nOnce QGIS launched, create a new QGIS project with the Name `INSPIRE_PS`.\n\n### 3.3 Add the WFS and WMS Endpoints to QGIS \n\n#### 3.3.1 Add the WFS Endpoint\n\nAdd a new WFS / OGC API - Features layer to your QGIS project under:\n\n##### Layer \u003e Add Layer \u003e Add WFS / OGC API - Features Layer...\n\nThe following window should open:\n\n![dms_wfs.png](resources/dms_wfs.png)\n\nClick on the button `New` to add the WFS endpoint of deegree to your QGIS project, another window should open:\n\n![config_wfs.png](resources/config_wfs.png)\n\nIn this window, set a name and the WFS Endpoint with the URL:\n* [http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete) \n\nTo complete the configuration, click the `OK` button. The current window will close, revealing the previous one. \nIn that window, click the `Connect` button. A table displaying the available layers should then appear.\n\n#### 3.3.1 Add the WMS Endpoint\n\nAdd a new WMS/WMTS layer to your QGIS project under:\n\n##### Layer \u003e Add Layer \u003e Add WMS/WMTS Layer...\n\nThe following window should open:\n\n![dms_wms.png](resources/dms_wms.png)\n\nClick on the button `New` to add the WMS endpoint of deegree to your QGIS project, another window should open:\n\n![config_wms.png](resources/config_wms.png)\n\nIn this window, set a name and the WMS Endpoint with the URL:\n* [http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete)\n\nTo complete the configuration, click the `OK` button. The current window will close, revealing the previous one.\nIn that window, click the `Connect` button. A table displaying the available layers should then appear.\n\n## 3.4 Load the layers in the QGIS workspace\n\nAfter the two endpoints are added into QGIS, the data can be visualized.\n\nHere is an example of all the layers provided by the WMS (one dataset):\n![WMS.png](resources/WMS.png)\n\n\u003e **Info:** Depending on the used QGIS-Version, the WFS can or can not be visualized. This issue persists, as the INSPIRE\n\u003e GML structure is quite complex to process.\n# 4. Validate the deegree Webservices\n\n## 4.1 TEAM Engine 5.x:\n* Docker Hub: [https://hub.docker.com/r/ogccite/teamengine-production/](https://hub.docker.com/r/ogccite/teamengine-production/)\n\nTo download the Docker image from the Docker registry run:\n\n    docker pull ogccite/teamengine-production:latest\n\n* Dockerfile available under: [https://github.com/opengeospatial/teamengine-docker/](https://github.com/opengeospatial/teamengine-docker/)\n\n\nRun the TEAM Engine with the following command:\n    \n    docker run -d --name teamengine -p 8088:8080 --network=\"deegree_workshop_network\" ogccite/teamengine-production\n\nNext, open the TEAM Engine in your browser with: \n\n* [http://localhost:8088/teamengine](http://localhost:8088/teamengine)\n\nLog in with the following credentials:\n\n* **User**:\togctest\n* **Password**: ogctest \n\n\u003e **Info**:\tYou can also create a new account, with the credentials stored locally, which are automatically deleted \n\u003e when the Docker container is removed.\n\nUse either the WFS or WMS to run the validation against:\n\n* [http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewms_Schutzgebiete)\n* [http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete](http://localhost:8181/deegree-webservices/services/inspirewfs_Schutzgebiete)\n\nFor reference, the current deegree WFS 2.0 OGC Reference Implementation can be found online under:\n\n* [https://cite.deegree.org/deegree-webservices-3.5.6/services/wfs200?service=WFS\u0026request=GetCapabilities](https://cite.deegree.org/deegree-webservices-3.5.6/services/wfs200?service=WFS\u0026request=GetCapabilities)\n\nFurther information about the TEAM Engine can be obtained under: \n* https://github.com/opengeospatial/teamengine\n\n## 4.2 Further testing with the INSPIRE Reference Validator:\n\nGitHub: [https://github.com/INSPIRE-MIF/helpdesk-validator](https://github.com/INSPIRE-MIF/helpdesk-validator)\n\n\u003e **Info**: For this step, an existing GitHub account is required!\n\nRun it using the following docker commands:\n\n    docker login docker.pkg.github.com\n    docker run --name inspire-validator --network=\"deegree_workshop_network\" -d -p 8090:8090 -v ~/etf:/etf docker.pkg.github.com/inspire-mif/helpdesk-validator/inspire-validator:2024.2\n\nThe first command prompts you to log into GitHub using your GitHub-Account credentials. The second command launches a \nDocker container with the image of the INSPIRE Reference Validator, exposing the UI in port 8090 through the same port \nin the host machine. It uses a volume in the local file system, on the directory `~/etf`, which will create an `~/etf` \nfolder inside the users home folder.\n\nOnce the Docker container is started, you can open the UI in your browser under: \n* [http://localhost:8090/validator/home/index.html](http://localhost:8090/validator/home/index.html)\n\n---\n\n# Troubleshooting Guide\n\n### Docker Command Line Issues\n\n- **Can't access Docker from the command line:**\n    - Ensure the Docker daemon is running and use `sudo` if necessary.\n\n### Docker Image Handling\n\n- **Can't pull Docker image due to no Internet connection:**\n    - Import a Docker image from a tar archive using:\n      ```bash\n      docker load -i \u003cPATH_TO_USB_DRIVE\u003e/Docker/postgis.tar\n      ```\n\n### Container Management\n\n- **Error while starting Docker container:**\n    - Verify system resources, especially available memory.\n    - Monitor container stats with:\n      ```bash\n      docker stats \u003cCONTAINER_NAME_OR_ID\u003e\n      ```\n      This will display CPU usage, memory utilization, and total memory available to the container.\n    - Stop and remove the container, then restart:\n      ```bash\n      docker stop \u003cCONTAINER_NAME_OR_ID\u003e \u0026\u0026 docker rm \u003cCONTAINER_NAME_OR_ID\u003e\n      ```\n\n- **Checking Docker container logs for errors:**\n    - Use the following command to view real-time logs:\n      ```bash\n      docker logs -f \u003cCONTAINER_NAME_OR_ID\u003e\n      ```\n\n### Container Interaction\n\n- **Attach to the Docker container to execute commands:**\n    - Attach with:\n      ```bash\n      docker attach \u003cCONTAINER_NAME_OR_ID\u003e\n      ```\n    - To detach while keeping the container running, use `CTRL-p CTRL-q` (ensure `-it` option is used with `docker run`).\n    - Stop the container with `CTRL-c`.\n\n- **Running commands inside the Docker container:**\n    - Open a shell inside the running container:\n      ```bash\n      docker exec -it \u003cCONTAINER_NAME_OR_ID\u003e '/bin/bash'\n      ```\n    - Exit the shell with the `exit` command.\n\n### Network Troubleshooting\n\n- **Can't access Docker container within the Docker network:**\n    - List container IPs:\n      ```bash\n      docker network inspect bridge\n      ```\n    - Create and connect containers to a custom network:\n      ```bash\n      docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 inspire_network\n      docker network connect inspire_network \u003cCONTAINER_NAME_OR_ID\u003e\n\n      ```\n    - Retry accessing the Docker container.\n\n### Database Interaction\n\n- **Can't insert data into the database:**\n    - Ensure the `inspire` user has all necessary privileges.\n    - Grant privileges using:\n      ```sql\n      GRANT ALL ON SCHEMA public TO inspire;\n      GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO inspire;\n      GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO inspire;\n      ```\n\n### Additional Resources\n\n- **General Docker Troubleshooting:** [Docker FAQs](https://docs.docker.com/toolbox/faqs/troubleshoot/)\n    - **For Mac OS:** [Mac Troubleshooting](https://docs.docker.com/docker-for-mac/troubleshoot/)\n    - **For Windows:** [Windows Troubleshooting](https://docs.docker.com/docker-for-windows/troubleshoot/)\n\n---\n\n# Overview of Basic Docker Commands\n\n### General Structure of the Docker CLI\n\n```bash\ndocker \u003ccommand\u003e [options] [arguments]\n```\n\n### Display Help for Docker Commands\n\n- **Show help per Docker command:**\n  ```bash\n  docker \u003ccommand\u003e --help\n  ```\n\n### Common Commands and Options\n\n- **`docker info`:**\n    - Display system-wide information.\n\n- **`docker images`:**\n    - List Docker images.\n\n- **`docker pull`:**\n    - Pull an image or a repository from a registry (e.g., [hub.docker.com](https://hub.docker.com/)).\n\n- **`docker ps`:**\n    - List containers.\n        - `-a`: Show all containers, including **stopped** ones.\n\n- **`docker network ls`:**\n    - List all Docker networks.\n\n- **`docker run`:**\n    - Run a command in a **new** container.\n        - `-d, --detach`: Run container in background and print container ID.\n        - `-e, --env`: Set environment variables (default: `[]`).\n        - `-i, --interactive`: Keep STDIN open even if not attached.\n        - `-m, --memory`: Set memory limit (format: `\u003cnumber\u003e\u003cunit\u003e`, where unit = b, k, m, or g).\n        - `--name`: Assign a name to the container.\n        - `--network`: Connect a container to a network (default: `\"default\"`, options: `[host, bridge]`).\n        - `-p, --publish`: Publish a container's port(s) to the host (default: `[]`, format: `host:container`).\n        - `--rm`: Automatically remove the container when it exits.\n        - `-t, --tty`: Allocate a pseudo-TTY.\n        - `-v, --volume`: Bind mount a volume (default: `[]`, format: `host_dir:container_dir`).\n\n- **`docker exec`:**\n    - Run a command in a **running** container.\n\n- **`docker logs`:**\n    - Fetch the logs of a container.\n        - `-f, --follow`: Follow log output in real-time.\n\n- **`docker start`:**\n    - Start one or more stopped containers.\n\n- **`docker stop`:**\n    - Stop one or more running containers.\n\n- **`docker load`:**\n    - Load a Docker image from a tar archive file.\n\n- **`docker save`:**\n    - Save a Docker image into a tar archive file.\n\n- **`docker rm`:**\n    - Remove one or more containers.\n\n- **`docker rmi`:**\n    - Remove one or more images.\n\n---\n\n# Links for further reading and resources\n\n## Tutorial resources and slides \n\n- slides/01_T_Introduction.pdf\n- slides/02_T_INSPIRE-Download-Services.pdf\n- slides/03_TP_Docker.pdf\n- slides/04_P_deegree-on-Docker.pdf\n- slides/05_TP_deegree.pdf\n- slides/06_P_Configuration-of-a-deegree-INSPIRE-Download-Service.pdf\n- slides/07_TP_Validation-of-service-and-data.pdf\n\n### Archive:\n\n* [FOSS4G 2016 Workshop](https://github.com/tfr42/deegree-docker/tree/foss4g2016_workshop)\n\n## Docker\n\n* [https://www.docker.com](https://www.docker.com)\n* [https://docs.docker.com](https://docs.docker.com)\n* [https://hub.docker.com](https://hub.docker.com)\n\n### Talks about Docker and GIS\n\nVideo (german) - [FOSS4G 2016 - Docker Images for Geospatial](https://ftp.gwdg.de/pub/misc/openstreetmap/FOSS4G-2016/foss4g-2016-1146-an_overview_of_docker_images_for_geospatial_applications-hd.mp4)\n\n[comment]: \u003c\u003e (... generell mehr adden, vor allem zu Docker Compose)\n## deegree resources\n\n* [https://github.com/deegree/deegree3](https://github.com/deegree/deegree3)\n* [https://www.deegree.org](https://www.deegree.org)\n* [https://www.osgeo.org/projects/deegree/](https://www.osgeo.org/projects/deegree/)\n* [https://www.fossgis.de/aktivit%c3%a4ten/langzeitf%c3%b6rderungen/deegree/](https://www.fossgis.de/aktivit%c3%a4ten/langzeitf%c3%b6rderungen/deegree/)\n\n### Documentation 3.5.x (current)\n\n* [https://download.deegree.org/documentation/current/html/](https://download.deegree.org/documentation/current/html/) \n\n### Documentation 3.4.x\n\n* [https://download.deegree.org/documentation/3.4.35/html/](https://download.deegree.org/documentation/3.4.35/html/)\n\n### deegree on Docker Hub\n\n* [https://hub.docker.com/r/deegree/deegree3-docker/](https://hub.docker.com/r/deegree/deegree3-docker/)\n\n### deegree End of Life (EOL) and Support Matrix\n\n* [https://github.com/deegree/deegree3/wiki/End-of-Life-and-Support-Matrix](https://github.com/deegree/deegree3/wiki/End-of-Life-and-Support-Matrix)\n\n## OGC CITE TEAM Engine\n\n### TEAM Engine on Docker Image Testsuite\n\n* [https://cite.opengeospatial.org/teamengine/](https://cite.opengeospatial.org/teamengine/)\n\n### TEAM Engine Documentation and Info\n\n* [https://github.com/opengeospatial/teamengine](https://github.com/opengeospatial/teamengine)\n* [https://opengeospatial.github.io/teamengine/](http://opengeospatial.github.io/teamengine/)\n* [https://github.com/opengeospatial/cite/wiki](https://github.com/opengeospatial/cite/wiki)\n\n### TEAM Engine Docker Image\n\n* [https://github.com/opengeospatial/teamengine-docker](https://github.com/opengeospatial/teamengine-docker)\n\n## INSPIRE resources\n\n### General Information about INSPIRE\n\n* [https://knowledge-base.inspire.ec.europa.eu/index_en](https://knowledge-base.inspire.ec.europa.eu/index_en)\n\n### INSPIRE Reference Validator\n\n[https://inspire.ec.europa.eu/validator/home/index.html](https://inspire.ec.europa.eu/validator/home/index.html)\n\n#### Slides and Videos for the INSPIRE Reference Validator\n\n* [https://www.youtube.com/watch?v=BVWxWuo9X5g\u0026list=PLtvJPnZpinhfv3HXkjAOEbTTCSSEE5d7E](https://www.youtube.com/watch?v=BVWxWuo9X5g\u0026list=PLtvJPnZpinhfv3HXkjAOEbTTCSSEE5d7E)\n* [https://github.com/INSPIRE-MIF/helpdesk-validator/tree/master/training%20material/2024-05-31%20JRC%20Training](https://github.com/INSPIRE-MIF/helpdesk-validator/tree/master/training%20material/2024-05-31%20JRC%20Training)\n\n### INSPIRE Data specifications\n\n* [https://github.com/INSPIRE-MIF/technical-guidelines/tree/main/data/](https://github.com/INSPIRE-MIF/technical-guidelines/tree/main/data/)\n* [https://knowledge-base.inspire.ec.europa.eu/publications/inspire-data-specification-protected-sites-technical-guidelines_en](https://knowledge-base.inspire.ec.europa.eu/publications/inspire-data-specification-protected-sites-technical-guidelines_en)\n\n### INSPIRE Data Transformation with HALE\n\n[comment]: \u003c\u003e (ToDo)\n\n### INSPIRE in Practice (Geoportal)\n\n* [https://inspire-geoportal.ec.europa.eu/srv/eng/catalog.search#/home](https://inspire-geoportal.ec.europa.eu/srv/eng/catalog.search#/home)\n\n## OSGeo resources\n\n* [https://www.osgeo.org/](https://www.osgeo.org/)\n* [https://www.osgeo.org/projects/deegree/](https://www.osgeo.org/projects/deegree/)\n* [https://wiki.osgeo.org/wiki/DockerImages](https://wiki.osgeo.org/wiki/DockerImages)\n* [https://wiki.osgeo.org/wiki/INSPIRE](https://wiki.osgeo.org/wiki/INSPIRE)\n* [https://wiki.osgeo.org/wiki/INSPIRE_tools_inventory](https://wiki.osgeo.org/wiki/INSPIRE_tools_inventory)\n\n### OpenStreet Map, Open Data and public spatial services\n\n[comment]: \u003c\u003e (ToDo)\n\n# License\n\nThis document is published under creative commons license.\n\n[Attribution - Non Commercial - Share Alike -  4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flat-lon%2Fdeegree-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flat-lon%2Fdeegree-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flat-lon%2Fdeegree-workshop/lists"}