9d12e3ecf1
- Module path: gitea.lerkolabs.com/lerko/uptop - Binary: cmd/uptop/ - All imports updated to full module path - Env vars: UPKEEP_* → UPTOP_* - Prometheus metrics: upkeep_* → uptop_* - Default DB: uptop.db - Docker image: lerko/uptop - All docs, compose files, CI updated Only remaining "go-upkeep" reference is the fork attribution in README.
121 lines
3.2 KiB
Markdown
121 lines
3.2 KiB
Markdown
# uptop
|
|
|
|
Self-hosted uptime monitor with a TUI you can access over SSH. No browser, no install on the client — just `ssh -p 23234 your-server`.
|
|
|
|
Built on the foundation of [RDGames/go-upkeep](https://github.com/RDGames/go-upkeep).
|
|
|
|
## What it does
|
|
|
|
- **6 check types**: HTTP, Push (heartbeat), Ping, Port, DNS, Groups
|
|
- **9 alert providers**: Discord, Slack, Email, Ntfy, Webhook, Telegram, PagerDuty, Pushover, Gotify
|
|
- **Config as code**: define monitors in YAML, apply declaratively, version control your setup
|
|
- **HA clustering**: leader/follower with automatic failover
|
|
- **Prometheus metrics**: `/metrics` endpoint for Grafana dashboards
|
|
- **Public status page**: HTML + JSON, toggle with an env var
|
|
- **SQLite or Postgres**: SQLite for single-node, Postgres for production
|
|
- **Uptime Kuma import**: migrate from Kuma with one command
|
|
|
|
## Quick start
|
|
|
|
```bash
|
|
go run cmd/uptop/main.go
|
|
ssh -p 23234 localhost
|
|
```
|
|
|
|
Seed some demo data to see it in action:
|
|
|
|
```bash
|
|
go run cmd/uptop/main.go -demo
|
|
```
|
|
|
|
## Install
|
|
|
|
### From source
|
|
|
|
```bash
|
|
go install gitea.lerkolabs.com/lerko/uptop/cmd/uptop@latest
|
|
```
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
docker pull lerko/uptop:latest
|
|
docker run -p 23234:23234 -p 8080:8080 -v ./data:/data lerko/uptop
|
|
```
|
|
|
|
### Binary
|
|
|
|
Download from [Releases](https://gitea.lerkolabs.com/lerko/uptop/releases).
|
|
|
|
## Config as code
|
|
|
|
Export your current monitors:
|
|
|
|
```bash
|
|
uptop export -o monitors.yaml
|
|
```
|
|
|
|
Apply a config file:
|
|
|
|
```bash
|
|
uptop apply -f monitors.yaml
|
|
uptop apply -f monitors.yaml --dry-run # see what would change
|
|
uptop apply -f monitors.yaml --prune # delete anything not in the YAML
|
|
```
|
|
|
|
See [docs/config-as-code.md](docs/config-as-code.md) for the full reference.
|
|
|
|
## Docker
|
|
|
|
```yaml
|
|
services:
|
|
monitor:
|
|
build: .
|
|
restart: unless-stopped
|
|
stdin_open: true
|
|
tty: true
|
|
ports:
|
|
- "23234:23234"
|
|
- "8080:8080"
|
|
volumes:
|
|
- ./data:/data
|
|
- ./ssh_keys:/app/.ssh
|
|
environment:
|
|
- UPTOP_DB_TYPE=sqlite
|
|
- UPTOP_DB_DSN=/data/uptop.db
|
|
- UPTOP_STATUS_ENABLED=true
|
|
- UPTOP_CLUSTER_SECRET=change-me
|
|
```
|
|
|
|
First run: attach to the container (`docker attach uptop`), go to the Users tab, add your SSH public key. Then detach with `Ctrl+P, Ctrl+Q` and connect normally over SSH.
|
|
|
|
## Environment variables
|
|
|
|
| Variable | Default | What it does |
|
|
|---|---|---|
|
|
| `UPTOP_PORT` | `23234` | SSH server port |
|
|
| `UPTOP_HTTP_PORT` | `8080` | HTTP server port (status page, push, metrics) |
|
|
| `UPTOP_DB_TYPE` | `sqlite` | `sqlite` or `postgres` |
|
|
| `UPTOP_DB_DSN` | `uptop.db` | Database path or connection string |
|
|
| `UPTOP_STATUS_ENABLED` | `false` | Enable public status page |
|
|
| `UPTOP_STATUS_TITLE` | `System Status` | Status page title |
|
|
| `UPTOP_CLUSTER_MODE` | `leader` | `leader` or `follower` |
|
|
| `UPTOP_PEER_URL` | | Leader URL for follower nodes |
|
|
| `UPTOP_CLUSTER_SECRET` | | Shared key for cluster + API auth |
|
|
| `UPTOP_INSECURE_SKIP_VERIFY` | `false` | Skip TLS verification for checks |
|
|
|
|
## Migrating from Uptime Kuma
|
|
|
|
Export your Kuma backup JSON, then:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8080/api/import/kuma \
|
|
-H "X-Upkeep-Secret: your-secret" \
|
|
-H "Content-Type: application/json" \
|
|
-d @kuma-backup.json
|
|
```
|
|
|
|
## License
|
|
|
|
MIT — see [LICENSE](LICENSE).
|