Zentitle2 Local License Server (LLS) Setup

The LLS is a multi-container Docker application used to host licenses on-premise in an air-gapped network. Since the LLS uses Docker, it could be hosted on a Windows or Linux server if configured correctly. System Admins may have different preferences or requirements from their companies for how to host this Docker app. It is expected that qualified System Admins will be able to modify the below procedures accordingly as each environment may be slightly different. The below steps are offered as a guideline on Windows (with Docker Desktop + WSL) and have been tested internally by Datacor. We may not be able to provide support for custom Linux configurations. Certain steps may not apply on Linux and can be skipped (ex. installation of WSL only applies to Windows hosts).

Requirement: You will need to be able to transfer a couple digital files (both in and out) of the host for initial LLS activation and subsequent renewal extensions.

Overview

  1. Gather the required files on an internet-connected machine

  2. Install Docker + WSL on the host machine

  3. Load the two required Docker images: Zentitle2 LLS + PostgreSQL

  4. Customize your docker compose YAML file from the template we provide

  5. Spin up the multi-container Docker application using your modified YAML file and open the localhost UI

  6. Activate the LLS by exchanging certificate files with our support team

  7. Load the activated LLS with license entitlements provided by our support team

  8. Configure your end-user client machines to pull licenses from the LLS host

Step 1: Gather the Required Files

On an internet-connected machine, gather up all the necessary installers and files. Transfer all the files to the air-gapped host server.

  1. Docker Installer: https://docs.docker.com/desktop/setup/install/windows-install/

  2. WSL Installer: https://github.com/microsoft/wsl/releases - Docker system requirements state WSL v2.1.5 or later (as of August 2026)

  3. Docker Compose YAML File Template - *.yml file provided by us via the Customer Portal

  4. Docker image for the Zentitle2 LLS - *.tar file provided by us via the Customer Portal

  5. Docker image for PostgreSQL - you will need to pull this yourself and export it to *.tar

    1. Install Docker on an internet-connected machine, open Command Prompt, and pull the latest version of postgres

      docker pull postgres:latest (or can specify an exact version like postgres:18.6)

    2. Export the image to a *.tar archive file

      docker save -o PostgreSQL-18.6-Image.tar

Step 2: Install Docker on the Air-Gapped Hosting Server Machine

  1. Transfer all the necessary files to the air-gapped host server.

  2. Ensure that virtualization is enabled for the host machine (BIOS settings). Status can be checked from Task Manager > Performance > CPU > Virtualization = Enabled.

  3. Install WSL. Verify success with the command "wsl --version".

  4. Install Docker. Verify success with the command "docker --version".

Note: It's important that a Docker-compatible version of WSL is installed BEFORE Docker (i.e. sub-steps 3 and 4 above are done in order). The Docker installer sets up certain configurations in the back-end of the OS that will fail if WSL is not installed first, or is a version that is unsupported by the Docker build. Installing WSL afterwards leaves Docker in a state where the engine will not be able to start. This can be fixed by uninstalling Docker, restarting the machine, re-installing Docker (now that WSL is installed), and restarting the machine again.

Step 3: Load the LLS Images Into Docker

  1. Launch Docker Desktop so that the daemon/engine is running.

  2. Launch the Windows Command Prompt.

  3. Load the first Docker image using the command below and change the directory/filename of the *.tar accordingly:

    docker load --input "C:\Users\Username\Desktop\Zentitle2-LLS-2.3.1-Image.tar"

  4. Repeat to load the second Docker image:

    docker load --input "C:\Users\Username\Desktop\PostgreSQL-18.6-Image.tar"

  5. It's helpful to list the Docker images after the load command to see that they show up properly. You can look inside the Docker Desktop application on the Images tab, or use the below command:

    docker image ls

  6. You should see the following 2 required images that will be needed by the LLS (version numbers may change in the future):

    • postgres:18.6 - This is the PostgreSQL database image that will be used for storing the license entitlements.

    • registry.gitlab.com/nalpeiron/zentitle/local-license-server:2.3.1 - This is the LLS image directly from our vendor Nalpeiron (from their private GitLab registry).

Step 4: Customize the Template Docker Compose File (*.yml)

The template docker compose YAML file we provide will need to be further modified (in any text editor like Notepad). There are two sub-containers that will be specified to run:

  1. lls-postgres-db (the PostgreSQL database)

  2. lls-localhost-ui (the LLS UI localhost application)

For the lls-postgres-db section:

  • image: make sure that the postgres image version matches what you actually have

  • environment: the two lines for POSTGRES_USER and POSTGRES_PASSWORD can have their values updated to something meaningful instead of the placeholders

  • healthcheck: the "test:" line needs to have several values that match the entries under "environment:".

    • "-d", "lls" - here the "lls" part matches the POSTGRES_DB value

    • "-U", "lls-postgres-user" - here the "lls-postgres-user" part matches the POSTGRES_USER value

For the lls-localhost-ui section:

  • image: the version number at the end should match the actual image version used

  • ConnectionStrings__Database:

    • "Database=" should match the value of POSTGRES_DB from the lls-postgres-db section above

    • "User Id=" should match the value of POSTGRES_USER from the lls-postgres-db section above

    • "Password=" should match the value of POSTGRES_PASSWORD from the lls-postgres-db section above

  • Authentication__Username: should be updated to a meaningful value (used to login to the LLS localhost UI in a browser)

  • Authentication__Password: should be updated to a meaningful value (used to login to the LLS localhost UI in a browser)

  • ports: the localhost port which the LLS interface will be hosted on can be changed if desired

    • Needs to match the value specified at the end of the ASPNETCORE_URLS value in the "environment:" section above

    • Will affect what you need to enter for client machine setup in later steps

Step 5: Run the LLS Docker App

  1. Ensure the Docker engine is running. Then, open Command Prompt.

  2. Start the multi-container Docker app with the command below using your updated YAML file and change the path below accordingly (path needs to be in quotes if there are space characters):

    docker compose -f "C:\Users\Username\Desktop\Modified-LLS-Docker-Compose-File.yml" up -d

  3. Launch the LLS interface by going to the proper localhost port which the container is hosted on (specified in the YAML file - by default http://localhost:6501/ui).

    • In Docker Desktop > Containers > Port(s) > click the hyperlink

Step 6: Activate the LLS

  1. Within the localhost interface on the License tab, click the green "Activate" button in the top-right.

  2. Within the "Server activation" section enter the activation code provided by us.

  3. Enter a unique name for the server that includes your company name and sub-location/office. For example, "Engineering Company - Denver".

  4. Click "Generate activation request".

  5. Download the activation request file and transfer it out of the air-gapped network to an internet-connected machine. Send the file to our team.

  6. We will send you back an activation response token file. Transfer this file to the host.

  7. Upload the activation response into the LLS interface and click "Activate server".

  8. Scroll down on the localhost UI to see the confirmation message (by default on a 1080p display the confirmation message appears below and so it looks like nothing happened at first)

Step 7: Import License Entitlements Into the LLS

  1. Our support team will supply you with the license entitlements to import into the active LLS.

  2. Download the entitlement tokens and transfer them to the air-gapped server.

  3. Within the LLS interface click the Entitlements tab (http://localhost:6501/ui/entitlements/import).

  4. Click "Import" and select the entitlement token(s).

Step 8: Configure the End-User Client Machines to Talk to the LLS Host

  1. Install our applications from the Datacor Flow Simulation installer package.

  2. Try to run one of the apps.

  3. On the login prompt select the Enterprise tier.

  4. Then, select the checkbox at the bottom for "LLS".

  5. Enter the LLS server URL using HTTP (ex. http://192.168.1.100:6501). The port at the end should match what is specified in the YAML file.

  6. Enter the activation code for the given entitlement (specific to whichever product you are trying to login to) which is listed in the LLS localhost UI > Entitlements > Details > Activation Codes.