Skip to content

Offline Bundle Install

This is the recommended way to install on a customer edge site with no internet, no registry access, and no image building on the box. You install everything from a single self-contained release bundle that ships on USB media.

A release bundle is one directory, named for its hardware profile and version (for example amd64-cpu-v1.5.0). Choose the bundle that matches your hardware:

Bundle profileUse it when the box has…
amd64-cpux86_64 CPU, no GPU — CPU-only inference
amd64-gpux86_64 CPU + NVIDIA GPU — TensorRT acceleration
jetsonNVIDIA Jetson (arm64 / L4T) edge module

Inside the bundle:

  • Directoryamd64-cpu-v1.5.0/
    • Directoryimages/
      • amd64-cpu-v1.5.0.images.tar.zst the three service images, compressed
      • manifest.txt image tags + checksums
    • Directorycompose/
      • docker-compose.release.yml image-based stack (no build step)
      • .env.template port + secret placeholders
    • Directorymodels/
      • predictive_maintenance.onnx demo seed model (random weights)
    • install.sh
    • update.sh
    • uninstall.sh
    • README.txt operator one-pager

The target box must already have these installed (they ship on the golden OS image — the installer checks for them and stops if anything is missing; it does not install them for you):

  • Docker Engine 20.10 or newer, with the docker compose v2 plugin
  • zstd and openssl
  • NVIDIA Container Toolkit — GPU and Jetson bundles only
  1. Copy the whole bundle directory from your USB media to the target box, then open a terminal in it:

    Terminal window
    cd amd64-cpu-v1.5.0/
  2. The installer auto-detects your hardware profile, loads the container images, generates secrets, brings the stack up, and waits for health.

    Terminal window
    sudo ./install.sh

    To force a specific profile, or to also install a boot-start service:

    Terminal window
    sudo ./install.sh --profile amd64-cpu # force the profile
    sudo ./install.sh --with-systemd # also start on boot

    Under the hood install.sh runs these steps in order:

    1. Preflight — checks Docker, the GPU toolkit (GPU/Jetson), and disk.
    2. Verify the image archive checksum (detects corrupt or tampered media).
    3. Load imagesdocker load from the bundled archive (no pull, no build).
    4. Generate secrets — creates the JWT signing secret and admin password on the box and writes them to a protected .env (mode 600). No secret ever ships inside the bundle.
    5. Start the stackdocker compose up -d.
    6. Health gate — waits for all three services to report healthy.
    7. Seed the admin and print the dashboard URL + admin password once.
  3. The installer generates the JWT signing secret automatically. You normally never touch it, but you can confirm the protected .env exists:

    Terminal window
    ls -l .env # expect mode -rw------- (600)

    If you ever need to provide your own value (e.g. a corporate secret-management policy), edit .env before the first up and set a strong random value:

    # .env (placeholder — generate a strong random value, do not reuse)
    AIBOARD_JWT_SECRET=your-strong-random-jwt-secret
  4. The bundle ships a demo model with random weights. Replace it with your trained predictive_maintenance.onnx so predictions are meaningful:

    • Before first install: overwrite models/predictive_maintenance.onnx in the bundle, then run install.sh.
    • After install: drop your model into the model-data volume at /data/models and restart the inference service.

    You can also upload models later from the dashboard — see Deploying Models.

  5. Confirm all three services are healthy:

    Terminal window
    docker compose -f compose/docker-compose.release.yml ps

    Expect three containers in a healthy state. Then open the dashboard URL the installer printed and sign in with the admin account.

Deploy a newer bundle. The update snapshots the database first so you have a rollback path.

Terminal window
sudo ./update.sh

The pre-update snapshot covers the database only (not uploaded models or the TensorRT cache). Back those volumes up separately if you need to roll models back.

SymptomWhat it means
Bundle manifest missingYou ran the installer from a source folder, not an assembled bundle. Use the bundle directory you copied from USB.
Architecture mismatchWrong bundle profile for this box’s CPU. Use the matching profile.
NVIDIA toolkit not wired inA GPU/Jetson bundle on a box without the container toolkit. Use the amd64-cpu bundle, or fix the GPU stack on the OS image.
Inference stuck unhealthyFirst-run TensorRT compile (GPU) takes 2–3 min — wait. Otherwise check the inference logs.
Archive checksum mismatchCorrupted or tampered USB media. Re-copy the bundle and retry.

See the full Troubleshooting runbook for symptom-keyed fixes.