Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
89333dd4d8
commit
fa1817e614
1 file changed
+53
-23
@@ -8,39 +8,46 @@
|
|||||||
|
|
||||||
Всё это делает один бинарник `backupctl`. Как он устроен внутри — в [docs/DESIGN.md](docs/DESIGN.md).
|
Всё это делает один бинарник `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
|
```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 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 -o backup-master -g backup-master -m 700 /var/lib/backup-master
|
||||||
sudo install -d /opt/backup-master/dist
|
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 -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
|
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. Уведомления приходят:
|
В «Настройках» укажите топик ntfy. Уведомления приходят:
|
||||||
- об ошибках бэкапа;
|
- об ошибках бэкапа;
|
||||||
@@ -126,6 +133,29 @@ categories:
|
|||||||
restore_cmd: mysql < "$DUMP_FILE"
|
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/<домен>/<дата>-<id>/`: `main.tar.zst`, heavy-части и `manifest.json`. Архив — обычный tar+zstd, его можно разобрать и без backupctl:
|
Бэкапы лежат в `/var/lib/backup-master/backups/<домен>/<дата>-<id>/`: `main.tar.zst`, heavy-части и `manifest.json`. Архив — обычный tar+zstd, его можно разобрать и без backupctl:
|
||||||
|
|||||||
Reference in new issue
Block a user