nvcl-agent.service, the Hub sees it as online, and you can deploy nodes onto it from the UI.
The Agent is the bare-metal / VM executor: it runs as a systemd service and manages each node’s processes as their own systemd units. Choose it when your nodes live on hosts or VMs you already manage and you don’t want a Kubernetes dependency. For the executor concept and the Agent-vs-Operator choice, see Executors.
Prerequisites
- OS — a
linux/x86_64host withsystemd. - Privileges —
rootorsudo. - Network — outbound HTTPS to the Hub (
https://hub.novacula.io). No inbound ports are needed. - API key — see Connect an executor to issue one. You’ll need the
exc_-prefixed key in the next step.
Steps
Run the installer
The production way to bring a host online is the Hub’s one-line installer: the Hub serves a script that downloads the Agent, writes its config, and starts it as a The script — served by the Hub and rendered from its latest active Agent release — downloads the self-contained Agent image, verifies its SHA-256 checksum, extracts it to
systemd service — the host then syncs to the Hub and reconciles whatever nodes it’s assigned. From the Connect Executor screen in the UI, copy the command (the Hub renders it for your organization, with your Hub URL already baked in). It looks like this:/opt/nvcl/agent, writes /etc/nvcl/agent.toml (mode 0600, with your Hub URL and API key baked in), registers nvcl-agent.service, and starts it. If no active Agent release is published yet, /install.sh returns a 404.| Variable | Required | Description |
|---|---|---|
NVCL_TOKEN | yes | Executor API key (exc_…). Baked into agent.toml as hub.token. |
NVCL_NAME | no | Executor identity in the Hub (unique per org). Defaults to the host’s hostname. |
NVCL_PREFIX | no | Stage /opt/nvcl and /etc/nvcl under this prefix instead of / (inspect the layout without touching the system). |
NVCL_SKIP_SYSTEMD | no | Set to 1 to skip the OS/arch gate and the systemd unit (e.g. containers). Combine with NVCL_PREFIX=<user-writable dir> for a root-free run. |
Confirm online in the UI
From Executors, your new executor row should be
online, with capabilities populated for every chain it supports.The executor reports in within a few seconds and the row turns online. If it stays offline:- Check
journalctl -u nvcl-agent.service -n 100for auth or network errors. - Confirm outbound HTTPS to the Hub URL.
- Verify the API key was copied without trailing whitespace.
What the installer does
Under the hood, the one-line command:- Downloads the self-contained Agent image tarball from the Hub’s latest active release and verifies its SHA-256 checksum.
- Extracts it to
/opt/nvcl/agent(launcherbin/agent, jars underlib/, and a bundled JRE underruntime/— no host Java needed). - Writes
/etc/nvcl/agent.toml(mode0600) with[source] type = "hub", the Hub URL (hub.url), your API key (hub.token), and the executor name. - Registers and starts
nvcl-agent.service(start on boot, restart on failure).
What the Agent owns on disk
After install:[agent] data_dir = "/var/lib/nvcl") holds everything the agent manages:
systemd units named nvcl-node-<id>-<role>.service. Node data is preserved: removing a node stops and deletes its units and releases its ports, but nodes/<id>/ stays on disk — delete it manually to reclaim space.
Managing the agent on the host
The installer runs the agent for you; you never start the daemon by hand. Manage it withsystemctl, and read what it observes with the agent CLI:
sudo systemctl stop nvcl-agent.service) does not stop the nodes — their nvcl-node-<id>-<role>.service units keep running.
Uninstall / wipe the host:
/opt/nvcl/agent keeping one .prev, and restarts). See Upgrade an executor.
Configuration (agent.toml)
The installer writes /etc/nvcl/agent.toml (mode 0600) for you; edit it afterward to tune behaviour, then sudo systemctl restart nvcl-agent.service (the config is read once at startup). A hub-driven config looks like:
[source] typeis the one mandatory key; in hub mode[hub] urlandtokenare required (the agent won’t sync without them).- Parsing is strict — an unknown key or section is a startup error.
- In hub mode, telemetry is routed through the Hub automatically; you don’t configure a collector here.
agent.toml — you set them per node in the UI. See Edit node configuration.
Hardening
- Keep
agent.tomlmode0600, owned byroot. The API key (hub.token) is the credential. - Let the Hub drive upgrades — self-update verifies the sha256 and keeps a
.prevfor rollback. - Restrict outbound to the Hub URL plus the per-chain client download mirrors if you want strict egress.
Next steps
- Deploy a node onto your fresh executor.