NuajLens · Deployment
NuajLens is a self-hosted vulnerability scanner that installs from one package. Inside it are the web console, the datastore, the scheduler, the report engine and the nuclei scan engine itself — so there is no database to provision, no web server to configure and nothing fetched from the network while it installs. It runs under systemd as its own service account, keeps every piece of state in one directory, and serves its console over HTTPS from the first time it starts.
Requirements
| Operating system | Linux with systemd — Debian, Ubuntu, RHEL, Fedora, Rocky, Alma and openSUSE |
|---|---|
| Architectures | x86_64 and aarch64 |
| Packaging | deb and rpm, installed and upgraded by name through your own package manager |
| Memory | 2 GB |
| Database | None to provision — the datastore is part of the package |
| Web server | None to configure — the console is served by the service itself, over HTTPS on port 8443. Your own certificate, or a reverse proxy in front, are both supported |
| Network at install | Nothing is fetched. An air-gapped host installs identically |
| Scan engine | The open-source nuclei engine, bundled in the package and read-only to the service |
| State | One directory, /opt/nuajlens |
| Service account | Created by the package. The systemd unit is hardened and does not run as root |
| Multi-customer | One install serves a book of clients — assets, schedules and reports are kept per customer |
| Price | Free of charge, commercial use included. No licence key, no seat count, no trial timer |
The package
Installing a scanner should not mean trusting a chain of downloads at the moment you are least able to inspect them. Your own package manager installs one file, and that file is complete.
What it installs
One Go binary holding the web console, the datastore, the scheduler and the report engine — and a matching nuclei binary beside it, owned by dpkg or rpm.
What it configures
The service account, a hardened systemd unit, and a self-signed TLS certificate — generated before the service is started, so the console is not served in plaintext during setup.
What it does not do
At install time it does not reach the network, add a repository of its own, or run a scan — and the only port it opens is the console you are about to log into.
State
/opt/nuajlens/ ├── bin/ nuajlens + scan engine ├── nuajlens.conf configuration └── data/ db, scan logs, templates, cert
Copy that directory and you have copied the install: the asset inventory, the schedules, the scan history, the triage decisions your team made and the certificate the console is served with. Move it to another host with the same package installed and the console comes up where you left it.
Removing the package leaves the directory in place, so a reinstall finds your scan history again. Purging takes everything — which is the point of having exactly one path to purge.
Air-gapped hosts
Scanners are often deployed exactly where downloads are not welcome: a management network, a segment behind a jump host, a site whose whole point is that it has no route out. Because every part of NuajLens — the scan engine and its templates included — is inside the package, such a host installs the same way as any other, and the first scan can run before the machine has ever spoken to the internet.
What an isolated host gives up is updates arriving by themselves. Templates change daily and the engine every few weeks, and both normally update independently of the package. On a disconnected host they advance when the package does — and engine-updates = off makes that explicit: it pins the install to the bundled binary and makes the API refuse version changes, restoring the property that every executable the service can run is read-only to it.
Engine updates
On a connected host the scan engine can move forward without waiting for a package release. What arrives from the network still has to earn it. Before a fetched build can become the active engine it must:
Only then does the active pointer move, by atomic rename — a scan starting mid-swap sees one version or the other, never a broken link. Any failure discards the download and leaves the running engine untouched. The bundled engine is never garbage-collected and the service cannot write to it, so a rollback target exists even on a host that has been offline since the day it was installed. Version changes are refused while a scan is in flight, and every scan records the engine that produced it.
Access
There is no licence key, no seat count and no trial timer. NuajLens is licensed rather than public domain, and builds are served from download.nuaj.com, which is opened per organisation.
The End User Licence Agreement is the whole agreement, and it is worth the ten minutes. NuajLens is supplied free of charge and without warranty, and you are responsible for holding authorisation to test every asset you register.
One email naming your organisation, your distribution and your architecture. Access is usually granted the same business day.
The reply carries the repository setup — one keyring and one source line, added once per host. From then on apt install nuajlens or dnf install nuajlens, and your package manager verifies every install and upgrade against that key.
Questions