Files
FabledSteward/README.md
T
bvandeusen 88ab5b917e chore: rename project Roundtable → Steward
Renames the Python package directory, CLI command, env var prefix,
docker-compose service/container/image, Postgres role/db, and all
visible branding. Marketing form is "Fabled Steward".

Clean break from the previous rebrand: drops the fabledscryer→roundtable
import shim in __init__.py and the FABLEDSCRYER_* env var fallback in
config.py and migrations/env.py. Env vars are now STEWARD_* only.

Heads-up for existing deployments:
- Postgres user/db renamed fabledscryer → steward in docker-compose.yml.
  Existing volumes need the role/db renamed inside Postgres, or override
  POSTGRES_USER/POSTGRES_DB to keep the old names.
- Host-agent systemd unit is now steward-agent.service. Existing agents
  keep running under the old name; reinstall to switch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 16:20:14 -04:00

90 lines
3.0 KiB
Markdown

# Steward
A self-hosted network monitoring and infrastructure management hub for home servers. Steward gives you a single pane of glass over your hosts, services, and automation — with live-updating dashboards, alerting, and Ansible integration.
---
## What It Does
- **Ping monitoring** — TCP/ICMP probes with live latency history and configurable thresholds
- **DNS monitoring** — resolution checks with optional expected-IP validation
- **Ansible** — browse playbooks, trigger runs, stream output live
- **Alerting** — threshold-based rules against any monitored metric, with email and webhook (Discord-compatible) notifications
- **Plugins** — extend with additional data sources; Traefik metrics included out of the box
- **Dashboard widgets** — all monitors and plugins contribute live-updating widgets
No JavaScript framework. No build step. No external workers or message brokers.
---
## Quick Start — Docker
```bash
cp .env.example .env
# Set STEWARD_DATABASE_URL in .env
docker compose up -d
```
Open `http://localhost:5000`. On first run you'll be prompted to create the admin account.
---
## Quick Start — Bare Metal
Requires Python 3.11+ and PostgreSQL.
```bash
python -m venv .venv && source .venv/bin/activate
pip install -e .
cp config.example.yaml config.yaml
# Edit config.yaml — set database.url at minimum
steward --host 0.0.0.0 --port 5000
```
ICMP ping requires `CAP_NET_RAW` or the `setuid` ping binary. TCP mode (the default) needs no elevated privileges.
---
## Configuration
Only two things must be set to run the app:
| What | How |
|---|---|
| Database URL | `STEWARD_DATABASE_URL` env var or `database.url` in `config.yaml` |
| Secret key | Auto-generated on first run and saved to `/data/secret.key` |
Everything else — SMTP, webhooks, monitor intervals, Ansible sources, plugin settings — is configured through the web UI at `/settings/`.
---
## Plugins
Drop a directory into `plugins/` and enable it via the Settings UI. The Traefik plugin is included:
```
plugins/
└── traefik/ ← included; enable in Settings
```
See `docs/plugins/` for a full plugin development guide.
---
## Documentation
| Document | Contents |
|---|---|
| `docs/architecture.md` | How the app works: startup sequence, routing, scheduler, DB pattern |
| `docs/core/configuration.md` | Bootstrap config, DB-backed settings, all setting keys and defaults |
| `docs/core/monitors.md` | Ping and DNS monitors: probe logic, metrics emitted, data models |
| `docs/core/alerting.md` | Alert rules, state machine, notification channels, template variables |
| `docs/core/ansible.md` | Playbook sources, run lifecycle, SSE streaming |
| `docs/plugins/overview.md` | Plugin system: how loading works, plugin.yaml schema, required exports |
| `docs/plugins/writing-a-plugin.md` | Step-by-step plugin development guide |
| `docs/plugins/traefik.md` | Traefik plugin: config, metrics, alert rule examples |
| `docs/reference/code-map.md` | Where every key function, model, and route lives in the codebase |