LM-Kit OneDocs2026.8.10lm-kit.com
Deployment

Air-Gapped Deployment

This server is built to run with the network cable conceptually cut: by default nothing phones home, no license ping carries content, and every way a byte can leave is opt-in and enumerable (the exhaustive list). An air-gapped deployment is therefore not a fight against the product but a provisioning exercise: get the models in without the internet, distribute trust without a public certificate authority, and confirm the five egress channels are closed. This is that exercise, end to end.


1Models come in on the build machine#

Models are the one thing a fresh install normally downloads, so provision them where the internet exists and ship files:

  1. On a connected build machine: lmkit models lists the catalog with download state, and lmkit pull <model-id> downloads by id into the model directory, with progress and meaningful exit codes, no running server required (The Command Line).
  2. Ship the model directory with the image, or copy it to the target and point LMKIT_MODELS_DIR at it.
  3. On the target, lmkit models shows every shipped model as locally available, and first run serves immediately: the catalog treats a pre-placed file exactly like one it downloaded.

Custom models imported from files follow the same logic: import on the build side, ship the state and model directories together (Backup and Upgrades covers the copy set).

2The golden image#

A repeatable air-gapped install is a normal install captured once:

  • the server binary (installer or portable),
  • the model directory, pre-pulled,
  • the state directory seeded with reviewed appsettings.json posture (section 4's checklist), keys pre-minted if fleet clients need them on first boot,
  • LMKIT_STATE_DIR and LMKIT_MODELS_DIR pinned explicitly, so the image behaves identically wherever it lands.

lmkit doctor is the acceptance test on each provisioned machine: state-directory writability, model presence and free disk, devices, certificate validity, service registration, one pass, exit code you can script on.

3HTTPS without the internet#

ACME needs a public CA, so air-gapped TLS is the operator-supplied path, first-class here:

  • Provide your organization's certificate for the server's name, or let the server keep its self-managed certificate and distribute trust yourself: lmkit cert-export writes the public certificate; lmkit cert-install manages the local trust store; your fleet tooling pushes it to clients (Going Live).
  • Certificates live under the state directory, so the golden image can carry them, and moves keep them.

4Closing the five channels, explicitly#

Every potential egress is a setting an auditor can read back:

Channel Air-gap posture
Model downloads Nothing to close: downloads happen only on demand; with models pre-placed, no pull is ever requested. The admin catalog will simply fail to fetch anything new, loudly, if asked.
Web-reaching tools Server tools are OFF by default; leave the master switch off, or run tools with the egress gate in allowlist mode with an empty or intranet-only list.
MCP connectors Attach none; external MCP servers are an explicit list that stays empty.
Telemetry export Off by default; the admin console's own view works with no export configured.
SSO / OIDC Leave both halves off, or point them at an INTERNAL identity provider, which keeps the exchange inside the perimeter.

The confirmation that convinces auditors: a default install behind a deny-all outbound firewall serves everything local without a single blocked-connection log line, because nothing is trying to leave.

5Living air-gapped#

  • Upgrades arrive the way the image did: new binary through the controlled channel, the upgrade runbook unchanged, lmkit doctor and /health as the after-checks. Version facts are served locally; nothing checks for updates outbound.
  • New models repeat section 1: pull on the build machine, ship files. Worth planning as a periodic delivery, because model quality moves fast and an air-gapped fleet only benefits when someone carries the files in.
  • Documentation travels with the server: these guides and the API reference are served BY the server itself, so the fleet's operators have the manuals inside the perimeter.
  • Time still matters: JWT validation and certificate checks care about clocks; keep NTP against an internal time source.

6Stated plainly#

  • Air-gapping this server is provisioning, not surgery: pre-pull models with the CLI, ship directories, pin the two path variables, and the image is reproducible.
  • TLS works without ACME: bring your certificate or distribute the server's own trust with the cert verbs.
  • All five egress channels are opt-in and closable in configuration; a deny-all firewall around a default install blocks nothing, because nothing calls out.
  • The manuals ship inside: guides and the API reference are served locally by the server itself.