Status website
nb web serves a small, read-only status website for glancing at backup health
from a browser or phone — the same information as nb run, nb medium,
nb report, and nb status, without shell access.
What it is
nb web starts a small HTTP server that renders NBackup’s catalog, run history,
and live progress as a mobile-friendly website. It is the browser view of the
inspection commands you already know — an at-a-glance dashboard for when you don’t
have a shell.
nb web # serve on :8080 (reachable on the LAN)
nb web --addr 127.0.0.1:8080 # loopback only, e.g. behind a reverse proxy / VPN
--addr sets the listen address (default :8080, i.e. 0.0.0.0:8080). Binding
happens up front, so a port already in use is reported immediately rather than
swallowed.
Read-only by design
The website never starts, prunes, relabels, or alters anything, and takes no
lock, so it is safe to run continuously alongside a scheduled nb dump,
nb sync, or nb prune. This is structural, not a promise: the server renders
from a read-only view of the engine that exposes only reads, so no HTTP route has a
verb reachable to mutate the catalog or touch a medium. Every route is a plain
GET. It is a status page, not a management console.
Because it is only a reader, it also stays current without a restart: the
writing commands run in their own processes and rewrite the catalog cache, and
nb web re-reads that cache (and the run-history and live-progress files) when it
changes on disk, so the browser always sees the latest state.
Pages
| Page | What it shows |
|---|---|
Overview (/) |
Run count, total bytes, media summary, the last dump, and a banner while a run is in flight (auto-refreshing). |
Runs (/runs, /runs/<id>) |
Every run newest-first with its copies; a run detail lists its archives and each copy’s medium/label. |
DLEs (/dles, /dles/<slug>) |
One row per backup source, and a per-DLE archive timeline across runs. |
Media (/media, /media/<name>) |
Capacity utilization per medium; a medium detail adds the full/incremental split, a growth projection, and a used-capacity-over-time chart — the browser view of nb medium <name>. |
Drills (/drills) |
The recovery-drill coverage rollup and per-DLE ledger (what each DLE’s last drill tested, against which copy, how much it read, pass/fail), plus recent drill runs. |
History (/report) |
The recent run history — the browser view of nb report. |
Status (/status) |
The live run’s progress, auto-refreshing while a run is running. |
Security
There is no authentication and no TLS. Expose it only on a trusted network —
or bind it to 127.0.0.1 and front it with a reverse proxy or a VPN (e.g.
Tailscale) for remote access.
Running it always-on
nb web runs in the foreground until you stop it (Ctrl-C). To keep the dashboard
always-on, the .deb/.rpm packages ship an optional nb-web.service; enable it
with:
systemctl enable --now nb-web
Backups themselves stay on cron — the service only serves the status pages.
Copy-deploy reloads (--reload)
--reload is a development convenience: the server watches its own executable and
re-execs itself when the binary is replaced on disk, so you can iterate by copying
a fresh nb over the old one. Use an atomic replace (install nb DEST, or
cp nb DEST.new && mv DEST.new DEST) — not an in-place cp, which the kernel
refuses with “text file busy” while the binary is running. It is off by default;
leave it off in production.