From fa1817e6147a7925734c5cc66919cf78609d1901 Mon Sep 17 00:00:00 2001 From: mrleo1nid <43583385+mrleo1nid@users.noreply.github.com> Date: Tue, 6 Oct 2026 22:04:45 +0300 Subject: [PATCH] =?UTF-8?q?README:=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- README.md | 76 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 60c6533..2bda2d8 100644 --- a/README.md +++ b/README.md @@ -8,39 +8,46 @@ Всё это делает один бинарник `backupctl`. Как он устроен внутри — в [docs/DESIGN.md](docs/DESIGN.md). -## Сборка - -```bash -make build # dist/backupctl-linux-amd64, dist/backupctl-linux-arm64 -make test -``` - -Готовые бинарники собирает Gitea Actions. `.gitea/workflows/ci.yml` на каждый push и PR проверяет форматирование, запускает vet и тесты и собирает бинарники. `release.yml` на тег `v*` публикует релиз с `backupctl-linux-{amd64,arm64}`, `checksums.txt` и файлами из `deploy/`: - -```bash -git tag v0.1.0 && git push origin v0.1.0 -``` - -Без make: - -```bash -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/backupctl-linux-amd64 ./cmd/backupctl -``` - ## Установка сервера +Ставим из [последнего релиза](https://gitea.hsrv.site/mrleo1nid/backup-master/releases/latest). Ссылка `releases/download/latest/...` всегда ведёт на свежую версию. Чтобы поставить конкретную версию, замените `latest` на тег, например `v0.1.0`. + ```bash +REL=https://gitea.hsrv.site/mrleo1nid/backup-master/releases/download/latest +ARCH=$(dpkg --print-architecture) # amd64 или arm64 + +# пользователь и каталоги sudo useradd -r -s /usr/sbin/nologin -d /var/lib/backup-master backup-master sudo install -d -o backup-master -g backup-master -m 700 /var/lib/backup-master sudo install -d /opt/backup-master/dist -sudo cp dist/backupctl-linux-* /opt/backup-master/dist/ -sudo cp dist/backupctl-linux-amd64 /usr/local/bin/backupctl + +# бинарники: свой — в /usr/local/bin, оба — в dist для раздачи агентам +for a in amd64 arm64; do sudo curl -fsSL "$REL/backupctl-linux-$a" -o "/opt/backup-master/dist/backupctl-linux-$a"; done +sudo curl -fsSL "$REL/checksums.txt" -o /tmp/backupctl-checksums.txt +(cd /opt/backup-master/dist && grep backupctl-linux /tmp/backupctl-checksums.txt | sha256sum -c -) +sudo install -m 755 "/opt/backup-master/dist/backupctl-linux-$ARCH" /usr/local/bin/backupctl +backupctl version + +# администратор веб-морды sudo -u backup-master BM_DATA=/var/lib/backup-master backupctl admin-passwd admin -sudo cp deploy/backup-master.service /etc/systemd/system/ # поправьте BM_PUBLIC_URL + +# systemd: поправьте BM_PUBLIC_URL на внешний адрес сервера +sudo curl -fsSL "$REL/backup-master.service" -o /etc/systemd/system/backup-master.service +sudo sed -i 's|https://backup.example.com|https://backup.ВАШ-ДОМЕН|' /etc/systemd/system/backup-master.service +sudo systemctl daemon-reload sudo systemctl enable --now backup-master ``` -Сервер слушает `127.0.0.1:8080`, TLS даёт Caddy (пример — `deploy/Caddyfile.example`). Агентам сервер раздаёт бинарники из `BM_DIST`. Для своей архитектуры сервер раздаёт сам себя. +Сервер слушает `127.0.0.1:8080`, TLS даёт Caddy: + +```bash +curl -fsSL "$REL/Caddyfile.example" # блок для /etc/caddy/Caddyfile, замените домен +sudo systemctl reload caddy +``` + +Агентам сервер раздаёт бинарники из `BM_DIST` (`/opt/backup-master/dist`). + +**Обновление сервера:** снова выполните блок «бинарники», затем `sudo systemctl restart backup-master`. Агенты обновляются командой `curl -fsSL https://backup.ВАШ-ДОМЕН/agent.sh | sudo bash` без `--token`, конфиг при этом сохраняется. В «Настройках» укажите топик ntfy. Уведомления приходят: - об ошибках бэкапа; @@ -126,6 +133,29 @@ categories: restore_cmd: mysql < "$DUMP_FILE" ``` +## Сборка из исходников + +```bash +make build # dist/backupctl-linux-amd64, dist/backupctl-linux-arm64 +make test +``` + +Без make: + +```bash +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/backupctl-linux-amd64 ./cmd/backupctl +``` + +CI (Gitea Actions): +- `.gitea/workflows/ci.yml` на каждый push и PR проверяет форматирование, запускает vet и тесты и собирает бинарники; +- `release.yml` на тег `v*` публикует релиз с бинарниками, `checksums.txt` и файлами из `deploy/`. + +Новый релиз: + +```bash +git tag v0.2.0 && git push origin v0.2.0 +``` + ## Хранение Бэкапы лежат в `/var/lib/backup-master/backups/<домен>/<дата>-/`: `main.tar.zst`, heavy-части и `manifest.json`. Архив — обычный tar+zstd, его можно разобрать и без backupctl: