Provisioning¶
Provisioning is how an appliance learns which account it belongs to and where its backend is. It's driven by one small file — provision.conf — plus a set of environment variables the collector reads at runtime.
You normally never write these by hand: the dashboard generates the installer bundle (or seed ISO) for you. This page documents what's inside so you can verify, customise, or troubleshoot.
provision.conf¶
This file lives at /etc/acutis-provision.conf on the install media and is read once on first boot, then deleted so the token can't be reused.
| Field | Required | Purpose |
|---|---|---|
PROVISION_TOKEN |
Yes | One-time site token. On the self-service path it is the tenant API key; on the MSP path it's redeemed at /api/v1/provision/activate to mint a new tenant. |
BACKEND_URL |
Yes | Base URL of your Acutis backend, e.g. https://app.acutisgo.com. Everything else is derived from this. |
TENANT_ID |
Optional | Set it to take the self-service path (token = api_key, tenant already known). Leave it out to take the MSP path (activate to create a new tenant). |
COLLECTOR_KEY |
Optional | Shared transport secret echoed in the collector's payload body. On the MSP path the activate response supplies it automatically. |
A minimal self-service provision.conf looks like:
PROVISION_TOKEN=<your tenant api key>
BACKEND_URL=https://app.acutisgo.com
TENANT_ID=<your tenant id>
Set the production backend URL — do not rely on the built-in default
The collector's compiled-in default for FASTAPI_COLLECTOR_URL is a legacy development address (https://192.168.0.24/...) and is not valid for production. Always set BACKEND_URL in provision.conf to your real backend (for the Acutis cloud that is https://app.acutisgo.com). First boot derives FASTAPI_COLLECTOR_URL as <BACKEND_URL>/api/v1/collector/submit and writes it into the runtime environment file — so a correct BACKEND_URL is all you need.
Runtime environment (/etc/acutis-collector.env)¶
After first boot, the resolved secrets live in a root-only file (0600, owned by root:root) — deliberately not the systemd unit, which would be world-readable. The collector service loads it via EnvironmentFile=.
| Variable | Meaning |
|---|---|
FASTAPI_COLLECTOR_URL |
Full submit endpoint, e.g. https://app.acutisgo.com/api/v1/collector/submit. The base of this URL is reused for every other backend call (device list, vault, check-in, CLI queue, self-update). |
TENANT_API_KEY |
Sent as the X-API-Key header on every backend call. This is how the appliance authenticates. |
TENANT_ID |
Your site/tenant id — scopes vault lookups and telemetry. |
COLLECTOR_KEY |
Shared secret included in the submit/check-in payload body, validated by the backend on /collector/submit. |
How the appliance authenticates¶
Every request the appliance makes to the backend carries the header:
The backend resolves the tenant from that key and refuses anything outside it. If the key is stale, rotated, or revoked, the appliance logs a loud error (HTTP 401/403 from /api/v1/collector/devices or the vault) and reuses its last known-good device list rather than inventing devices — so a bad key degrades safely instead of polling phantom hosts. The fix is to re-provision TENANT_API_KEY.
Re-downloading rotates the key
Downloading a fresh installer bundle (or provision.conf) from the dashboard mints a new api_key and retires the old one. That's intentional — it's admin-only so a viewer can't knock a live collector offline. Re-download = re-provision.
TLS options¶
The appliance separates backend-bound TLS from device-bound TLS — they're controlled independently.
Backend channel — BACKEND_CA_CERT¶
Set BACKEND_CA_CERT to a path containing your backend server's certificate (or CA bundle) to enable full identity pinning on the collector↔backend connection. With it set and the file present, the appliance validates the backend's cert on every call — submit, vault retrieval, self-update, everything.
- If unset: traffic is still HTTPS-encrypted, but the certificate is not validated (acceptable for a backend behind a self-signed cert on a trusted path, but pinning is strongly recommended for production).
- Using
https://forBACKEND_URLis what keeps collector↔backend credentials off the wire in cleartext in the first place — always usehttps://.
Device channel — DEVICE_CA_CERT / DEVICE_TLS_VERIFY¶
These govern TLS to your devices (PAN-OS XML API, hypervisor APIs) — completely separate from the backend setting. They exist as a single switch instead of scattered verify=False calls.
| Variable | Effect |
|---|---|
DEVICE_CA_CERT |
Path to a CA/bundle that signs your devices' management certs. If set and present, device API identity is pinned. |
DEVICE_TLS_VERIFY |
Set to true/1/yes to require valid device certs without supplying a bundle. |
- Default (both unset): device API calls do not validate certs — convenient for LAN gear with self-signed certs, and the collector logs a one-time
WARNso you know it's off. - Production guidance: pin device identity (
DEVICE_CA_CERT, or at minimumDEVICE_TLS_VERIFY=true) so a host impersonating your firewall on the LAN can't harvest the admin password.
To set any of these, add them to /etc/acutis-collector.env and restart the service:
sudo nano /etc/acutis-collector.env
# add e.g. BACKEND_CA_CERT=/etc/acutis/backend-ca.pem
sudo systemctl restart network-collector
Other tunables (optional)¶
| Variable | Default | Purpose |
|---|---|---|
POLL_INTERVAL |
60 |
Seconds between poll cycles. |
GATEWAY_IP / SUBNET |
auto-detected | Override the auto-detected gateway/subnet if detection is wrong. |
MAX_CACHED_PAYLOADS |
5000 |
Cap on locally buffered telemetry during a backend outage (newest kept). |
OLLAMA_AGENT_ENABLED |
auto |
Local AI field agent: auto (on iff a local model answers), true, or false. |
Next: Onboarding devices.