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.
What you receive
Section titled “What you receive”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 profile | Use it when the box has… |
|---|---|
amd64-cpu | x86_64 CPU, no GPU — CPU-only inference |
amd64-gpu | x86_64 CPU + NVIDIA GPU — TensorRT acceleration |
jetson | NVIDIA 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
Before you start
Section titled “Before you start”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 composev2 plugin zstdandopenssl- NVIDIA Container Toolkit — GPU and Jetson bundles only
Install runbook
Section titled “Install runbook”-
Copy the bundle to the box
Section titled “Copy the bundle to the box”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/ -
Run the installer
Section titled “Run the installer”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.shTo force a specific profile, or to also install a boot-start service:
Terminal window sudo ./install.sh --profile amd64-cpu # force the profilesudo ./install.sh --with-systemd # also start on bootUnder the hood
install.shruns these steps in order:- Preflight — checks Docker, the GPU toolkit (GPU/Jetson), and disk.
- Verify the image archive checksum (detects corrupt or tampered media).
- Load images —
docker loadfrom the bundled archive (no pull, no build). - Generate secrets — creates the JWT signing secret and admin password on
the box and writes them to a protected
.env(mode600). No secret ever ships inside the bundle. - Start the stack —
docker compose up -d. - Health gate — waits for all three services to report healthy.
- Seed the admin and print the dashboard URL + admin password once.
-
Save the admin password
Section titled “Save the admin password” -
Confirm the secret was written
Section titled “Confirm the secret was written”The installer generates the JWT signing secret automatically. You normally never touch it, but you can confirm the protected
.envexists: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
.envbefore the firstupand set a strong random value:# .env (placeholder — generate a strong random value, do not reuse)AIBOARD_JWT_SECRET=your-strong-random-jwt-secret -
Replace the demo model
Section titled “Replace the demo model”The bundle ships a demo model with random weights. Replace it with your trained
predictive_maintenance.onnxso predictions are meaningful:- Before first install: overwrite
models/predictive_maintenance.onnxin the bundle, then runinstall.sh. - After install: drop your model into the model-data volume at
/data/modelsand restart the inference service.
You can also upload models later from the dashboard — see Deploying Models.
- Before first install: overwrite
-
Verify health
Section titled “Verify health”Confirm all three services are healthy:
Terminal window docker compose -f compose/docker-compose.release.yml psExpect three containers in a
healthystate. Then open the dashboard URL the installer printed and sign in with the admin account.
Day-2 operations
Section titled “Day-2 operations”Deploy a newer bundle. The update snapshots the database first so you have a rollback path.
sudo ./update.shThe 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.
./uninstall.sh # stop the stack, KEEP all data./uninstall.sh --purge # also delete models + database (confirmation prompt)If something goes wrong
Section titled “If something goes wrong”| Symptom | What it means |
|---|---|
Bundle manifest missing | You ran the installer from a source folder, not an assembled bundle. Use the bundle directory you copied from USB. |
Architecture mismatch | Wrong bundle profile for this box’s CPU. Use the matching profile. |
NVIDIA toolkit not wired in | A 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 unhealthy | First-run TensorRT compile (GPU) takes 2–3 min — wait. Otherwise check the inference logs. |
| Archive checksum mismatch | Corrupted or tampered USB media. Re-copy the bundle and retry. |
See the full Troubleshooting runbook for symptom-keyed fixes.