diff --git a/docs/getting-started.md b/docs/getting-started.md
index e57b52253786d1cf2d075d5857cd78cfcfbcba3d..0c7d4aca6535b0acc3fcb4cd4f9b24e85c0bed88 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -31,6 +31,8 @@ Install [:fontawesome-brands-docker: Docker Engine](https://docs.docker.com/engi
 
 We currently maintain 14 images on [Dockerhub](https://hub.docker.com/u/dbrepo).
 
+### Docker
+
 === ":fontawesome-brands-linux: Linux"
 
     Download the latest [`docker-compose.yml`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml) 
@@ -76,6 +78,22 @@ We currently maintain 14 images on [Dockerhub](https://hub.docker.com/u/dbrepo).
 The system is auto-configured for a small, local, test deployment. You need to place the `.env` file in the same
 directory as the `docker-compose.yml`.
 
+### Firewall
+
+Make sure the following ports can pass through your firewall from the open Internet `0.0.0.0/0`:
+
+* `80/tcp` for the frontend, will be redirected when a SSL/TLS certificate is installed
+* `443/tcp` for the frontend
+* `9095/tcp` for the Gateway Service, exposing the HTTP API
+* `5672/tcp` for the AMQP API
+
+Activate them both in your virtualization infrastructure and the local firewall on your virtual machine:
+
+```console
+# firewall-cmd --add-port="{80/tcp,443/tcp,9095/tcp,5672/tcp}" --permanent
+# firewall-cmd --reload
+```
+
 ## Development
 
 We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by
diff --git a/site/404.html b/site/404.html
index c9fc994423c2368429ff766380f99980007e39a6..22f2fd2bd19d97aa6eabdd36c0745ff6cf1db03a 100644
--- a/site/404.html
+++ b/site/404.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="/images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -113,7 +113,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/contact/index.html b/site/contact/index.html
index 36c3a0b4713a156a128bf472caf6e72bff608ecf..95245bd7f0d74001be61d0b8f76c392286707e2f 100644
--- a/site/contact/index.html
+++ b/site/contact/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/getting-started/index.html b/site/getting-started/index.html
index c9cba16fbda7aa7e5b1345f5447991776316fadf..da36a4dce664dc82b1a2e7b45617f355314e51ca 100644
--- a/site/getting-started/index.html
+++ b/site/getting-started/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
@@ -409,6 +409,26 @@
     Deployment
   </a>
   
+    <nav class="md-nav" aria-label="Deployment">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#docker" class="md-nav__link">
+    Docker
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#firewall" class="md-nav__link">
+    Firewall
+  </a>
+  
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
         <li class="md-nav__item">
@@ -613,6 +633,26 @@
     Deployment
   </a>
   
+    <nav class="md-nav" aria-label="Deployment">
+      <ul class="md-nav__list">
+        
+          <li class="md-nav__item">
+  <a href="#docker" class="md-nav__link">
+    Docker
+  </a>
+  
+</li>
+        
+          <li class="md-nav__item">
+  <a href="#firewall" class="md-nav__link">
+    Firewall
+  </a>
+  
+</li>
+        
+      </ul>
+    </nav>
+  
 </li>
       
         <li class="md-nav__item">
@@ -675,6 +715,7 @@ local, test deployment for quickly trying out the features that the repository o
 <p>Install <a href="https://docs.docker.com/engine/install/"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"/></svg></span> Docker Engine</a> for your OS.</p>
 <h2 id="deployment">Deployment<a class="headerlink" href="#deployment" title="Permanent link">&para;</a></h2>
 <p>We currently maintain 14 images on <a href="https://hub.docker.com/u/dbrepo">Dockerhub</a>.</p>
+<h3 id="docker">Docker<a class="headerlink" href="#docker" title="Permanent link">&para;</a></h3>
 <div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"/></svg></span> Linux</label><label for="__tabbed_1_2"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg></span> macOS</label></div>
 <div class="tabbed-content">
 <div class="tabbed-block">
@@ -701,6 +742,18 @@ $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-se
 </div>
 <p>The system is auto-configured for a small, local, test deployment. You need to place the <code>.env</code> file in the same
 directory as the <code>docker-compose.yml</code>.</p>
+<h3 id="firewall">Firewall<a class="headerlink" href="#firewall" title="Permanent link">&para;</a></h3>
+<p>Make sure the following ports can pass through your firewall from the open Internet <code>0.0.0.0/0</code>:</p>
+<ul>
+<li><code>80/tcp</code> for the frontend, will be redirected when a SSL/TLS certificate is installed</li>
+<li><code>443/tcp</code> for the frontend</li>
+<li><code>9095/tcp</code> for the Gateway Service, exposing the HTTP API</li>
+<li><code>5672/tcp</code> for the AMQP API</li>
+</ul>
+<p>Activate them both in your virtualization infrastructure and the local firewall on your virtual machine:</p>
+<div class="highlight"><pre><span></span><code><span class="gp"># </span>firewall-cmd --add-port<span class="o">=</span><span class="s2">&quot;{80/tcp,443/tcp,9095/tcp,5672/tcp}&quot;</span> --permanent
+<span class="gp"># </span>firewall-cmd --reload
+</code></pre></div>
 <h2 id="development">Development<a class="headerlink" href="#development" title="Permanent link">&para;</a></h2>
 <p>We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by
 sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. Clone the repository and create a feature branch
diff --git a/site/index.html b/site/index.html
index 9d506c9db63e07d2e075500c156cda371320425e..92cec1eb8288fb8e5ac26954bc0e1d8d2912806b 100644
--- a/site/index.html
+++ b/site/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/operation/index.html b/site/operation/index.html
index 15f6e50002aa51f2e04636f7fdf67d2a33c1f6a0..61fe30201a8c697979734d736de9cb1126a45a61 100644
--- a/site/operation/index.html
+++ b/site/operation/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/operation/production/index.html b/site/operation/production/index.html
index 84684266132f4b1738cb5036a842ea7336b7b025..7bceb85cc3ba39ccd4d34bc2ddb99df47923cde1 100644
--- a/site/operation/production/index.html
+++ b/site/operation/production/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/publications/index.html b/site/publications/index.html
index 545d20d4bbec77b029d337727cf97cf348ca9be5..1b160e533b041190302e01958d4ca7aea1a59640 100644
--- a/site/publications/index.html
+++ b/site/publications/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>
diff --git a/site/search/search_index.json b/site/search/search_index.json
index 3f3a50e855f45bdc38a097d03bd780ffc8c47e31..01787ebc5e5a6484f532ab8fbdb9d8a539981890 100644
--- a/site/search/search_index.json
+++ b/site/search/search_index.json
@@ -1 +1 @@
-{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"DBRepo: A Database Repository to Support Research \u00b6 Problem Statement \u00b6 Digital repositories see themselves more frequently encountered with the problem of making databases accessible in their collection. Challenges revolve around organizing, searching and retrieving content stored within databases and constitute a major technical burden as their internal representation greatly differs from static documents most digital repositories are designed for. Get Started Application Areas \u00b6 We present a database repository system that allows researchers to ingest data into a central, versioned repository through common interfaces, provides efficient access to arbitrary subsets of data even when the underlying data store is evolving, allows reproducing of query results and supports findable-, accessible-, interoperable- and reusable data. More Information \u00b6 Public demonstration instance https://dbrepo.ossdip.at Join our mailing list to receive bi-monthly updates about the progress, new features and events! video { max-width: 100%; } #teaser-preview { width: 50%; } .hidden { display: none; }","title":"Home"},{"location":"#dbrepo-a-database-repository-to-support-research","text":"","title":"DBRepo: A Database Repository to Support Research"},{"location":"#problem-statement","text":"Digital repositories see themselves more frequently encountered with the problem of making databases accessible in their collection. Challenges revolve around organizing, searching and retrieving content stored within databases and constitute a major technical burden as their internal representation greatly differs from static documents most digital repositories are designed for. Get Started","title":"Problem Statement"},{"location":"#application-areas","text":"We present a database repository system that allows researchers to ingest data into a central, versioned repository through common interfaces, provides efficient access to arbitrary subsets of data even when the underlying data store is evolving, allows reproducing of query results and supports findable-, accessible-, interoperable- and reusable data.","title":"Application Areas"},{"location":"#more-information","text":"Public demonstration instance https://dbrepo.ossdip.at Join our mailing list to receive bi-monthly updates about the progress, new features and events! video { max-width: 100%; } #teaser-preview { width: 50%; } .hidden { display: none; }","title":"More Information"},{"location":"contact/","text":"Contact \u00b6 Team \u00b6 Project \u00b6 Ao.univ.Prof. Dr. Andreas Rauber Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria Development \u00b6 Projektass. Dipl.-Ing. Martin Weise Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria Contributors \u00b6 Martin Weise Moritz Staudinger Cornelia Michlits Eva Gergely Kirill Stytsenko Raman Ganguly Andreas Rauber","title":"Contact"},{"location":"contact/#contact","text":"","title":"Contact"},{"location":"contact/#team","text":"","title":"Team"},{"location":"contact/#project","text":"Ao.univ.Prof. Dr. Andreas Rauber Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria","title":"Project"},{"location":"contact/#development","text":"Projektass. Dipl.-Ing. Martin Weise Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria","title":"Development"},{"location":"contact/#contributors","text":"Martin Weise Moritz Staudinger Cornelia Michlits Eva Gergely Kirill Stytsenko Raman Ganguly Andreas Rauber","title":"Contributors"},{"location":"getting-started/","text":"Getting Started \u00b6 Abstract In this short getting started guide we show the dependencies to run the database repository and perform a small, local, test deployment for quickly trying out the features that the repository offers. Requirements \u00b6 Hardware \u00b6 For this small, local, test deployment any modern hardware would suffice, we recommend a machine with at least: 8 Cores (can be virtual cores) 16GB RAM 100GB SSD memory Fast internet connection Software \u00b6 Install Docker Engine for your OS. Deployment \u00b6 We currently maintain 14 images on Dockerhub . Linux macOS Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d The system is auto-configured for a small, local, test deployment. You need to place the .env file in the same directory as the docker-compose.yml . Development \u00b6 We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. Clone the repository and create a feature branch from dev and implement your changes. Software \u00b6 We develop all packages with the following software requirements: Java OpenJDK 11 Maven 3.0.0+ Node.js 14+ Yarn 1.21.0+ Postgres 12+ MariaDB 10+ Building \u00b6 For local development you need to install the entities from the metadata database and the general DTOs that are exchanged between the services by installing the package: mvn -f ./fda-metadata-db/pom.xml clean install All other services depend on this package. You have to build them later: mvn -f ./fda-container-service/pom.xml clean package -DskipTests ... Conviniently, you can build them all through make : make build-backend","title":"Getting Started"},{"location":"getting-started/#getting-started","text":"Abstract In this short getting started guide we show the dependencies to run the database repository and perform a small, local, test deployment for quickly trying out the features that the repository offers.","title":"Getting Started"},{"location":"getting-started/#requirements","text":"","title":"Requirements"},{"location":"getting-started/#hardware","text":"For this small, local, test deployment any modern hardware would suffice, we recommend a machine with at least: 8 Cores (can be virtual cores) 16GB RAM 100GB SSD memory Fast internet connection","title":"Hardware"},{"location":"getting-started/#software","text":"Install Docker Engine for your OS.","title":"Software"},{"location":"getting-started/#deployment","text":"We currently maintain 14 images on Dockerhub . Linux macOS Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d The system is auto-configured for a small, local, test deployment. You need to place the .env file in the same directory as the docker-compose.yml .","title":"Deployment"},{"location":"getting-started/#development","text":"We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. Clone the repository and create a feature branch from dev and implement your changes.","title":"Development"},{"location":"getting-started/#software_1","text":"We develop all packages with the following software requirements: Java OpenJDK 11 Maven 3.0.0+ Node.js 14+ Yarn 1.21.0+ Postgres 12+ MariaDB 10+","title":"Software"},{"location":"getting-started/#building","text":"For local development you need to install the entities from the metadata database and the general DTOs that are exchanged between the services by installing the package: mvn -f ./fda-metadata-db/pom.xml clean install All other services depend on this package. You have to build them later: mvn -f ./fda-container-service/pom.xml clean package -DskipTests ... Conviniently, you can build them all through make : make build-backend","title":"Building"},{"location":"publications/","text":"Publications \u00b6 Refereed \u00b6 2022 \u00b6 Weise, M., Staudinger, M., Michlits, C., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2022. A Semantic Digital Repository for Relational Databases, [accepted] in Proceedings of the 17th International Digital Curation Conference , (Virtual). 2021 \u00b6 Weise, M., Michlits, C., Staudinger, M., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2021. FDA-DBRepo: A Data Preservation Repository Supporting FAIR Principles, Data Versioning and Reproducible Queries. Proceedings of the 17th International Conference on Digital Preservation , Beijing, China, p.34. DOI: 10.17605/OSF.IO/B7NX5 Other \u00b6 Staudinger, M., 2022. DBRepo: A Repository to Save Research Databases. [Online]. URL: https://www.tuwien.at/en/tu-wien/news/news-articles/news/dbrepo accessed 2022-04-12 Gergely, E., 2021. Better Support for Research: Current Cooperation Projects. [Online]. URL: https://zid.univie.ac.at/it-news/artikel/news/cluster-forschungsdaten/ accessed 2022-04-12","title":"Publications"},{"location":"publications/#publications","text":"","title":"Publications"},{"location":"publications/#refereed","text":"","title":"Refereed"},{"location":"publications/#2022","text":"Weise, M., Staudinger, M., Michlits, C., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2022. A Semantic Digital Repository for Relational Databases, [accepted] in Proceedings of the 17th International Digital Curation Conference , (Virtual).","title":"2022"},{"location":"publications/#2021","text":"Weise, M., Michlits, C., Staudinger, M., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2021. FDA-DBRepo: A Data Preservation Repository Supporting FAIR Principles, Data Versioning and Reproducible Queries. Proceedings of the 17th International Conference on Digital Preservation , Beijing, China, p.34. DOI: 10.17605/OSF.IO/B7NX5","title":"2021"},{"location":"publications/#other","text":"Staudinger, M., 2022. DBRepo: A Repository to Save Research Databases. [Online]. URL: https://www.tuwien.at/en/tu-wien/news/news-articles/news/dbrepo accessed 2022-04-12 Gergely, E., 2021. Better Support for Research: Current Cooperation Projects. [Online]. URL: https://zid.univie.ac.at/it-news/artikel/news/cluster-forschungsdaten/ accessed 2022-04-12","title":"Other"},{"location":"system/","text":"System \u00b6 Architecture \u00b6 The repository is designed as a microservice architecture to ensure scalability and the utilization of various technologies. The conceptualized microservices operate the basic database operations, data versioning as well as findability , accessability , interoperability and reuseability (FAIR). Database \u00b6 This container runs a relational database engine that allows data versioning and contains the Query Store, a special table that stores all queries issued to the Researcher Database along with metadata. We store the queries here and not in the metadata database level to ensure that they are preserved along with the original database for a regular backup and archival together with the original database once the container is retired. Container \u00b6 Currently, we only support databases with the MariaDB engine . DBRepo creates a root user for managing the tables, inserting data, etc. and provides a mariadb user that is only granted select access to all tables. The default passwords need to be changed at AbstractSeeder.java Query Store \u00b6 The Query Store is a special table ( qs_queries ) that stores all queries issued to the database via the HTTP API. It stores meta-information about the queries directly in the database container: Name Type Constraint Default Comment id bigint primary key nextval(qs_queries_seq) cid bigint Column ID dbid bigint Database ID created datetime now() created_by bigint Creator User-ID execution datetime last_modified datetime query text query_normalized text removing *, randomness query_hash varchar(255) sha256 hash of query field result_hash varchar(255) sha256 hash of the result set result_number bigint Query Store table qs_queries schema Services \u00b6 Discovery Service \u00b6 This microservice allows service discovery and registration of containers that provide services. It configures a Spring Cloud Netflix Eureka Server to discover services. Debug Information Port(s): 9090 Swagger: not configured Gateway Service \u00b6 Provides a single point of access to the application programming interface (API) and configures the Spring Cloud Gateway to route traffic to the services. Debug Information Port(s): 9095 Swagger: not configured Microservice cloud architecture Authentication Service \u00b6 Very specific to the deployment of the organization. In our reference implementation we implement a security assertion markup language (SAML) service provider and use our institutional SAML identity provider for obtaining account data through an encrypted channel. The Authentication Service configures Spring Boot Starter Security with Java JWT for internal authentication once the user details are known in the metadata database. By default, a token is valid for 24 hours and is used on all HTTP API endpoints. For the HTTP API , obtaining a new token can be done via, e.g. cURL. $ curl -X POST -d '{\"username\":\"username\",\"password\":\"password\"}' -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth Call a secured method by setting the JWT Token as Bearer Token via, e.g. cURL. $ curl -X PUT -H \"Authorization: Bearer TOKEN\" -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth For the AMQP API , the Authentication Service also creates a dedicated user at the Broker Service that has permissions for writing and configuring the RabbitMQ queues that feed into the database owned by this user. Debug Information Port(s): 9097 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/authentication-service Swagger API .yaml: /v3/api-docs.yaml Metadata Database \u00b6 It is the core component of the project. It is a relational database that contains metadata about all researcher databases created in the database repository like column names, check expressions, value enumerations or key/value constraints and relevant data for citing data sets. Additionally, the concept, e.g. URI of units of measurements of numerical columns is stored in the Metadata Database in order to provide semantic knowledge context. We use PostgreSQL for its rich capabilities in the reference implementation. The default credentials are postgres:postgres for the database fda . Connect to the database via, e.g. psql . $ psql -d fda -h localhost -p 5432 -U postgres -W Debug Information Port(s): 5432 Swagger: not configured Unit Service \u00b6 It is designed to map terms in the domain of units of measurement to controlled vocabulary, modelled in the ontology of units of measure . This service validates researcher provided in units and provides a uniform resource identifier (URI) to the related concept, which will be stored in the system. Furthermore, there is a method for auto-completing text and listing a description as well as commonly used unit symbols. The Unit Service reads units of measurement from om-2.ttl and registers a unit. It is used to assign a unit of measurement to a table column. For the HTTP API , the Unit Service assigns a unit of measurement via, e.g. cURL. First the list of concepts can be queried. $ curl -X POST -d '{\"offset\":0,\"ustring\":\"met\"}' https://dbrepo.ossdip.at/api/units/suggest Then the concept needs to be saved into the metadata database. $ curl -X POST -d '{\"name\":\"metre\",\"uri\":...}' https://dbrepo.ossdip.at/api/units/saveconcept Then the column can be assigned to a table column. $ curl -X POST -d '{\"cdbid\":1,\"tid\":1,\"cid\":1,\"uri\":...}' https://dbrepo.ossdip.at/api/units/savecolumnsconcept Debug Information Port(s): 5010 Swagger UI: /swagger-ui/ Swagger API .json: /api-units.json Identifier Service \u00b6 This microservice is responsible for creating and resolving a persistent identifier (PID) attached to a query to obtain the metadata attached to it and allow re-execution of a query. We store both the query and hashes of the query and result set to allow equality checks of the originally obtained result set and the currently obtained result set. In the reference implementation we currently only use a numerical id column and plan to integrate digital object identifier (DOI) through our institutional library soon. Debug Information Port(s): 9096 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/identifier-service Swagger API .yaml: /v3/api-docs.yaml Search Service \u00b6 It processes search requests from the Gateway Service for full-text lookups in the Metadata Database. We use Elasticsearch in the reference implementation. The Search Service implements ElasticSearch and creates a retrievable index on all databases that is getting updated with each save operation on databases in the metadata database. The database name can be queried with ElasticSearch to e.g. match the term \"Airquality\" $ curl http://localhost:9200/databaseindex/_search?q = name:Airquality Debug Information Port(s): 9200, 9600 ElasticSearch: /databaseindex Container Service \u00b6 It is responsible for Docker container lifecycle operations and updating the local copy of the Docker images. Debug Information Port(s): 9091 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/container-service Swagger API .yaml: /v3/api-docs.yaml Database Service \u00b6 It creates the databases inside a Docker container and the Query Store. Currently we only support MariaDB images that allow table versioning with low programmatic effort. Debug Information Port(s): 9092 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/database-service Swagger API .yaml: /v3/api-docs.yaml Table Service \u00b6 This microservice handles table operations inside a database that is managed by the Database Service. We use Hibernate for schema and data ingest operations. Debug Information Port(s): 9094 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/table-service Swagger API .yaml: /v3/api-docs.yaml Broker Service \u00b6 It holds exchanges and topics responsible for holding AMQP messages for later consumption. We use RabbitMQ in the reference implementation. For the HTTP API , the Broker Service offers an endpoint to manage the AMQP users and their permissions on exchanges and queues. This endpoint is reachable via the Gateway Service or at port 9098 directly. Internally this service just parses commands to the rabbitmqctl . For the AMQP API , the Broker Service can declare exchanges and queues. The AMQP endpoint listens to port 5672 for regular declares and offers a management interface at port 15672. Debug Information Port(s): 9098, 5672, 15672 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/broker-service Swagger API .yaml: /v3/api-docs.yaml RabbitMQ Management: /# Query Service \u00b6 It provides an interface to insert data into the tables created by the Table Service. It also allows for view-only, paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker Service. Debug Information Port(s): 9093 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/query-service Swagger API .yaml: /v3/api-docs.yaml FAIR Portal \u00b6 It provides a graphical user interface (GUI) for a researcher to interact with the database repository's API. Debug Information Port(s): 3000 GUI: /# Analyse Service \u00b6 It suggests data types for the FAIR Portal when creating a table from a comma separated values (CSV) file. It recommends enumerations for columns and returns e.g. a list of potential primary key candidates. The researcher is able to confirm these suggestions manually. Moreover, the Analyze Service determines basic statistical properties of numerical columns. Debug Information Port(s): 5000 Swagger UI: /swagger-ui/ Swagger API .json: /api-analyze.json","title":"System"},{"location":"system/#system","text":"","title":"System"},{"location":"system/#architecture","text":"The repository is designed as a microservice architecture to ensure scalability and the utilization of various technologies. The conceptualized microservices operate the basic database operations, data versioning as well as findability , accessability , interoperability and reuseability (FAIR).","title":"Architecture"},{"location":"system/#database","text":"This container runs a relational database engine that allows data versioning and contains the Query Store, a special table that stores all queries issued to the Researcher Database along with metadata. We store the queries here and not in the metadata database level to ensure that they are preserved along with the original database for a regular backup and archival together with the original database once the container is retired.","title":"Database"},{"location":"system/#container","text":"Currently, we only support databases with the MariaDB engine . DBRepo creates a root user for managing the tables, inserting data, etc. and provides a mariadb user that is only granted select access to all tables. The default passwords need to be changed at AbstractSeeder.java","title":"Container"},{"location":"system/#query-store","text":"The Query Store is a special table ( qs_queries ) that stores all queries issued to the database via the HTTP API. It stores meta-information about the queries directly in the database container: Name Type Constraint Default Comment id bigint primary key nextval(qs_queries_seq) cid bigint Column ID dbid bigint Database ID created datetime now() created_by bigint Creator User-ID execution datetime last_modified datetime query text query_normalized text removing *, randomness query_hash varchar(255) sha256 hash of query field result_hash varchar(255) sha256 hash of the result set result_number bigint Query Store table qs_queries schema","title":"Query Store"},{"location":"system/#services","text":"","title":"Services"},{"location":"system/#discovery-service","text":"This microservice allows service discovery and registration of containers that provide services. It configures a Spring Cloud Netflix Eureka Server to discover services. Debug Information Port(s): 9090 Swagger: not configured","title":"Discovery Service"},{"location":"system/#gateway-service","text":"Provides a single point of access to the application programming interface (API) and configures the Spring Cloud Gateway to route traffic to the services. Debug Information Port(s): 9095 Swagger: not configured Microservice cloud architecture","title":"Gateway Service"},{"location":"system/#authentication-service","text":"Very specific to the deployment of the organization. In our reference implementation we implement a security assertion markup language (SAML) service provider and use our institutional SAML identity provider for obtaining account data through an encrypted channel. The Authentication Service configures Spring Boot Starter Security with Java JWT for internal authentication once the user details are known in the metadata database. By default, a token is valid for 24 hours and is used on all HTTP API endpoints. For the HTTP API , obtaining a new token can be done via, e.g. cURL. $ curl -X POST -d '{\"username\":\"username\",\"password\":\"password\"}' -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth Call a secured method by setting the JWT Token as Bearer Token via, e.g. cURL. $ curl -X PUT -H \"Authorization: Bearer TOKEN\" -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth For the AMQP API , the Authentication Service also creates a dedicated user at the Broker Service that has permissions for writing and configuring the RabbitMQ queues that feed into the database owned by this user. Debug Information Port(s): 9097 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/authentication-service Swagger API .yaml: /v3/api-docs.yaml","title":"Authentication Service"},{"location":"system/#metadata-database","text":"It is the core component of the project. It is a relational database that contains metadata about all researcher databases created in the database repository like column names, check expressions, value enumerations or key/value constraints and relevant data for citing data sets. Additionally, the concept, e.g. URI of units of measurements of numerical columns is stored in the Metadata Database in order to provide semantic knowledge context. We use PostgreSQL for its rich capabilities in the reference implementation. The default credentials are postgres:postgres for the database fda . Connect to the database via, e.g. psql . $ psql -d fda -h localhost -p 5432 -U postgres -W Debug Information Port(s): 5432 Swagger: not configured","title":"Metadata Database"},{"location":"system/#unit-service","text":"It is designed to map terms in the domain of units of measurement to controlled vocabulary, modelled in the ontology of units of measure . This service validates researcher provided in units and provides a uniform resource identifier (URI) to the related concept, which will be stored in the system. Furthermore, there is a method for auto-completing text and listing a description as well as commonly used unit symbols. The Unit Service reads units of measurement from om-2.ttl and registers a unit. It is used to assign a unit of measurement to a table column. For the HTTP API , the Unit Service assigns a unit of measurement via, e.g. cURL. First the list of concepts can be queried. $ curl -X POST -d '{\"offset\":0,\"ustring\":\"met\"}' https://dbrepo.ossdip.at/api/units/suggest Then the concept needs to be saved into the metadata database. $ curl -X POST -d '{\"name\":\"metre\",\"uri\":...}' https://dbrepo.ossdip.at/api/units/saveconcept Then the column can be assigned to a table column. $ curl -X POST -d '{\"cdbid\":1,\"tid\":1,\"cid\":1,\"uri\":...}' https://dbrepo.ossdip.at/api/units/savecolumnsconcept Debug Information Port(s): 5010 Swagger UI: /swagger-ui/ Swagger API .json: /api-units.json","title":"Unit Service"},{"location":"system/#identifier-service","text":"This microservice is responsible for creating and resolving a persistent identifier (PID) attached to a query to obtain the metadata attached to it and allow re-execution of a query. We store both the query and hashes of the query and result set to allow equality checks of the originally obtained result set and the currently obtained result set. In the reference implementation we currently only use a numerical id column and plan to integrate digital object identifier (DOI) through our institutional library soon. Debug Information Port(s): 9096 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/identifier-service Swagger API .yaml: /v3/api-docs.yaml","title":"Identifier Service"},{"location":"system/#search-service","text":"It processes search requests from the Gateway Service for full-text lookups in the Metadata Database. We use Elasticsearch in the reference implementation. The Search Service implements ElasticSearch and creates a retrievable index on all databases that is getting updated with each save operation on databases in the metadata database. The database name can be queried with ElasticSearch to e.g. match the term \"Airquality\" $ curl http://localhost:9200/databaseindex/_search?q = name:Airquality Debug Information Port(s): 9200, 9600 ElasticSearch: /databaseindex","title":"Search Service"},{"location":"system/#container-service","text":"It is responsible for Docker container lifecycle operations and updating the local copy of the Docker images. Debug Information Port(s): 9091 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/container-service Swagger API .yaml: /v3/api-docs.yaml","title":"Container Service"},{"location":"system/#database-service","text":"It creates the databases inside a Docker container and the Query Store. Currently we only support MariaDB images that allow table versioning with low programmatic effort. Debug Information Port(s): 9092 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/database-service Swagger API .yaml: /v3/api-docs.yaml","title":"Database Service"},{"location":"system/#table-service","text":"This microservice handles table operations inside a database that is managed by the Database Service. We use Hibernate for schema and data ingest operations. Debug Information Port(s): 9094 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/table-service Swagger API .yaml: /v3/api-docs.yaml","title":"Table Service"},{"location":"system/#broker-service","text":"It holds exchanges and topics responsible for holding AMQP messages for later consumption. We use RabbitMQ in the reference implementation. For the HTTP API , the Broker Service offers an endpoint to manage the AMQP users and their permissions on exchanges and queues. This endpoint is reachable via the Gateway Service or at port 9098 directly. Internally this service just parses commands to the rabbitmqctl . For the AMQP API , the Broker Service can declare exchanges and queues. The AMQP endpoint listens to port 5672 for regular declares and offers a management interface at port 15672. Debug Information Port(s): 9098, 5672, 15672 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/broker-service Swagger API .yaml: /v3/api-docs.yaml RabbitMQ Management: /#","title":"Broker Service"},{"location":"system/#query-service","text":"It provides an interface to insert data into the tables created by the Table Service. It also allows for view-only, paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker Service. Debug Information Port(s): 9093 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/query-service Swagger API .yaml: /v3/api-docs.yaml","title":"Query Service"},{"location":"system/#fair-portal","text":"It provides a graphical user interface (GUI) for a researcher to interact with the database repository's API. Debug Information Port(s): 3000 GUI: /#","title":"FAIR Portal"},{"location":"system/#analyse-service","text":"It suggests data types for the FAIR Portal when creating a table from a comma separated values (CSV) file. It recommends enumerations for columns and returns e.g. a list of potential primary key candidates. The researcher is able to confirm these suggestions manually. Moreover, the Analyze Service determines basic statistical properties of numerical columns. Debug Information Port(s): 5000 Swagger UI: /swagger-ui/ Swagger API .json: /api-analyze.json","title":"Analyse Service"},{"location":"operation/","text":"Operation \u00b6 Abstract We compiled a short getting started guide that quickly allows a stand-alone test-deployment of the infrastructure on your server without the need of infrastructure configuration.","title":"Operation"},{"location":"operation/#operation","text":"Abstract We compiled a short getting started guide that quickly allows a stand-alone test-deployment of the infrastructure on your server without the need of infrastructure configuration.","title":"Operation"},{"location":"operation/production/","text":"Production \u00b6 Alpha-release software Currently, the database repository is in an alpha-release and not considered secure enough to hold sensitive data. Enroll into our mailing list and be notified every 2-3 months with progress of the software. Friendly users We always welcome friendly users who want to deploy the database repository on their premises and provide continious feedback and create bug reports. We also take their improvement inquiries to improve the software quality. Please contact us.","title":"Production"},{"location":"operation/production/#production","text":"Alpha-release software Currently, the database repository is in an alpha-release and not considered secure enough to hold sensitive data. Enroll into our mailing list and be notified every 2-3 months with progress of the software. Friendly users We always welcome friendly users who want to deploy the database repository on their premises and provide continious feedback and create bug reports. We also take their improvement inquiries to improve the software quality. Please contact us.","title":"Production"}]}
\ No newline at end of file
+{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"DBRepo: A Database Repository to Support Research \u00b6 Problem Statement \u00b6 Digital repositories see themselves more frequently encountered with the problem of making databases accessible in their collection. Challenges revolve around organizing, searching and retrieving content stored within databases and constitute a major technical burden as their internal representation greatly differs from static documents most digital repositories are designed for. Get Started Application Areas \u00b6 We present a database repository system that allows researchers to ingest data into a central, versioned repository through common interfaces, provides efficient access to arbitrary subsets of data even when the underlying data store is evolving, allows reproducing of query results and supports findable-, accessible-, interoperable- and reusable data. More Information \u00b6 Public demonstration instance https://dbrepo.ossdip.at Join our mailing list to receive bi-monthly updates about the progress, new features and events! video { max-width: 100%; } #teaser-preview { width: 50%; } .hidden { display: none; }","title":"Home"},{"location":"#dbrepo-a-database-repository-to-support-research","text":"","title":"DBRepo: A Database Repository to Support Research"},{"location":"#problem-statement","text":"Digital repositories see themselves more frequently encountered with the problem of making databases accessible in their collection. Challenges revolve around organizing, searching and retrieving content stored within databases and constitute a major technical burden as their internal representation greatly differs from static documents most digital repositories are designed for. Get Started","title":"Problem Statement"},{"location":"#application-areas","text":"We present a database repository system that allows researchers to ingest data into a central, versioned repository through common interfaces, provides efficient access to arbitrary subsets of data even when the underlying data store is evolving, allows reproducing of query results and supports findable-, accessible-, interoperable- and reusable data.","title":"Application Areas"},{"location":"#more-information","text":"Public demonstration instance https://dbrepo.ossdip.at Join our mailing list to receive bi-monthly updates about the progress, new features and events! video { max-width: 100%; } #teaser-preview { width: 50%; } .hidden { display: none; }","title":"More Information"},{"location":"contact/","text":"Contact \u00b6 Team \u00b6 Project \u00b6 Ao.univ.Prof. Dr. Andreas Rauber Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria Development \u00b6 Projektass. Dipl.-Ing. Martin Weise Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria Contributors \u00b6 Martin Weise Moritz Staudinger Cornelia Michlits Eva Gergely Kirill Stytsenko Raman Ganguly Andreas Rauber","title":"Contact"},{"location":"contact/#contact","text":"","title":"Contact"},{"location":"contact/#team","text":"","title":"Team"},{"location":"contact/#project","text":"Ao.univ.Prof. Dr. Andreas Rauber Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria","title":"Project"},{"location":"contact/#development","text":"Projektass. Dipl.-Ing. Martin Weise Technische Universit\u00e4t Wien Information and Software Engineering Group Favoritenstra\u00dfe 9-11 A-1040 Vienna, Austria","title":"Development"},{"location":"contact/#contributors","text":"Martin Weise Moritz Staudinger Cornelia Michlits Eva Gergely Kirill Stytsenko Raman Ganguly Andreas Rauber","title":"Contributors"},{"location":"getting-started/","text":"Getting Started \u00b6 Abstract In this short getting started guide we show the dependencies to run the database repository and perform a small, local, test deployment for quickly trying out the features that the repository offers. Requirements \u00b6 Hardware \u00b6 For this small, local, test deployment any modern hardware would suffice, we recommend a machine with at least: 8 Cores (can be virtual cores) 16GB RAM 100GB SSD memory Fast internet connection Software \u00b6 Install Docker Engine for your OS. Deployment \u00b6 We currently maintain 14 images on Dockerhub . Docker \u00b6 Linux macOS Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d The system is auto-configured for a small, local, test deployment. You need to place the .env file in the same directory as the docker-compose.yml . Firewall \u00b6 Make sure the following ports can pass through your firewall from the open Internet 0.0.0.0/0 : 80/tcp for the frontend, will be redirected when a SSL/TLS certificate is installed 443/tcp for the frontend 9095/tcp for the Gateway Service, exposing the HTTP API 5672/tcp for the AMQP API Activate them both in your virtualization infrastructure and the local firewall on your virtual machine: # firewall-cmd --add-port = \"{80/tcp,443/tcp,9095/tcp,5672/tcp}\" --permanent # firewall-cmd --reload Development \u00b6 We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. Clone the repository and create a feature branch from dev and implement your changes. Software \u00b6 We develop all packages with the following software requirements: Java OpenJDK 11 Maven 3.0.0+ Node.js 14+ Yarn 1.21.0+ Postgres 12+ MariaDB 10+ Building \u00b6 For local development you need to install the entities from the metadata database and the general DTOs that are exchanged between the services by installing the package: mvn -f ./fda-metadata-db/pom.xml clean install All other services depend on this package. You have to build them later: mvn -f ./fda-container-service/pom.xml clean package -DskipTests ... Conviniently, you can build them all through make : make build-backend","title":"Getting Started"},{"location":"getting-started/#getting-started","text":"Abstract In this short getting started guide we show the dependencies to run the database repository and perform a small, local, test deployment for quickly trying out the features that the repository offers.","title":"Getting Started"},{"location":"getting-started/#requirements","text":"","title":"Requirements"},{"location":"getting-started/#hardware","text":"For this small, local, test deployment any modern hardware would suffice, we recommend a machine with at least: 8 Cores (can be virtual cores) 16GB RAM 100GB SSD memory Fast internet connection","title":"Hardware"},{"location":"getting-started/#software","text":"Install Docker Engine for your OS.","title":"Software"},{"location":"getting-started/#deployment","text":"We currently maintain 14 images on Dockerhub .","title":"Deployment"},{"location":"getting-started/#docker","text":"Linux macOS Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d Download the latest docker-compose.yml and .env $ curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml $ curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example Start the services $ docker-compose up -d The system is auto-configured for a small, local, test deployment. You need to place the .env file in the same directory as the docker-compose.yml .","title":"Docker"},{"location":"getting-started/#firewall","text":"Make sure the following ports can pass through your firewall from the open Internet 0.0.0.0/0 : 80/tcp for the frontend, will be redirected when a SSL/TLS certificate is installed 443/tcp for the frontend 9095/tcp for the Gateway Service, exposing the HTTP API 5672/tcp for the AMQP API Activate them both in your virtualization infrastructure and the local firewall on your virtual machine: # firewall-cmd --add-port = \"{80/tcp,443/tcp,9095/tcp,5672/tcp}\" --permanent # firewall-cmd --reload","title":"Firewall"},{"location":"getting-started/#development","text":"We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. Clone the repository and create a feature branch from dev and implement your changes.","title":"Development"},{"location":"getting-started/#software_1","text":"We develop all packages with the following software requirements: Java OpenJDK 11 Maven 3.0.0+ Node.js 14+ Yarn 1.21.0+ Postgres 12+ MariaDB 10+","title":"Software"},{"location":"getting-started/#building","text":"For local development you need to install the entities from the metadata database and the general DTOs that are exchanged between the services by installing the package: mvn -f ./fda-metadata-db/pom.xml clean install All other services depend on this package. You have to build them later: mvn -f ./fda-container-service/pom.xml clean package -DskipTests ... Conviniently, you can build them all through make : make build-backend","title":"Building"},{"location":"publications/","text":"Publications \u00b6 Refereed \u00b6 2022 \u00b6 Weise, M., Staudinger, M., Michlits, C., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2022. A Semantic Digital Repository for Relational Databases, [accepted] in Proceedings of the 17th International Digital Curation Conference , (Virtual). 2021 \u00b6 Weise, M., Michlits, C., Staudinger, M., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2021. FDA-DBRepo: A Data Preservation Repository Supporting FAIR Principles, Data Versioning and Reproducible Queries. Proceedings of the 17th International Conference on Digital Preservation , Beijing, China, p.34. DOI: 10.17605/OSF.IO/B7NX5 Other \u00b6 Staudinger, M., 2022. DBRepo: A Repository to Save Research Databases. [Online]. URL: https://www.tuwien.at/en/tu-wien/news/news-articles/news/dbrepo accessed 2022-04-12 Gergely, E., 2021. Better Support for Research: Current Cooperation Projects. [Online]. URL: https://zid.univie.ac.at/it-news/artikel/news/cluster-forschungsdaten/ accessed 2022-04-12","title":"Publications"},{"location":"publications/#publications","text":"","title":"Publications"},{"location":"publications/#refereed","text":"","title":"Refereed"},{"location":"publications/#2022","text":"Weise, M., Staudinger, M., Michlits, C., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2022. A Semantic Digital Repository for Relational Databases, [accepted] in Proceedings of the 17th International Digital Curation Conference , (Virtual).","title":"2022"},{"location":"publications/#2021","text":"Weise, M., Michlits, C., Staudinger, M., Gergely, E., Stytsenko, K., Ganguly, R. and Rauber A., 2021. FDA-DBRepo: A Data Preservation Repository Supporting FAIR Principles, Data Versioning and Reproducible Queries. Proceedings of the 17th International Conference on Digital Preservation , Beijing, China, p.34. DOI: 10.17605/OSF.IO/B7NX5","title":"2021"},{"location":"publications/#other","text":"Staudinger, M., 2022. DBRepo: A Repository to Save Research Databases. [Online]. URL: https://www.tuwien.at/en/tu-wien/news/news-articles/news/dbrepo accessed 2022-04-12 Gergely, E., 2021. Better Support for Research: Current Cooperation Projects. [Online]. URL: https://zid.univie.ac.at/it-news/artikel/news/cluster-forschungsdaten/ accessed 2022-04-12","title":"Other"},{"location":"system/","text":"System \u00b6 Architecture \u00b6 The repository is designed as a microservice architecture to ensure scalability and the utilization of various technologies. The conceptualized microservices operate the basic database operations, data versioning as well as findability , accessability , interoperability and reuseability (FAIR). Database \u00b6 This container runs a relational database engine that allows data versioning and contains the Query Store, a special table that stores all queries issued to the Researcher Database along with metadata. We store the queries here and not in the metadata database level to ensure that they are preserved along with the original database for a regular backup and archival together with the original database once the container is retired. Container \u00b6 Currently, we only support databases with the MariaDB engine . DBRepo creates a root user for managing the tables, inserting data, etc. and provides a mariadb user that is only granted select access to all tables. The default passwords need to be changed at AbstractSeeder.java Query Store \u00b6 The Query Store is a special table ( qs_queries ) that stores all queries issued to the database via the HTTP API. It stores meta-information about the queries directly in the database container: Name Type Constraint Default Comment id bigint primary key nextval(qs_queries_seq) cid bigint Column ID dbid bigint Database ID created datetime now() created_by bigint Creator User-ID execution datetime last_modified datetime query text query_normalized text removing *, randomness query_hash varchar(255) sha256 hash of query field result_hash varchar(255) sha256 hash of the result set result_number bigint Query Store table qs_queries schema Services \u00b6 Discovery Service \u00b6 This microservice allows service discovery and registration of containers that provide services. It configures a Spring Cloud Netflix Eureka Server to discover services. Debug Information Port(s): 9090 Swagger: not configured Gateway Service \u00b6 Provides a single point of access to the application programming interface (API) and configures the Spring Cloud Gateway to route traffic to the services. Debug Information Port(s): 9095 Swagger: not configured Microservice cloud architecture Authentication Service \u00b6 Very specific to the deployment of the organization. In our reference implementation we implement a security assertion markup language (SAML) service provider and use our institutional SAML identity provider for obtaining account data through an encrypted channel. The Authentication Service configures Spring Boot Starter Security with Java JWT for internal authentication once the user details are known in the metadata database. By default, a token is valid for 24 hours and is used on all HTTP API endpoints. For the HTTP API , obtaining a new token can be done via, e.g. cURL. $ curl -X POST -d '{\"username\":\"username\",\"password\":\"password\"}' -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth Call a secured method by setting the JWT Token as Bearer Token via, e.g. cURL. $ curl -X PUT -H \"Authorization: Bearer TOKEN\" -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth For the AMQP API , the Authentication Service also creates a dedicated user at the Broker Service that has permissions for writing and configuring the RabbitMQ queues that feed into the database owned by this user. Debug Information Port(s): 9097 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/authentication-service Swagger API .yaml: /v3/api-docs.yaml Metadata Database \u00b6 It is the core component of the project. It is a relational database that contains metadata about all researcher databases created in the database repository like column names, check expressions, value enumerations or key/value constraints and relevant data for citing data sets. Additionally, the concept, e.g. URI of units of measurements of numerical columns is stored in the Metadata Database in order to provide semantic knowledge context. We use PostgreSQL for its rich capabilities in the reference implementation. The default credentials are postgres:postgres for the database fda . Connect to the database via, e.g. psql . $ psql -d fda -h localhost -p 5432 -U postgres -W Debug Information Port(s): 5432 Swagger: not configured Unit Service \u00b6 It is designed to map terms in the domain of units of measurement to controlled vocabulary, modelled in the ontology of units of measure . This service validates researcher provided in units and provides a uniform resource identifier (URI) to the related concept, which will be stored in the system. Furthermore, there is a method for auto-completing text and listing a description as well as commonly used unit symbols. The Unit Service reads units of measurement from om-2.ttl and registers a unit. It is used to assign a unit of measurement to a table column. For the HTTP API , the Unit Service assigns a unit of measurement via, e.g. cURL. First the list of concepts can be queried. $ curl -X POST -d '{\"offset\":0,\"ustring\":\"met\"}' https://dbrepo.ossdip.at/api/units/suggest Then the concept needs to be saved into the metadata database. $ curl -X POST -d '{\"name\":\"metre\",\"uri\":...}' https://dbrepo.ossdip.at/api/units/saveconcept Then the column can be assigned to a table column. $ curl -X POST -d '{\"cdbid\":1,\"tid\":1,\"cid\":1,\"uri\":...}' https://dbrepo.ossdip.at/api/units/savecolumnsconcept Debug Information Port(s): 5010 Swagger UI: /swagger-ui/ Swagger API .json: /api-units.json Identifier Service \u00b6 This microservice is responsible for creating and resolving a persistent identifier (PID) attached to a query to obtain the metadata attached to it and allow re-execution of a query. We store both the query and hashes of the query and result set to allow equality checks of the originally obtained result set and the currently obtained result set. In the reference implementation we currently only use a numerical id column and plan to integrate digital object identifier (DOI) through our institutional library soon. Debug Information Port(s): 9096 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/identifier-service Swagger API .yaml: /v3/api-docs.yaml Search Service \u00b6 It processes search requests from the Gateway Service for full-text lookups in the Metadata Database. We use Elasticsearch in the reference implementation. The Search Service implements ElasticSearch and creates a retrievable index on all databases that is getting updated with each save operation on databases in the metadata database. The database name can be queried with ElasticSearch to e.g. match the term \"Airquality\" $ curl http://localhost:9200/databaseindex/_search?q = name:Airquality Debug Information Port(s): 9200, 9600 ElasticSearch: /databaseindex Container Service \u00b6 It is responsible for Docker container lifecycle operations and updating the local copy of the Docker images. Debug Information Port(s): 9091 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/container-service Swagger API .yaml: /v3/api-docs.yaml Database Service \u00b6 It creates the databases inside a Docker container and the Query Store. Currently we only support MariaDB images that allow table versioning with low programmatic effort. Debug Information Port(s): 9092 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/database-service Swagger API .yaml: /v3/api-docs.yaml Table Service \u00b6 This microservice handles table operations inside a database that is managed by the Database Service. We use Hibernate for schema and data ingest operations. Debug Information Port(s): 9094 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/table-service Swagger API .yaml: /v3/api-docs.yaml Broker Service \u00b6 It holds exchanges and topics responsible for holding AMQP messages for later consumption. We use RabbitMQ in the reference implementation. For the HTTP API , the Broker Service offers an endpoint to manage the AMQP users and their permissions on exchanges and queues. This endpoint is reachable via the Gateway Service or at port 9098 directly. Internally this service just parses commands to the rabbitmqctl . For the AMQP API , the Broker Service can declare exchanges and queues. The AMQP endpoint listens to port 5672 for regular declares and offers a management interface at port 15672. Debug Information Port(s): 9098, 5672, 15672 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/broker-service Swagger API .yaml: /v3/api-docs.yaml RabbitMQ Management: /# Query Service \u00b6 It provides an interface to insert data into the tables created by the Table Service. It also allows for view-only, paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker Service. Debug Information Port(s): 9093 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/query-service Swagger API .yaml: /v3/api-docs.yaml FAIR Portal \u00b6 It provides a graphical user interface (GUI) for a researcher to interact with the database repository's API. Debug Information Port(s): 3000 GUI: /# Analyse Service \u00b6 It suggests data types for the FAIR Portal when creating a table from a comma separated values (CSV) file. It recommends enumerations for columns and returns e.g. a list of potential primary key candidates. The researcher is able to confirm these suggestions manually. Moreover, the Analyze Service determines basic statistical properties of numerical columns. Debug Information Port(s): 5000 Swagger UI: /swagger-ui/ Swagger API .json: /api-analyze.json","title":"System"},{"location":"system/#system","text":"","title":"System"},{"location":"system/#architecture","text":"The repository is designed as a microservice architecture to ensure scalability and the utilization of various technologies. The conceptualized microservices operate the basic database operations, data versioning as well as findability , accessability , interoperability and reuseability (FAIR).","title":"Architecture"},{"location":"system/#database","text":"This container runs a relational database engine that allows data versioning and contains the Query Store, a special table that stores all queries issued to the Researcher Database along with metadata. We store the queries here and not in the metadata database level to ensure that they are preserved along with the original database for a regular backup and archival together with the original database once the container is retired.","title":"Database"},{"location":"system/#container","text":"Currently, we only support databases with the MariaDB engine . DBRepo creates a root user for managing the tables, inserting data, etc. and provides a mariadb user that is only granted select access to all tables. The default passwords need to be changed at AbstractSeeder.java","title":"Container"},{"location":"system/#query-store","text":"The Query Store is a special table ( qs_queries ) that stores all queries issued to the database via the HTTP API. It stores meta-information about the queries directly in the database container: Name Type Constraint Default Comment id bigint primary key nextval(qs_queries_seq) cid bigint Column ID dbid bigint Database ID created datetime now() created_by bigint Creator User-ID execution datetime last_modified datetime query text query_normalized text removing *, randomness query_hash varchar(255) sha256 hash of query field result_hash varchar(255) sha256 hash of the result set result_number bigint Query Store table qs_queries schema","title":"Query Store"},{"location":"system/#services","text":"","title":"Services"},{"location":"system/#discovery-service","text":"This microservice allows service discovery and registration of containers that provide services. It configures a Spring Cloud Netflix Eureka Server to discover services. Debug Information Port(s): 9090 Swagger: not configured","title":"Discovery Service"},{"location":"system/#gateway-service","text":"Provides a single point of access to the application programming interface (API) and configures the Spring Cloud Gateway to route traffic to the services. Debug Information Port(s): 9095 Swagger: not configured Microservice cloud architecture","title":"Gateway Service"},{"location":"system/#authentication-service","text":"Very specific to the deployment of the organization. In our reference implementation we implement a security assertion markup language (SAML) service provider and use our institutional SAML identity provider for obtaining account data through an encrypted channel. The Authentication Service configures Spring Boot Starter Security with Java JWT for internal authentication once the user details are known in the metadata database. By default, a token is valid for 24 hours and is used on all HTTP API endpoints. For the HTTP API , obtaining a new token can be done via, e.g. cURL. $ curl -X POST -d '{\"username\":\"username\",\"password\":\"password\"}' -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth Call a secured method by setting the JWT Token as Bearer Token via, e.g. cURL. $ curl -X PUT -H \"Authorization: Bearer TOKEN\" -H \"Content-Type: application/json\" https://dbrepo.ossdip.at/api/auth For the AMQP API , the Authentication Service also creates a dedicated user at the Broker Service that has permissions for writing and configuring the RabbitMQ queues that feed into the database owned by this user. Debug Information Port(s): 9097 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/authentication-service Swagger API .yaml: /v3/api-docs.yaml","title":"Authentication Service"},{"location":"system/#metadata-database","text":"It is the core component of the project. It is a relational database that contains metadata about all researcher databases created in the database repository like column names, check expressions, value enumerations or key/value constraints and relevant data for citing data sets. Additionally, the concept, e.g. URI of units of measurements of numerical columns is stored in the Metadata Database in order to provide semantic knowledge context. We use PostgreSQL for its rich capabilities in the reference implementation. The default credentials are postgres:postgres for the database fda . Connect to the database via, e.g. psql . $ psql -d fda -h localhost -p 5432 -U postgres -W Debug Information Port(s): 5432 Swagger: not configured","title":"Metadata Database"},{"location":"system/#unit-service","text":"It is designed to map terms in the domain of units of measurement to controlled vocabulary, modelled in the ontology of units of measure . This service validates researcher provided in units and provides a uniform resource identifier (URI) to the related concept, which will be stored in the system. Furthermore, there is a method for auto-completing text and listing a description as well as commonly used unit symbols. The Unit Service reads units of measurement from om-2.ttl and registers a unit. It is used to assign a unit of measurement to a table column. For the HTTP API , the Unit Service assigns a unit of measurement via, e.g. cURL. First the list of concepts can be queried. $ curl -X POST -d '{\"offset\":0,\"ustring\":\"met\"}' https://dbrepo.ossdip.at/api/units/suggest Then the concept needs to be saved into the metadata database. $ curl -X POST -d '{\"name\":\"metre\",\"uri\":...}' https://dbrepo.ossdip.at/api/units/saveconcept Then the column can be assigned to a table column. $ curl -X POST -d '{\"cdbid\":1,\"tid\":1,\"cid\":1,\"uri\":...}' https://dbrepo.ossdip.at/api/units/savecolumnsconcept Debug Information Port(s): 5010 Swagger UI: /swagger-ui/ Swagger API .json: /api-units.json","title":"Unit Service"},{"location":"system/#identifier-service","text":"This microservice is responsible for creating and resolving a persistent identifier (PID) attached to a query to obtain the metadata attached to it and allow re-execution of a query. We store both the query and hashes of the query and result set to allow equality checks of the originally obtained result set and the currently obtained result set. In the reference implementation we currently only use a numerical id column and plan to integrate digital object identifier (DOI) through our institutional library soon. Debug Information Port(s): 9096 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/identifier-service Swagger API .yaml: /v3/api-docs.yaml","title":"Identifier Service"},{"location":"system/#search-service","text":"It processes search requests from the Gateway Service for full-text lookups in the Metadata Database. We use Elasticsearch in the reference implementation. The Search Service implements ElasticSearch and creates a retrievable index on all databases that is getting updated with each save operation on databases in the metadata database. The database name can be queried with ElasticSearch to e.g. match the term \"Airquality\" $ curl http://localhost:9200/databaseindex/_search?q = name:Airquality Debug Information Port(s): 9200, 9600 ElasticSearch: /databaseindex","title":"Search Service"},{"location":"system/#container-service","text":"It is responsible for Docker container lifecycle operations and updating the local copy of the Docker images. Debug Information Port(s): 9091 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/container-service Swagger API .yaml: /v3/api-docs.yaml","title":"Container Service"},{"location":"system/#database-service","text":"It creates the databases inside a Docker container and the Query Store. Currently we only support MariaDB images that allow table versioning with low programmatic effort. Debug Information Port(s): 9092 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/database-service Swagger API .yaml: /v3/api-docs.yaml","title":"Database Service"},{"location":"system/#table-service","text":"This microservice handles table operations inside a database that is managed by the Database Service. We use Hibernate for schema and data ingest operations. Debug Information Port(s): 9094 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/table-service Swagger API .yaml: /v3/api-docs.yaml","title":"Table Service"},{"location":"system/#broker-service","text":"It holds exchanges and topics responsible for holding AMQP messages for later consumption. We use RabbitMQ in the reference implementation. For the HTTP API , the Broker Service offers an endpoint to manage the AMQP users and their permissions on exchanges and queues. This endpoint is reachable via the Gateway Service or at port 9098 directly. Internally this service just parses commands to the rabbitmqctl . For the AMQP API , the Broker Service can declare exchanges and queues. The AMQP endpoint listens to port 5672 for regular declares and offers a management interface at port 15672. Debug Information Port(s): 9098, 5672, 15672 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/broker-service Swagger API .yaml: /v3/api-docs.yaml RabbitMQ Management: /#","title":"Broker Service"},{"location":"system/#query-service","text":"It provides an interface to insert data into the tables created by the Table Service. It also allows for view-only, paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker Service. Debug Information Port(s): 9093 Swagger UI: /swagger-ui/index.html Swagger API .json: /v3/api-docs/query-service Swagger API .yaml: /v3/api-docs.yaml","title":"Query Service"},{"location":"system/#fair-portal","text":"It provides a graphical user interface (GUI) for a researcher to interact with the database repository's API. Debug Information Port(s): 3000 GUI: /#","title":"FAIR Portal"},{"location":"system/#analyse-service","text":"It suggests data types for the FAIR Portal when creating a table from a comma separated values (CSV) file. It recommends enumerations for columns and returns e.g. a list of potential primary key candidates. The researcher is able to confirm these suggestions manually. Moreover, the Analyze Service determines basic statistical properties of numerical columns. Debug Information Port(s): 5000 Swagger UI: /swagger-ui/ Swagger API .json: /api-analyze.json","title":"Analyse Service"},{"location":"operation/","text":"Operation \u00b6 Abstract We compiled a short getting started guide that quickly allows a stand-alone test-deployment of the infrastructure on your server without the need of infrastructure configuration.","title":"Operation"},{"location":"operation/#operation","text":"Abstract We compiled a short getting started guide that quickly allows a stand-alone test-deployment of the infrastructure on your server without the need of infrastructure configuration.","title":"Operation"},{"location":"operation/production/","text":"Production \u00b6 Alpha-release software Currently, the database repository is in an alpha-release and not considered secure enough to hold sensitive data. Enroll into our mailing list and be notified every 2-3 months with progress of the software. Friendly users We always welcome friendly users who want to deploy the database repository on their premises and provide continious feedback and create bug reports. We also take their improvement inquiries to improve the software quality. Please contact us.","title":"Production"},{"location":"operation/production/#production","text":"Alpha-release software Currently, the database repository is in an alpha-release and not considered secure enough to hold sensitive data. Enroll into our mailing list and be notified every 2-3 months with progress of the software. Friendly users We always welcome friendly users who want to deploy the database repository on their premises and provide continious feedback and create bug reports. We also take their improvement inquiries to improve the software quality. Please contact us.","title":"Production"}]}
\ No newline at end of file
diff --git a/site/sitemap.xml b/site/sitemap.xml
index 5777da73753eff19f885633ffb87eafb5dec2dae..8aa56c040e15f0dc807188af9806d9fc4fbfc141 100644
--- a/site/sitemap.xml
+++ b/site/sitemap.xml
@@ -2,37 +2,37 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
     <url>
          <loc>None</loc>
-         <lastmod>2022-09-16</lastmod>
+         <lastmod>2022-09-19</lastmod>
          <changefreq>daily</changefreq>
     </url>
 </urlset>
\ No newline at end of file
diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz
index f397f8386bd73957ed70d6b971569275907b2215..9e390d5eb27e81d6e34b92b896f91e4024f988c0 100644
Binary files a/site/sitemap.xml.gz and b/site/sitemap.xml.gz differ
diff --git a/site/stylesheets/extra.css b/site/stylesheets/extra.css
index f44d4bd0e464dee5ad97290fc90dcae9abe3b5c8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/site/stylesheets/extra.css
+++ b/site/stylesheets/extra.css
@@ -1,9 +0,0 @@
-[data-md-color-scheme="default"] {
-  --md-primary-fg-color:        #2466a6;
-  --md-accent-fg-color:         #2466a6;
-}
-
-[data-md-color-scheme="slate"] {
-  --md-primary-fg-color:        #2466a6;
-  --md-accent-fg-color:        #2466a6;
-}
diff --git a/site/system/index.html b/site/system/index.html
index abfe5cc60453c67e1c9d9c27d0239d38d2b9b4fb..a923b45b4c1f88d5b494a7b50c9f0e589b1bc24c 100644
--- a/site/system/index.html
+++ b/site/system/index.html
@@ -11,7 +11,7 @@
       
       
       <link rel="icon" href="../images/TU_Signet_weiss_transparent_72dpi_RGB.png">
-      <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.2.8">
+      <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.2.8">
     
     
       
@@ -55,7 +55,7 @@
     
     
     
-    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
+    <body dir="ltr" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent="">
   
     
     
@@ -118,7 +118,7 @@
         
           
           
-          <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
+          <input class="md-option" data-md-color-media="" data-md-color-scheme="indigo" data-md-color-primary="" data-md-color-accent=""  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
           
             <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
               <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31z"/></svg>