Documentation
Install the ServerMind server with Docker Compose, activate it, and add your Linux servers from the console.
How It Works
You run the ServerMind server on your own infrastructure. It serves the web console and accepts agent connections on port 443. Each Linux machine you manage runs the ServerMind agent, which connects out to your server — agents never need inbound ports.
Browser ──HTTPS / WebTransport──► ServerMind server (:443) ◄──QUIC── Agent
│ │
├── PostgreSQL ├── servermind-agent-collector
├── Valkey ├── servermind-agent-monitor
└── Web console (built in) └── servermind-agent-controlThe free tier covers 1 server. See pricing for paid plans.
Requirements
Server
- A Linux host with Docker Engine and the Docker Compose plugin (
docker compose). - Port 443 reachable from your browsers and agents, on both TCP and UDP.
- Outbound HTTPS to
license.servermind.io(activation) andpackages.servermind.io(agent releases).
Agent (managed machines)
| Requirement | Details |
|---|---|
| Init system | systemd |
| C library | glibc 2.31 or newer (most distributions released since ~2020) |
| CPU architecture | x86_64 (ARM64 coming soon) |
| Privileges | root (the installer runs with sudo) |
| Tools | curl (tar and openssl are installed automatically if missing) |
| Family | Examples |
|---|---|
| Debian-based | Debian, Ubuntu, Mint, Pop!_OS |
| RHEL-based | RHEL, Rocky, Alma, CentOS, Fedora, Oracle, Amazon Linux |
| SUSE | openSUSE, SLES |
| Arch-based | Arch, Manjaro, EndeavourOS, CachyOS |
Releases below the glibc floor, such as CentOS 7/8, Ubuntu 18.04 or Amazon Linux 2, are not supported.
Install the Server
The server runs with Docker Compose: the ServerMind server image (packages.servermind.io/servermind-server:latest) plus its database (PostgreSQL) and cache (Valkey), which the compose file runs for you. The compose file and image are published on packages.servermind.io — free to download, no account or key needed. You activate the server afterwards with a code from the customer portal.
Step 1 — Download the compose file
mkdir servermind && cd servermind
curl -fsSLO https://packages.servermind.io/server/docker-compose.ymlStep 2 — Set the database password
The compose file refuses to start without POSTGRES_PASSWORD. Put it in a .env file next to it:
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
chmod 600 .envStep 3 — Start
docker compose up -dStep 4 — Verify
docker compose ps
curl -sk https://localhost/api/v1/health/liveWhat the compose file sets up:
| Service | Reachable on |
|---|---|
| ServerMind server | 443/tcp and 443/udp (public) |
| Database (PostgreSQL) | this host only — never exposed |
| Cache (Valkey) | this host only — never exposed |
/etc/servermind, which lives in a Docker volume managed by the compose file. Back up that volume together with the database volume: without the master key, encrypted secrets in the database cannot be read.Activation & First Login
https://<your-server> in a browser and accept the self-signed certificate warning (see TLS Certificates).license.servermind.io for this step.Add Servers (Agents)
Agents are installed from your own ServerMind server. The console builds the exact command for you, including a one-time registration token and your server's certificate fingerprint.
Get the install command
The command looks like this:
curl -fsSL -k https://<your-server>/install.sh | sudo bash -s -- \
--token sm_<registration-token> \
--cert-fingerprint <sha256-fingerprint>-k, but everything after that is pinned: the installer checks the server certificate against --cert-fingerprint before it downloads the agent or enrolls, and aborts on a mismatch. Without a fingerprint it refuses to run unless you pass --insecure.Installer options
| Flag | Description |
|---|---|
| --token | Registration token from Install Agent (required) |
| --cert-fingerprint | SHA-256 fingerprint of the server certificate; pins TLS for download and enrollment |
| --name | Agent name to register with (optional) |
| --server-url | Server address (https://…); defaults to the server that served install.sh |
| --arch | CPU architecture; defaults to the output of uname -m |
| --insecure | Skip TLS verification when no fingerprint is given. Only for trusted, isolated networks |
What gets installed
The installer downloads the agent package from https://<your-server>/packages/, installs it, enrolls with your server and starts three systemd services:
| Service | Role |
|---|---|
| servermind-agent-collector | Holds the connection to your server and routes requests to the other two |
| servermind-agent-monitor | Read-only monitoring and queries |
| servermind-agent-control | Actions that change the system |
systemctl status servermind-agent-collector servermind-agent-monitor servermind-agent-control
sudo journalctl -u servermind-agent-collector -fNetwork
| Port | Protocol | Direction | Purpose |
|---|---|---|---|
| 443 | TCP | Browser / agent → server | HTTPS console and API, agent install, WebSocket fallback |
| 443 | UDP | Browser / agent → server | QUIC (agent connections) and WebTransport |
- Agents only make outbound connections; no inbound ports need to be opened on managed machines.
- QUIC over UDP 443 is the primary agent transport. If QUIC cannot connect, the agent falls back to WebSocket over TCP 443 and keeps retrying QUIC in the background.
- The server itself connects out to
license.servermind.io(activation and license check-ins) andpackages.servermind.io(new agent releases).
# Example: open the server ports with ufw
sudo ufw allow 443/tcp
sudo ufw allow 443/udpTLS Certificates
On first start the server generates a self-signed certificate automatically. It covers localhost and every address the server detects it can be reached on (LAN, VPN, public), so agents can connect by IP. Browsers show a warning for self-signed certificates that you accept once.
Agents don't rely on a certificate authority: the install command carries the certificate's SHA-256 fingerprint, and the agent pins it. This is why you should always use the command generated by Install Agent rather than --insecure.
Upgrade
Server
docker compose pull && docker compose up -dAgents
Agents are upgraded from the console, not by hand: open Fleet → Agent Updates, select the agents and start the update. Each agent verifies the package signature, installs it, checks its own health and rolls back automatically if the new version fails. Agents that are offline are updated when they reconnect.
Your server checks packages.servermind.io for new agent releases every 6 hours and accepts only releases with a valid ServerMind signature; agents download updates from your server, never from the internet.
Troubleshooting
Server
docker compose ps
docker compose logs -f backend
curl -sk https://localhost/api/v1/health/liveAgent doesn't appear in the console
- From the agent machine, check the server is reachable:
curl -sk https://<your-server>/api/v1/health/live. If it isn't, fix the firewall or use a different address in Backend address agents connect to. - Check the services and logs:
systemctl status servermind-agent-collector servermind-agent-monitor servermind-agent-controlandjournalctl -u servermind-agent-collector. - Restart:
sudo systemctl restart servermind-agent-collector servermind-agent-monitor servermind-agent-control. - To re-enroll, generate a fresh command in Install Agent and run it again.
Installer errors
| Message | Meaning |
|---|---|
| server certificate fingerprint MISMATCH | The certificate presented is not your server’s. Check the address; if it is right, something is intercepting TLS. |
| refusing to run without TLS verification | No --cert-fingerprint was given. Use the command from Install Agent. |
| must run as root | Run the command with sudo. |
| download failed | The server is not reachable at the given address, or no package exists for this CPU architecture. |