<https://docs.linkeddatahub.com/get-started/setup/>
        a       <https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/get-started/setup/#content>;
        <http://purl.org/dc/terms/created>
                "2026-10-25T17:34:20.59Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/creator>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this>;
        <http://purl.org/dc/terms/description>
                "Set up LinkedDataHub on your local machine with Docker";
        <http://purl.org/dc/terms/modified>
                "2026-10-27T12:16:48.422Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/title>
                "Setup";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/get-started/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this> .

<https://docs.linkeddatahub.com/get-started/setup/#content>
        a       <https://w3id.org/atomgraph/linkeddatahub#XHTML>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n    <p class=\"ldh-body-lg\">Set up LinkedDataHub on your local machine with Docker</p>\n    <video aria-label=\"Setting up LinkedDataHub with Docker\" controls=\"controls\" preload=\"metadata\" src=\"/uploads/b90f8d886becfea648bd1118b301328ee47d923e\"></video>\n    <div>\n        <h2 id=\"start-linkeddatahub\">Start LinkedDataHub</h2>\n        <p>This section assumes you will be running on your local machine, i.e. <samp>localhost</samp>. If you intend to run it on a different host, <a href=\"../../reference/configuration/#system-base-uri\">change the system base URI</a>.</p>\n        <p>Prerequisites:</p>\n        <ul>\n            <li>A bash shell — included on Linux and macOS; on Windows, install the <a href=\"https://docs.microsoft.com/en-us/windows/wsl/install-win10\" target=\"_blank\">Windows Subsystem for Linux</a></li>\n            <li><a href=\"https://www.openssl.org/\" target=\"_blank\">openssl</a> on your <code>$PATH</code></li>\n            <li><a href=\"https://docs.docker.com/install/\" target=\"_blank\">Docker</a></li>\n            <li><a href=\"https://docs.docker.com/compose/install/\" target=\"_blank\">Docker Compose</a></li>\n        </ul>\n        <p>Steps:</p>\n        <ol>\n            <li><a href=\"https://guides.github.com/activities/forking/\" target=\"_blank\">Fork</a> the <a href=\"https://github.com/AtomGraph/LinkedDataHub\" target=\"_blank\">LinkedDataHub</a> repository\n                and clone the fork into a folder</li>\n            <li>In the folder, copy <a href=\"https://github.com/AtomGraph/LinkedDataHub/blob/master/.env_sample\" target=\"_blank\"><samp>.env_sample</samp></a> to <samp>.env</samp> and fill in the values. For example:\n                <pre>COMPOSE_CONVERT_WINDOWS_PATHS=1\nCOMPOSE_PROJECT_NAME=linkeddatahub\n\nPROTOCOL=https\nHTTP_PORT=81\nHTTPS_PORT=4443\nHOST=localhost\n\nOWNER_MBOX=john@doe.com\nOWNER_GIVEN_NAME=John\nOWNER_FAMILY_NAME=Doe\nOWNER_ORG_UNIT=My unit\nOWNER_ORGANIZATION=My org\nOWNER_LOCALITY=Copenhagen\nOWNER_STATE_OR_PROVINCE=Denmark\nOWNER_COUNTRY_NAME=DK</pre>\n                If port 81 or 4443 is already in use on your machine, choose different <code>HTTP_PORT</code>/<code>HTTPS_PORT</code> values.\n            </li>\n            <li>Set up the server's TLS certificates by running this from the command line:\n                <pre>./bin/server-cert-gen.sh .env nginx ssl</pre>\n                The script will create an <samp>ssl/server</samp> sub-folder where the TLS certificate will be stored.\n            </li>\n            <li>Create the following secrets with certificate/truststore passwords:\n                <ul>\n                    <li><samp>secrets/client_truststore_password.txt</samp></li>\n                    <li><samp>secrets/owner_cert_password.txt</samp></li>\n                    <li><samp>secrets/secretary_cert_password.txt</samp></li>\n                </ul>\n                The one you will need to remember in order to authenticate with LinkedDataHub <a href=\"../get-an-account/#install-cert\">using WebID client certificate</a> is <samp>owner_cert_password</samp>.\n            </li>\n            <li>(Optional) If you need to configure Bearer token authentication for SPARQL services, create <samp>secrets/credentials.trig</samp> with your service credentials. See the <a href=\"../../reference/configuration/#secrets\">configuration reference</a> for details.</li>\n            <li>Run this from the command line:\n                <pre>make up -- --build</pre>\n                (<samp>make up</samp> forwards its arguments to <samp>docker-compose up</samp>; the <samp>--</samp> is needed before arguments starting with <samp>-</samp>.)\n                LinkedDataHub will start and mount the following sub-folders:\n                <pre>LinkedDataHub/\n├── config/     # dataspace and service configuration (dataspaces.trig, system.trig)\n├── datasets/   # owner and secretary agent metadata\n├── fuseki/     # the triplestore's persisted RDF data, one TDB2 directory per dataset\n├── settings/   # dataspace settings changed at runtime, applied over config/ on restart\n├── ssl/\n│   ├── owner/      # your WebID certificate (keystore.p12)\n│   └── secretary/  # the service agent's certificate\n└── uploads/    # content-hashed file uploads</pre>\n            </li>\n        </ol>\n        <div class=\"ac-alert va-informative\" role=\"status\">\n            <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n            <div class=\"ac-alert-body\">\n                <p class=\"ac-alert-text\">The administration dataspace of each <a href=\"../../reference/dataspace/\">dataspace</a> is served on the <code>admin.</code> subdomain — for the default setup that is <samp>https://admin.localhost:4443/</samp>. Browsers resolve <samp>*.localhost</samp> automatically and the generated server certificate covers the subdomain, so the local setup works out of the box. On any other host, make sure <samp>admin.&lt;host&gt;</samp> resolves in DNS and is covered by the server's TLS certificate (e.g. a wildcard certificate).</p>\n            </div>\n        </div>\n        <p>You are now the owner of this LinkedDataHub instance; <samp>ssl/owner/keystore.p12</samp> is your WebID certificate. The password is the value you put in <samp>secrets/owner_cert_password.txt</samp>.</p>\n        <p>Startup takes up to half a minute while the datasets are loaded into the triplestores. After a successful startup you should see periodic healthcheck requests being made to the <samp>https://localhost:4443/ns</samp> URL in the log:</p>\n        <pre>linkeddatahub-1  | ... \"GET /ns HTTP/1.1\" 200 ...</pre>\n    </div>\n    <div>\n        <h2 id=\"common-commands\">Common commands</h2>\n        <table>\n            <caption class=\"ac-vh\">Common commands and what they do</caption>\n            <thead>\n                <tr>\n                    <th scope=\"col\">Command</th>\n                    <th scope=\"col\">Description</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th scope=\"row\"><samp>make up</samp></th>\n                    <td>Start the services; extra arguments are forwarded to <samp>docker-compose up</samp>, e.g. <samp>make up -- --build</samp> to rebuild the images first</td>\n                </tr>\n                <tr>\n                    <th scope=\"row\"><samp>make down</samp></th>\n                    <td>Stop the services; <samp>make down -- -v</samp> also removes the Docker volumes</td>\n                </tr>\n                <tr>\n                    <th scope=\"row\"><samp>make drop</samp></th>\n                    <td>Wipe the setup completely, as described under <a href=\"#reset\">Reset</a></td>\n                </tr>\n            </tbody>\n        </table>\n        <p><samp>make cli</samp> builds the <a href=\"../../reference/command-line-interface/\">command line interface</a> and prints the line that puts it on your <code>$PATH</code>.</p>\n    </div>\n    <div>\n        <h2 id=\"reset\">Reset</h2>\n        <p>If you need to start fresh and wipe the existing setup, you can do that using:</p>\n        <pre>make drop</pre>\n        <p>It stops the services, removes the Docker volumes, and wipes the local <samp>datasets</samp>, <samp>fuseki</samp>, <samp>ssl</samp> and <samp>uploads</samp> folders.</p>\n        <div class=\"ac-alert va-informative\" role=\"status\">\n            <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n            <div class=\"ac-alert-body\">\n                <span class=\"ac-alert-title\">This is destructive and cannot be undone.</span>\n            </div>\n        </div>\n    </div>\n    <p class=\"ldh-body-lg\">Is LinkedDataHub running? Proceed to <a href=\"../get-an-account/\">get an account</a>.</p>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .
