Appearance
Deployment
Installing, upgrading, and the two procedures you want written down before you need them.
Two commands
On the machine that will coordinate:
bash
sudo apt install ./diffuse-coordinator_1.0.0_amd64.deb
sudo diffuse-coordinator licence set ./licenceThe first asks one question, the name of your organisation, which names the deployment's certificate authority and appears in every certificate the cluster issues. Then it generates that authority, creates the first administrator, and starts the coordinator and the API. If it could not start something, it says so and prints the service's own log rather than claiming success.
The second checks the licence before replacing anything, installs it, and hands you the console address and the credentials for it:
Licence installed.
organisation Universitätsklinikum Freiburg
edition enterprise
nodes 24
expires 2027-06-30
features training, distillation, fast-backend
It is ready. Sign in at https://coordinator.internal:7446/console
username owner
one-time password 7f3Kq2mXvB9t
Change it at first sign-in. This is the only time it is shown.Use the package manager
apt install ./file.deb, never dpkg -i. Neither dpkg -i nor rpm -i resolves dependencies, and a package whose dependency is missing is left unpacked but not configured, a state from which every later apt operation on that machine fails until somebody repairs it by hand. The leading ./ is how apt tells a local file from a repository name.
And a machine that computes
bash
sudo apt install ./diffuse-node-agent_1.0.0_cpu_amd64.deb
sudo diffuse-node-agent enroll --token DFE1-...The token comes from the coordinator:
bash
sudo diffuse-coordinator token create --pool lab --max-uses 10 --ttl 24hJoin token DCAJJWAW created.
usable 10 times, until 2026-08-24 19:12:04Z
this is the only time the full token is shown.
Or, if the agent binary is already deployed:
diffuse-node-agent enroll --endpoint https://coordinator.internal:7444 \
--token DFE1-DCAJJWAW-FSM2F90QT94QNNDFVTG9M2YB18-KDQP282HESYX3XJPMEJ2GVZVC8-FWEnrolling then reports what happened:
Enrolled as node-01.
identity /var/lib/diffuse-node-agent
coordinator https://coordinator.internal:7443
expires in 89 days
This node is in the pool.enroll writes the identity, hands it to the service user, starts the agent and waits to see it registered. Running it twice does nothing the second time.
All-in-one
The coordinator and an agent on the same machine is a supported and common shape: a single workstation that both decides and computes. Install both packages, enrol against the loopback, and everything else is identical.
bash
sudo apt install ./diffuse-coordinator_1.0.0_amd64.deb
sudo apt install ./diffuse-node-agent_1.0.0_cpu_amd64.deb
sudo diffuse-coordinator licence set ./licence
sudo diffuse-node-agent enroll --endpoint https://127.0.0.1:7444 --token DFE1-...Nothing about the security model relaxes because the two are on one host. The agent still authenticates with a certificate, and the connection is still mutually authenticated TLS over the loopback.
Air-gapped
The intended case rather than an afterthought.
The offline bundle is a tar archive containing both packages, the documents and the digests. It contains no script: everything is installed by the package manager, and the packages carry both inference backends with every dependency they import. Nothing is fetched at install time and nothing is fetched when a node is given a model.
Models arrive the same way. Put a file on the coordinator and import it:
bash
sudo mv your-model.gguf /var/lib/diffuse-models/
sudo diffuse-coordinator model import --from /var/lib/diffuse-models/your-model.gguf/var/lib/diffuse-models is created at install, owned by the service user and group-writable, so an administrator in the diffuse group drops a file in without sudo. Importing from a home directory does not work and the refusal explains why: the coordinator runs as diffuse, not as you, and sudo changes who typed the command rather than who runs the service.
The one thing to do by hand
Copy /var/lib/diffuse-coordinator/root-ca.key somewhere offline, then delete it from the machine. It signs certificates for the whole deployment and the coordinator does not need it to run, only to issue new service certificates, which is rare and deliberate.
Upgrading
Install the new package over the old one. Configuration files you have edited are kept, the services are restarted, and the state directory is untouched.
Upgrade the coordinator first, then the agents. The wire contract is versioned and an older agent talking to a newer coordinator is a supported state for the length of a rolling upgrade, which is what makes it possible to do the fleet in batches.
Backup and restore
One directory is irreplaceable: /var/lib/diffuse-coordinator. It holds the enrolment authority and its key, every node identity, the accounts, the API keys, the audit trail, the datasets and every adapter. /etc/diffuse is worth a copy too, for the service certificates and the configuration.
bash
sudo systemctl stop diffuse-coordinator diffuse-api
sudo tar czf diffuse-backup-$(date +%Y%m%d).tar.gz \
-C / var/lib/diffuse-coordinator etc/diffuse
sudo systemctl start diffuse-coordinator diffuse-apiThe archive contains private keys. It belongs wherever your organisation keeps key material, encrypted at rest, and not on the machine it came from.
Restoring onto a new machine, in this order, because the order is the thing that matters:
bash
# 1. Install without letting the package create a deployment.
sudo DIFFUSE_NO_AUTO_INIT=1 apt-get install -y ./diffuse-coordinator_1.0.0_amd64.deb
# 2. Put the deployment back.
sudo tar xzf diffuse-backup-YYYYMMDD.tar.gz -C /
sudo chown -R diffuse:diffuse /var/lib/diffuse-coordinator
# 3. Start it.
sudo systemctl enable --now diffuse-coordinator diffuse-apiCheck it came back:
bash
diffuse-coordinator nodesNODE POOL HEALTH CORES RAM ACCELERATOR LAST SEEN LICENSED
node-01 lab healthy 16 62.7 GiB RTX 4090 1.2s yes
node-02 lab healthy 8 15.5 GiB — 0.9s yesThe nodes need nothing. Their identities were issued by the authority you have just restored, so they reconnect on their next heartbeat. If the new machine has a different name, either give it the old name in DNS or re-enrol each node.
Starting over
bash
sudo apt purge diffuse-coordinator diffuse-node-agent
sudo rm -rf /var/lib/diffuse-coordinator /var/lib/diffuse-node-agentpurge removes the software and the configuration it owns. The second line is the deployment itself, which belongs to you rather than to the package manager, so nothing removes it on your behalf.
A half-cleaned machine is the one failure worth naming: the enrolment authority and the service certificates are removed by different commands, and if only one survives you have certificates signed by one authority beside a trust store naming another. The package refuses to generate a new authority on top of half a deployment, and the coordinator refuses to start with a certificate its own trust store cannot verify, naming both files. Neither is a state you can reach silently.
If your site already has a certificate authority
bash
sudo DIFFUSE_NO_AUTO_INIT=1 apt-get install -y ./diffuse-coordinator_1.0.0_amd64.deb
sudo diffuse-coordinator init \
--root-ca-cert /path/to/root.crt --root-ca-key /path/to/root.key
sudo systemctl enable --now diffuse-coordinator diffuse-apiAdd --no-owner if your accounts come from configuration management or an identity provider rather than from init.
