-
Notifications
You must be signed in to change notification settings - Fork 0
Deployment
Griffen Fargo edited this page Jun 25, 2026
·
1 revision
The simplest setup — one buoy instance on one machine:
curl -o buoy.yaml https://raw.githubusercontent.com/gfargo/buoy/main/buoy.yaml.example
# Edit buoy.yaml: set node.name
docker compose up -dAccess at http://your-server:8090.
Deploy buoy on each node. Each instance polls the others for the fleet overview.
Node 1 (compass):
node:
name: compass
tier: "Tier 1B"
network:
tailnet_domain: example.ts.net
peers:
- name: harbor
url: https://harbor.example.ts.net
tier: "Tier 1A"
- name: watch
url: https://watch.example.ts.net
tier: "Tier 2"Node 2 (harbor):
node:
name: harbor
tier: "Tier 1A"
network:
tailnet_domain: example.ts.net
peers:
- name: compass
url: https://compass.example.ts.net
tier: "Tier 1B"
- name: watch
url: https://watch.example.ts.net
tier: "Tier 2"Each node shows its own vitals + a fleet grid with live stats from peers.
your-domain.com {
reverse_proxy localhost:8090
}services:
buoy:
image: ghcr.io/gfargo/buoy:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.buoy.rule=Host(`buoy.your-domain.com`)"
- "traefik.http.services.buoy.loadbalancer.server.port=8090"server {
listen 443 ssl;
server_name buoy.your-domain.com;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}Important: Include the WebSocket upgrade headers for real-time features.
Buoy is Tailscale-aware. When accessed via a *.ts.net hostname, all generated service links use HTTPS tailnet URLs automatically.
network:
tailnet_domain: tailb82ead.ts.netCombine with Tailscale HTTPS:
# On the host
tailscale cert your-node.tailb82ead.ts.net
# Configure Caddy to use the cert| Mode | What works | Docker flags |
|---|---|---|
| Full (recommended) | Everything — CPU, temp, all disks, NVMe SMART, cron logs |
privileged: true, pid: host
|
| Medium | Containers, CPU, memory, root disk |
pid: host only |
| Minimal | Container stats only | Docker socket mount only |
| Demo | Mock data, no host access | None |
Buoy is lightweight:
- Memory: ~30-50MB RSS
- CPU: <1% average (spikes briefly during stats collection)
- Disk: ~14MB/day if history is enabled (auto-pruned)
- Network: ~1KB per peer poll per cycle
docker compose pull
docker compose up -dBuoy uses a single SQLite file for history — no migrations needed. Config format is backward-compatible within major versions.
For container orchestrators that prefer env vars over files:
docker run -d \
-p 8090:8090 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e BUOY_NODE_NAME=my-server \
-e BUOY_FEATURES_HISTORY=true \
-e BUOY_AUTH_TOKEN=my-secret \
--privileged --pid=host \
ghcr.io/gfargo/buoy:latest