Installer reference
Every variable the installer reads, what it installs where, and the deploy-at-scale pattern.
For anyone putting the install into configuration management, or who wants to read it before running it. The script itself is at https://dev.uptimecraft.com/install.sh and is meant to be read.
Variables
| Variable | Default | What it does |
|---|---|---|
UPTIMECRAFT_ENROLLMENT_TOKEN | required | The token from Settings → Servers. |
UPTIMECRAFT_VERSION | latest | Pin a release. |
UPTIMECRAFT_API | https://dev-api.uptimecraft.com | Where the agent reports. |
UPTIMECRAFT_DOWNLOAD_BASE | https://get.uptimecraft.com/agent | Where builds are fetched from. |
UPTIMECRAFT_BASE_URL | derived | Overrides the full download URL, version included. For testing against a local copy. |
UPTIMECRAFT_BIN_DIR | /usr/local/bin | Where the binary goes. |
UPTIMECRAFT_ETC_DIR | /etc/uptimecraft | Configuration, including the token. |
UPTIMECRAFT_STATE_DIR | /var/lib/uptimecraft | The agent's own state. |
UPTIMECRAFT_USER | uptimecraft | The system user to run as. |
There is no variable that skips verification, of either the signature or the checksum. A switch that turns verification off is a switch that ends up turned off.
What lands where
| Path | Mode | Contents |
|---|---|---|
/usr/local/bin/uptimecraft-agent | 0755 | The binary. |
/etc/systemd/system/uptimecraft-agent.service | 0644 | The unit. |
/etc/uptimecraft/ | 0750 root:uptimecraft | Configuration. |
/etc/uptimecraft/agent.env | 0640 root:uptimecraft | Your token and API URL. |
/var/lib/uptimecraft/ | 0700 uptimecraft | State, including the per-server key. |
The token is in a file rather than in the unit (world-readable) or on the command line (visible in ps to every user on the machine).
The agent's own options
The installer writes /etc/uptimecraft/agent.env and the unit reads it, so you will not normally touch these. Each is a flag with an environment variable behind it; the variable is what belongs in agent.env.
| Flag | Variable | Default | What it does |
|---|---|---|---|
-api | UPTIMECRAFT_API | https://dev-api.uptimecraft.com | Where to report. |
-state | UPTIMECRAFT_STATE | /var/lib/uptimecraft/agent.json | Where the per-server key is kept. |
-log-level | UPTIMECRAFT_LOG_LEVEL | info | Raise to debug when you are sending us a journal. |
-sample-interval | — | 10s | How often it reads the machine. Leave it alone; the reporting interval comes from your plan and is what we act on. |
-version | — | — | Print the version and exit. |
The enrollment token is only ever an environment variable, never a flag. A credential on the command line is visible in ps to every user on the machine.
The service
Runs as uptimecraft, Restart=always, and confined by systemd: NoNewPrivileges, ProtectSystem=strict, PrivateTmp, PrivateDevices, ProtectKernelTunables, ProtectKernelModules, ProtectControlGroups, RestrictAddressFamilies to IP only, and MemoryMax=128M with CPUQuota=10%.
The limits are generous by an order of magnitude for what it does. They exist so that an agent misbehaving is an agent that gets stopped, not one that takes your server with it.
Installing at scale
The installer is idempotent, so it can go straight into whatever you already use. One token, left with unlimited uses until it expires.
Ansible: fetch the script, then run it with the token from your vault, with a creates: guard on /usr/local/bin/uptimecraft-agent or a version check if you want converges to upgrade.
cloud-init: a runcmd entry with the token from your secret store. First boot is the right moment — see below.
Packer and golden images: install the binary and the unit, but do not enrol. Leave the token out of the image and supply it on first boot. An image that enrolled before being captured produces clones that all share one identity, and each one lands in Pending approval instead of being monitored.
Kubernetes: this agent monitors machines, not containers. Running it in a pod reports the node's figures from inside a namespace that may or may not see them correctly. Install it on the nodes, with whatever manages the nodes.
Verifying a release by hand
curl -fsSLO https://get.uptimecraft.com/agent/latest/uptimecraft-agent_linux_amd64.tar.gz
curl -fsSLO https://get.uptimecraft.com/agent/latest/SHA256SUMS
curl -fsSLO https://get.uptimecraft.com/agent/latest/SHA256SUMS.sig
curl -fsSL https://dev.uptimecraft.com/install.sh | sed -n '/BEGIN PUBLIC KEY/,/END PUBLIC KEY/p' > release.pub
openssl dgst -sha256 -verify release.pub -signature SHA256SUMS.sig SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
Both must pass. Verified OK from the first proves the checksum file is ours; the second proves the archive matches it.
Every release is built in CI from a tagged commit, signed with a key that exists only there, and then — as the last step of the release — downloaded anonymously and verified again, the way you would. A release that a stranger cannot install and verify does not get published.
Last updated 2 October 2026
Still stuck?
If this did not answer your question, tell us and we will fix the page as well as answer you.