25aa001135
P0-01 Go module + cmd/server + cmd/agent skeletons + internal/ tree
P0-02 LICENSE (PolyForm NC 1.0.0), README, CONTRIBUTING
P0-03 golangci-lint, pre-commit, .editorconfig, .gitignore
P0-04 Gitea Actions CI: test (race+coverage), lint, cross-platform build matrix
P0-05 Dockerfile.server (multi-stage, distroless/static), docker-compose.yml
P0-06 Makefile with build/test/lint/fmt/run/release targets
build, vet, test, and cross-compile to linux/{amd64,arm64} + windows/amd64
all verified locally.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
68 lines
2.4 KiB
Markdown
68 lines
2.4 KiB
Markdown
# restic-manager
|
|
|
|
Self-hosted, browser-based, single-pane-of-glass for managing
|
|
[restic](https://restic.net) backups across a fleet of Linux and Windows
|
|
endpoints.
|
|
|
|
> Status: pre-alpha. Phase 0 (project bootstrap) complete; Phase 1 (MVP) in
|
|
> progress. See [`spec.md`](./spec.md) for the design and
|
|
> [`tasks.md`](./tasks.md) for the roadmap.
|
|
|
|
## What it does (target)
|
|
|
|
- Central visibility into backup state for every endpoint
|
|
- Trigger any restic operation remotely (`backup`, `forget`, `prune`,
|
|
`check`, `unlock`, `snapshots`, `stats`, `diff`, `restore`)
|
|
- Manage per-host backup schedules from the UI
|
|
- Live job progress streamed back to the UI
|
|
- Restore wizard (browse snapshots, pick paths, restore to original or
|
|
alternate host)
|
|
- Repo health surfacing (size, dedup ratio, last check, lock state)
|
|
- Alerting on failure or staleness
|
|
- Cross-platform agent (Linux + Windows)
|
|
- Ransomware-resistant repo access via append-only credentials
|
|
|
|
## Architecture (one-line summary)
|
|
|
|
A small Go control-plane on the Proxmox host, lightweight Go agents on each
|
|
endpoint that hold an outbound WebSocket to the control-plane, and a
|
|
`restic/rest-server` on Unraid that holds the actual backup data. The
|
|
control-plane never touches backup bytes.
|
|
|
|
Full architecture diagram and component breakdown:
|
|
[`spec.md` §3](./spec.md).
|
|
|
|
## Repository layout
|
|
|
|
```
|
|
cmd/server/ control-plane binary
|
|
cmd/agent/ endpoint agent binary
|
|
internal/api shared API types (REST + WS envelopes)
|
|
internal/server/ HTTP, WS, UI handlers
|
|
internal/agent/ service integration, restic runner, local scheduler
|
|
internal/restic restic CLI wrapper
|
|
internal/store SQLite persistence
|
|
internal/crypto secret encryption
|
|
internal/auth passwords, sessions, agent tokens
|
|
web/ server-rendered templates + static assets
|
|
deploy/ Dockerfile, docker-compose.yml, install scripts
|
|
design/ UI wireframes (Phase 0 design pass)
|
|
```
|
|
|
|
## Local development
|
|
|
|
Requires Go 1.23+ (built and tested on 1.26).
|
|
|
|
```sh
|
|
make build # builds cmd/server and cmd/agent into ./bin
|
|
make test # runs go test ./...
|
|
make lint # runs golangci-lint
|
|
make run-server # runs the server (dev defaults)
|
|
```
|
|
|
|
## License
|
|
|
|
PolyForm Noncommercial 1.0.0 — see [`LICENSE`](./LICENSE). Free for personal,
|
|
hobby, research, educational, governmental, and other noncommercial use.
|
|
Commercial use requires a separate license.
|