Installing the box
One command, four questions, a banner. About 25 minutes on a blank Ubuntu machine, most of it download.
Before you start
| Machine | Ubuntu 24.04 or macOS. On Windows, run this inside WSL2 Ubuntu — the installer stops if you try it anywhere else. WSL2 puts the box behind a NAT the same way a virtual machine does, so other devices on the office network cannot reach it without a netsh interface portproxy forward; the from-home mesh works regardless. For a box the whole office reaches on the LAN, prefer a machine running Ubuntu or macOS directly. |
| Network | For a box that stays in one place, give it a fixed address (a DHCP reservation on the router, or a static IP). The box bakes its address into its certificate at install; if a plain DHCP lease later hands it a different one, <name>.local stops matching until you re-run nufi-box announce. |
| Docker | Engine plus Compose v2. On Ubuntu the installer offers to install Docker for you; on macOS install Docker Desktop or OrbStack first. |
| git | Any recent one (2.25 or newer; Ubuntu 24.04 ships 2.43). On macOS the first git command offers to install the Command Line Tools if they are missing; on Ubuntu, sudo apt-get install -y git if git --version says nothing. |
| Memory | On macOS, give the Docker VM at least 12 GB (Settings → Resources → Memory). The installer warns below 11 GB and carries on. The box itself uses about 3 GB running. |
| Disk | Budget 30 GB. Most of it is the model and the images. |
A GPU is optional. Without one the box answers from the CPU, which works and is slower; a machine serving a handful of people at once wants a GPU.
Get the box
The box is three folders of one repository: deploy/box, and beside it
deploy/platform/scenarios — nufi-box flows install runs the routine
builder studio/build_flows.py, which imports run_box and run from the
folder above it — and deploy/platform/adapters/nufi-cron, which nufi-box schedule list needs. Together they are about 1 MB. A sparse clone fetches
just those:
git clone --depth 1 --filter=blob:none --sparse https://github.com/dudaji-vn/nufi-app
cd nufi-app
git sparse-checkout set deploy/box deploy/platform/scenarios/studio deploy/platform/adapters/nufi-cron
cd deploy/boxThis takes a few seconds on any link. Naming scenarios/studio in the set
also brings the files at the root of scenarios/ (a sparse checkout always
includes a folder's parents) and leaves out scenarios/demo, twenty
megabytes of videos the box never reads.
Do not download the repository as one archive instead
(curl … codeload.github.com … | tar -xz): it is about 200 MB, of which
the box uses 1 MB, and on an office link that is ten to twenty minutes with
nothing printed — curl -s is silent while it waits, so it looks stuck.
Install
./install-box.sh --yes--yes takes every default. Drop it to be asked instead:
| Question | Default | What it decides |
|---|---|---|
| Box name | nufi | Yours to choose. Becomes the office address (<name>.local), the from-home address (<name>.box.<domain>) and the name on the certificate. Lowercase letters, digits and hyphens. Two boxes on one network or one coordinator must not share a name — see On the LAN and from home |
| Admin email | admin@nufi.local | The one login you use across all four products |
| Departments | legal,hr,ga,strategy | One drive folder, one team and one agent per name |
| Inference profile | ollama (macOS) or ollama-docker (Linux) | Where the model runs |
Inference profiles
| Profile | Where the model runs |
|---|---|
ollama | Ollama already on the host (macOS default) |
ollama-docker | Ollama in a container the box manages (Linux default) |
remote | Another machine on your network speaking the OpenAI API |
cloud | A hosted provider. The only profile where text leaves the building. |
ollama and ollama-docker ask which model; the default is qwen2.5:7b.
remote and cloud ask for a base URL and a key.
How long it takes
Measured, not estimated:
| Blank Ubuntu 24.04, 4 vCPU, 8 GB, no Docker, nothing cached | 25 min 40 s from the first command to the banner |
| A machine that already has the images and the model | about 75 seconds |
Nearly all of the difference is download. Docker Engine goes on, the installer
re-runs itself inside the new docker group, and the first image starts coming
down within two minutes.
The banner is the result
NuFi box "nufi" is up.
Chat: https://nufi.local:3080 (also https://<box-ip>:3080)
Agents: https://nufi.local:3001/choose
Console: https://nufi.local:3001
Admin panel: https://nufi.local:3002
Certificate: http://nufi.local/ ← laptops trust it once
Admin login: admin@nufi.local / <generated password>
Drives: <data dir>/drives/<department> → become that department's knowledge
Day two: nufi-box status | logs | drive add <name> | ca-cert | doctorFour URLs, one login, and where the folders live. Write the admin password
down now — it is generated during the install and it is in .env, which is
created mode 0600 and holds every other secret the box has.
If something goes wrong
./nufi-box doctorIt checks the things that actually break and says what to do about each in
plain words. Re-running ./install-box.sh is safe: it keeps the answers already
on disk unless you override them explicitly.