diff --git a/.docs/images/architecture.drawio b/.docs/images/architecture.drawio index 2559a653790f7a5de96948d00394017982d8073a..588ede83e27578b9cb42d9b10551609333fae6d3 100644 --- a/.docs/images/architecture.drawio +++ b/.docs/images/architecture.drawio @@ -975,113 +975,95 @@ </mxGraphModel> </diagram> <diagram id="DNBJDzVGt1bZ_wE9aRrb" name="Authentication (TU)"> - <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <mxGraphModel dx="1182" dy="678" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="UK1E1MY9NPGJr35xhmfM-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="6Mvu0cpha-60HerBRlcp-5" target="QHHrKqhJkxuvhbEd7n-v-1" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="618" y="253" as="sourcePoint" /> - <mxPoint x="677.5" y="221" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="0UriubutAV_ndhbAIQOG-1" target="lwbPPWB284nzco3shXtu-11" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-1" target="H5geC8BQpTcnQeXLB8gK-2"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="0UriubutAV_ndhbAIQOG-1" value="SATOSA" style="rounded=0;whiteSpace=wrap;html=1;fillColor=default;dashed=1;verticalAlign=top;" parent="1" vertex="1"> - <mxGeometry x="447.5" y="414" width="170" height="210" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-4" value="Force" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-3"> + <mxGeometry x="0.0781" y="-2" relative="1" as="geometry"> + <mxPoint x="7" y="2" as="offset" /> + </mxGeometry> </mxCell> - <mxCell id="h4DClbYJ9orVhpn0rvY8-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="OTtTGdUG0AnkBV5d_5uu-1" target="OTtTGdUG0AnkBV5d_5uu-2" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-1" target="H5geC8BQpTcnQeXLB8gK-5"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="OTtTGdUG0AnkBV5d_5uu-1" value="SAML 2.0 IdP<br>(Frontend)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="467.5" y="444" width="130" height="40" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-20" value="OIDC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-9"> + <mxGeometry x="-0.0962" y="-1" relative="1" as="geometry"> + <mxPoint x="6" y="-1" as="offset" /> + </mxGeometry> </mxCell> - <mxCell id="h4DClbYJ9orVhpn0rvY8-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="OTtTGdUG0AnkBV5d_5uu-2" target="OTtTGdUG0AnkBV5d_5uu-3" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-1" target="H5geC8BQpTcnQeXLB8gK-7"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="OTtTGdUG0AnkBV5d_5uu-2" value="Middleware" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="467.5" y="504" width="130" height="40" as="geometry" /> - </mxCell> - <mxCell id="OTtTGdUG0AnkBV5d_5uu-3" value="SAML 2.0 SP<br>(Backend)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="467.5" y="564" width="130" height="40" as="geometry" /> - </mxCell> - <mxCell id="h4DClbYJ9orVhpn0rvY8-2" value="<a href="https://test.dbrepo.tuwien.ac.at/api/auth/realms/dbrepo/.well-known/openid-configuration">JSON<br>Metadata</a>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1"> - <mxGeometry x="307.5" y="181" width="70" height="90" as="geometry" /> - </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="h4DClbYJ9orVhpn0rvY8-3" target="OTtTGdUG0AnkBV5d_5uu-3" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="410" y="576" as="targetPoint" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-19" value="OIDC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-10"> + <mxGeometry x="-0.1281" y="2" relative="1" as="geometry"> + <mxPoint x="-2" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="h4DClbYJ9orVhpn0rvY8-3" value="<a href="https://test.dbrepo.tuwien.ac.at/saml2/endpoint">XML<br>Metadata</a>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1"> - <mxGeometry x="307.5" y="539" width="70" height="90" as="geometry" /> - </mxCell> - <mxCell id="QHHrKqhJkxuvhbEd7n-v-1" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#dae8fc;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="677.5" y="248" width="50" height="64" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-1" target="H5geC8BQpTcnQeXLB8gK-6"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="QHHrKqhJkxuvhbEd7n-v-2" value="auth-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" parent="1" vertex="1"> - <mxGeometry x="660" y="314" width="85" height="20" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-18" value="OIDC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-11"> + <mxGeometry x="0.1536" relative="1" as="geometry"> + <mxPoint x="9" as="offset" /> + </mxGeometry> </mxCell> - <mxCell id="hp2oGXdcphavrsRCR3EN-1" value="<b>EntityID&nbsp;</b>https://test.dbrepo.tuwien.ac.at/saml2/backend" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> - <mxGeometry x="10" y="10" width="440" height="20" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-1" value="<b>Auth Service</b><br>Keycloak" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="455" y="335" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;dashed=1;" parent="1" source="lwbPPWB284nzco3shXtu-11" target="h4DClbYJ9orVhpn0rvY8-3" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-2" target="H5geC8BQpTcnQeXLB8gK-8"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-11" value="TU SSO" style="rounded=0;whiteSpace=wrap;html=1;fillColor=default;dashed=1;verticalAlign=top;" parent="1" vertex="1"> - <mxGeometry x="50" y="474" width="170" height="90" as="geometry" /> - </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-12" value="SimpleSAML" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> - <mxGeometry x="70" y="504" width="130" height="40" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-16" value="LDAP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-12"> + <mxGeometry x="-0.0986" y="-1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="lwbPPWB284nzco3shXtu-18" target="OTtTGdUG0AnkBV5d_5uu-1" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-2" target="H5geC8BQpTcnQeXLB8gK-13"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-18" value="<a href="https://test.dbrepo.tuwien.ac.at/saml2/backend">XML<br>Metadata</a>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1"> - <mxGeometry x="307.5" y="419" width="70" height="90" as="geometry" /> - </mxCell> - <mxCell id="tOMRmRFzJHC1-SXyWV1O-3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#000000;startArrow=classic;startFill=1;dashed=1;" parent="1" edge="1"> - <mxGeometry x="-0.028" relative="1" as="geometry"> - <mxPoint x="532" y="126" as="sourcePoint" /> - <mxPoint as="offset" /> - <mxPoint x="532" y="174" as="targetPoint" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-17" value="LDAP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-15"> + <mxGeometry x="0.0932" y="-2" relative="1" as="geometry"> + <mxPoint x="6" y="1" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="tOMRmRFzJHC1-SXyWV1O-4" value="Researcher" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> - <mxGeometry x="517.5" y="42" width="30" height="60" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-2" value="<b>Identity Service</b><br>OpenLDAP" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="224" y="335" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-4" value="<a href="https://test.dbrepo.tuwien.ac.at/api/auth/realms/dbrepo/broker/saml/endpoint/descriptor">XML<br>Metadata</a>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1"> - <mxGeometry x="307.5" y="300" width="70" height="90" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-5" value="<b>UI</b>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="530" y="470" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-5" value="Keycloak" style="rounded=0;whiteSpace=wrap;html=1;fillColor=default;dashed=1;verticalAlign=top;" parent="1" vertex="1"> - <mxGeometry x="447.5" y="175" width="170" height="210" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-6" value="<b>Metadata Service</b>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="380" y="470" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6Mvu0cpha-60HerBRlcp-7" target="6Mvu0cpha-60HerBRlcp-10" edge="1"> - <mxGeometry relative="1" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-7" value="<b>Data Service</b>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="455" y="530" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-7" value="OIDC IdP" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="467.5" y="205" width="130" height="40" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-8" value="<b>Broker Service</b>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="224" y="530" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="6Mvu0cpha-60HerBRlcp-5" target="0UriubutAV_ndhbAIQOG-1" edge="1"> - <mxGeometry relative="1" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-13" value="<b>Dashboard UI</b>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="470" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-10" value="SAML 2.0 SP<br>(Identity Broker)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="467.5" y="325" width="130" height="40" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-21" target="H5geC8BQpTcnQeXLB8gK-1"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="lwbPPWB284nzco3shXtu-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="h4DClbYJ9orVhpn0rvY8-2" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="467.5" y="226" as="targetPoint" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-23" value="SAML 2.0" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="H5geC8BQpTcnQeXLB8gK-22"> + <mxGeometry x="0.0113" y="1" relative="1" as="geometry"> + <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="6Mvu0cpha-60HerBRlcp-4" target="6Mvu0cpha-60HerBRlcp-10" edge="1"> - <mxGeometry relative="1" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-21" value="<b>IdP</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#000000;" vertex="1" parent="1"> + <mxGeometry x="455" y="190" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="6Mvu0cpha-60HerBRlcp-15" target="OTtTGdUG0AnkBV5d_5uu-1" edge="1"> + <mxCell id="H5geC8BQpTcnQeXLB8gK-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="H5geC8BQpTcnQeXLB8gK-24" target="H5geC8BQpTcnQeXLB8gK-1"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="6Mvu0cpha-60HerBRlcp-15" value="JSON<br>(Denylist)" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1"> - <mxGeometry x="667.5" y="419" width="70" height="90" as="geometry" /> + <mxCell id="H5geC8BQpTcnQeXLB8gK-24" value="Browser / REST API" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"> + <mxGeometry x="730" y="325" width="30" height="60" as="geometry" /> </mxCell> </root> </mxGraphModel> diff --git a/.docs/installation.md b/.docs/installation.md index ae807e69d0d980baa972e3010f7a5c0005657a8d..79530f31ee8ee69ffdab2c0078921948229a6db2 100644 --- a/.docs/installation.md +++ b/.docs/installation.md @@ -22,13 +22,10 @@ curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-service ## Requirements -We only support the Debian 12 operating system officially. In theory, any DEB-based operating system (e.g. Ubuntu) -should be compatible. Any modern hardware suffices, we recommend a dedicated virtual machine with the following -settings. +We recommend a dedicated virtual machine with the following system requirements: - min. 8 vCPU cores -- min. 8GB free RAM memory -- min. 200GB free SSD storage +- min. 20GB free RAM memory Since DBRepo is intended to be a publicly available repository, an optional fixed/static IP-address with optional SSL/TLS certificate is recommended. Follow the [secure installation](#secure-installation) guide.