Get the server running
This tutorial takes you from a checkout of the repository to a running server with an admin login. It takes about ten minutes, most of it waiting on image builds.
What you need
Section titled “What you need”- Docker with the Compose plugin (
docker compose, notdocker-compose) - uv on the host, used once to generate NATS auth keys
- A hostname pointed at the machine. The stack publishes its services
through caddy-docker-proxy
labels on an external Docker network named
caddy, so a caddy-docker-proxy container should already be running on that network. It handles TLS for every hostname automatically.
The server stack is four services: PostgreSQL, NATS with JetStream, the
FastAPI application (everwas-api), and the dispatcher that handles
ingest, alerting, and scheduling.
1. Configure the environment
Section titled “1. Configure the environment”Copy the template and open it:
cp .env.example .envSet the hostname your fleet and your browser will use:
EVERWAS_DOMAIN=rmm.example.comThe web app and the API share this one origin on purpose, and agents dial
wss://nats-rmm.example.com (its own hostname, derived from yours by
default). The comments in .env.example explain both choices.
Generate the secrets:
# session cookie signingopenssl rand -hex 32 # → EVERWAS_SECRET_KEY
# internal NATS password for the api/dispatcheropenssl rand -hex 24 # → EVERWAS_NATS_SERVER_PASSWORD
# and a strong POSTGRES_PASSWORD of your choosingThen generate the NATS auth-callout keypair. This is what lets the server vouch for agents when they connect:
cd server && uv run everwas gen-nats-keysIt prints two lines, EVERWAS_NATS_AUTH_SEED=... and
EVERWAS_NATS_AUTH_ISSUER=..., ready to paste into .env.
Finally, make sure EVERWAS_NATS_PUBLIC_URL matches your domain:
EVERWAS_NATS_PUBLIC_URL=wss://nats-rmm.example.comThis URL is baked into each agent’s config at enrollment, so it is worth getting right before the first agent enrolls. Changing it later does not move agents that are already in the field.
2. Start the stack
Section titled “2. Start the stack”make upThis builds and starts everything in the mode set by EVERWAS_MODE in
.env. The default is dev, which gives you hot reload and a
Mailpit instance at mail-rmm.example.com
so alert emails land somewhere you can see them. Switch to prod when you
mean it.
Apply the database migrations:
make migrate3. Create your login
Section titled “3. Create your login”make admin EMAIL=you@example.comThe command prompts for a password and creates (or updates) the admin
user. Now open https://rmm.example.com and sign in.
You have a server and an empty fleet. The next step is enrolling your first agent.
If something is off
Section titled “If something is off”make ps shows service health, and make logs SVC=everwas-api tails one
service. The compose file gives PostgreSQL and NATS healthchecks, so a
service stuck in starting usually means a missing .env value; the
compose file fails fast with a message naming the variable.