Один бинарник backupctl: - server: API для агентов и restore, веб-морда (один админ), SQLite, ретеншн GFS, heavy-части, уведомления ntfy, раздача agent.sh/restore.sh; - backup/plan: сбор по каталогу категорий (files/systemd/xui/compose), горячие дампы Postgres/Mongo/MySQL, снимок x-ui.db, docker-тома, digest образов, проверка crontab, потоковая отправка tar.zst; - restore: провижининг на основе vps_installer с теми же версиями пакетов, recipes 3x-ui/nebula/sing-box нужных версий, восстановление compose с заливкой дампов и закреплением образов по digest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
829 B
HTML
28 lines
829 B
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{{block "title" .}}backup-master{{end}}</title>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
</head>
|
|
<body>
|
|
{{if ne .Page "login"}}
|
|
<header class="top">
|
|
<a class="brand" href="/">backup-master</a>
|
|
<nav>
|
|
<a href="/" {{if or (eq .Page "clients") (eq .Page "client") (eq .Page "backup")}}class="active"{{end}}>Клиенты</a>
|
|
<a href="/settings" {{if eq .Page "settings"}}class="active"{{end}}>Настройки</a>
|
|
<form method="post" action="/logout" class="inline">
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<button class="link">Выйти</button>
|
|
</form>
|
|
</nav>
|
|
</header>
|
|
{{end}}
|
|
<main>
|
|
{{template "content" .}}
|
|
</main>
|
|
</body>
|
|
</html>
|