yeke.io · docs

Air-gap installation

Choose how to access YEKE images: pull from Docker Hub, use an internal registry, or install from an offline bundle.

Three paths, at a glance

Two are mechanisms that already exist; the third needs a separate package.

PathWhen
1. Regular installFor most organizations with internet access during setup (through a proxy/allowlist if needed). Image tags are pulled directly from Docker Hub.
2. Internal registry mirrorFor organizations running their own internal Docker registry. No package needed, it works with two environment variables.
3. Fully offline packageRare. For installs with a fully closed network, hand-delivered: a single signed archive.

Path 1: Regular install

The path this site's own installation page already covers.

If the installation can reach the internet, pull images from Docker Hub. Use your corporate proxy or allowlist if needed. No additional registry configuration is required for Docker Compose or the Kubernetes manifests.

Path 2: Internal registry mirror

If you run your own internal Docker registry, two environment variables.

Push the agent and toolbox images to your internal registry, then set YEKE_AGENT_IMAGE and YEKE_TOOLBOX_IMAGE to their addresses. YEKE uses these images in agent manifests and Shell sessions. Empty values use Docker Hub; no separate bundle is needed.

# from the nairotech/yeke-agent repo
docker buildx build --platform linux/amd64,linux/arm64 \
  -t registry.internal.example.com/yeke-agent:0.51.2 --push .

# from apps/toolbox
docker buildx build --platform linux/amd64,linux/arm64 \
  -t registry.internal.example.com/yeke-toolbox:v3 --push .

In docker-compose, add these to the core service's environment: block; the file doesn't carry these two lines by default, they're optional and added by hand:

    environment:
      YEKE_AGENT_IMAGE: registry.internal.example.com/yeke-agent:0.51.2
      YEKE_TOOLBOX_IMAGE: registry.internal.example.com/yeke-toolbox:v3

On Kubernetes, add the same two variables to the env: list in deploy/kubernetes/02-core-deployment.yaml; same mechanism, just a different file format. Core's own image is unaffected by this path; it's still pulled with a normal docker pull/imagePullPolicy: Always — only where agent/toolbox are pulled from changes.

The most commonly missed step

Core's own location gets confused with agent/toolbox's location.

Even if core runs on one machine, the agent and toolbox images still need to live in a registry the cluster can reach

The target cluster’s nodes pull agent and toolbox images, not the YEKE server. Even when core runs on one machine, those nodes need access to the registry. Missing images or incorrect image addresses can cause agent installation or Shell startup to fail with ImagePullBackOff.

Path 3: Fully offline package

Rare. For organizations with a completely closed network and a hand-delivered (physical file) install; most organizations reach either the internet directly or their own internal mirror, so path 1 or path 2 is enough.

yeke-airgap-<version>.tar is a single archive derived from published images — not a local rebuild, so the byte the package carries is the byte the release verified.

PartWhat
images/core+agent+toolbox, a multi-arch OCI archive for the Kubernetes path; core's single-arch docker load format for the compose path (default is amd64 only).
cli/The single-file yeke CLI and the yeke-migrate bundle.
deploy/compose + Kubernetes manifests, image fields pinned to this version, registry name templated.
docs/INSTALL.md, UPGRADE.mdInstall and upgrade steps: in English, since the reader is the customer's operator.
SHA256SUMS + .sigAn Ed25519 signature, separate from the license key, signed with the vendor's own release key.

Verify before installing anything

The package signature verifies the publisher of the archive and is separate from the license key. Compare the bundled public key with the key published through an independent channel. Do not rely only on a key supplied inside the archive.

sha256sum -c SHA256SUMS
openssl pkeyutl -verify -pubin -inkey release-public.pem \
  -rawin -in SHA256SUMS -sigfile SHA256SUMS.sig

Installing — single machine (compose)

The core image is loaded straight into the local Docker daemon; no internal registry or skopeo needed:

docker load < images/yeke-<version>-amd64.docker.tar   # or …-arm64.docker.tar

Even after this load, the warning above still applies: you still need to push the agent and toolbox images to your internal registry with skopeo copy (the commands in the Kubernetes section below).

Installing — Kubernetes (persistent cluster)

Kubernetes nodes pull from a registry, not from a tar file — you load the images into your internal registry first:

REGISTRY=registry.internal.example.com

# only if core itself will also run on Kubernetes (not needed for compose):
skopeo copy --multi-arch all \
  oci-archive:images/yeke-<version>.oci.tar \
  docker://$REGISTRY/yeke:<version>

# needed for every install:
skopeo copy --multi-arch all \
  oci-archive:images/yeke-agent-<version>.oci.tar \
  docker://$REGISTRY/yeke-agent:<version>

skopeo copy --multi-arch all \
  oci-archive:images/yeke-toolbox-<tag>.oci.tar \
  docker://$REGISTRY/yeke-toolbox:<tag>

Architecture selection

The package is a hand-delivered process prepared at sale time — the customer's machine architecture is usually already known when the package is built. That's why the default package carries only amd64; if arm64 or both are needed, the package is rebuilt with --arch arm64 / --arch both. The Kubernetes path's multi-arch OCI archive is unaffected by this choice — since cluster nodes can be mixed-architecture, that archive always carries both.

Limits

No step reaches an outside network.

  • License verification is fully offline. The product contacts no external address for licensing.
  • The package is rarely needed. An acceptance run (an end-to-end install on a real air-gapped machine) is done when the packaging mechanism changes, not on every release.
  • Rebuilding the toolbox inside the package is not supported. The package carries a ready-made image; customers don't build it on their own.
  • Upgrading also requires a new version of the same package. Manually building an image or partial updates are not supported.
  • If core's certificate is signed by your organization's own CA, the agent, Shell and CLI trusting it is a separate step — see Internal CA.

Outgrown the database after installing?

An air-gapped install can also move to PostgreSQL; the path is the same yeke-migrate tool.