удаление test-контура (дополнение)
This commit is contained in:
+31
-33
@@ -16,7 +16,7 @@
|
||||
4. [Сборка и публикация образов](#шаг-4-сборка-и-публикация-образов) — ПК
|
||||
5. [Pi: включить бэкапы](#шаг-5-pi-включить-бэкапы) — Pi
|
||||
6. [ПК: доступ к Pi и выгрузка бэкапов](#шаг-6-пк-доступ-к-pi-и-выгрузка-бэкапов) — ПК
|
||||
7. [Учебное восстановление на тест-клоне](#шаг-7-учебное-восстановление-на-тест-клоне) — ПК
|
||||
7. [Проверка скачанного архива](#шаг-7-проверка-скачанного-архива) — ПК
|
||||
8. [Восстановление прода](#8-восстановление-прода) — Pi
|
||||
9. [Катастрофа: Pi умер](#9-катастрофа-pi-умер) — новый Pi
|
||||
10. [Повседневные действия](#10-повседневные-действия)
|
||||
@@ -562,43 +562,42 @@
|
||||
|
||||
---
|
||||
|
||||
## Шаг 7. Учебное восстановление на тест-клоне
|
||||
## Шаг 7. Проверка скачанного архива
|
||||
|
||||
**Где:** ПК с Docker Desktop. **Зачем:** убедиться, что бэкап действительно
|
||||
восстанавливается, **до** того как это понадобится по-настоящему. Прод не затрагивается.
|
||||
**Где:** ПК. **Зачем:** убедиться, что БД в скачанном снимке целая и в ней те данные, что
|
||||
ожидаются, **до** того как это понадобится по-настоящему. Прод не затрагивается.
|
||||
|
||||
> Данные тест-клона на ПК будут заменены данными из архива. Прежние данные тест-клона
|
||||
> сохраняются в его собственный снимок `pre-restore`.
|
||||
> Отдельного тестового контейнера для учебного восстановления больше нет. Сам механизм
|
||||
> `restore`/`import` отрабатывает только на Pi ([раздел 8](#8-восстановление-прода)); здесь
|
||||
> проверяется содержимое архива.
|
||||
|
||||
1. Восстановите скачанный архив в тест-клон (подставьте имя своего файла):
|
||||
1. Распакуйте последний скачанный архив во временную папку:
|
||||
|
||||
```powershell
|
||||
.\scripts\fs-backup.ps1 restore-test -File backups\fs_20260914_0400_3f2a9c1d.tar
|
||||
$f = (Get-ChildItem backups\fs_*.tar | Sort-Object LastWriteTime | Select-Object -Last 1).FullName
|
||||
$d = Join-Path $env:TEMP "fs-check"; New-Item -ItemType Directory -Force $d | Out-Null
|
||||
tar -xf $f -C $d
|
||||
```
|
||||
|
||||
В первый раз Docker соберёт образы тест-клона — это несколько минут.
|
||||
2. Откройте `%TEMP%\fs-check\forbidden_stars.db` в [DB Browser for SQLite](https://sqlitebrowser.org)
|
||||
(вкладка «Выполнить SQL») и выполните:
|
||||
|
||||
2. Проверьте, что приложение тест-клона поднялось:
|
||||
```sql
|
||||
PRAGMA integrity_check;
|
||||
SELECT (SELECT count(*) FROM users WHERE role = 'player') AS players,
|
||||
(SELECT count(*) FROM matches) AS matches;
|
||||
```
|
||||
|
||||
3. Закройте DB Browser и удалите временную папку — данные в ней не зашифрованы:
|
||||
|
||||
```powershell
|
||||
docker compose -f docker-compose.test.yml ps
|
||||
docker compose -f docker-compose.test.yml logs --tail 20 app
|
||||
Remove-Item -Recurse -Force (Join-Path $env:TEMP "fs-check")
|
||||
```
|
||||
|
||||
3. Посмотрите на сайт: в `.env` на ПК временно поставьте `APP_ENV=test` и запустите
|
||||
`.\run.ps1`. Тест-клон откроется на `https://forbidden-stars.ru`: проверьте топ,
|
||||
профили, историю партий. Потом верните `APP_ENV=development`.
|
||||
|
||||
**Что должно получиться:**
|
||||
- в выводе `restore-test`:
|
||||
- `Развёрнутые данные в порядке: игроков N, партий M.` — те же числа, что в `list` на Pi;
|
||||
- `Данные восстановлены.`;
|
||||
- `Done. The test clone now runs on the restored data.`;
|
||||
- `docker compose ... ps` показывает `app` в состоянии `Up … (healthy)`;
|
||||
- на сайте тест-клона — данные прода на момент снимка.
|
||||
|
||||
> Этим же способом можно восстановить в тест-клон старые архивы `fs_*.tar.gz` прежнего
|
||||
> `scripts/backup.sh`: `.\scripts\fs-backup.ps1 restore-test -File backups\fs_20260710_140914.tar.gz`.
|
||||
- `PRAGMA integrity_check` → `ok`;
|
||||
- `players` и `matches` совпадают со столбцами `Игроков` / `Партий` этого снимка в `list` на Pi;
|
||||
- в папке рядом с БД есть `uploads\…` (фото партий) и, если заводились, `achievements\…`.
|
||||
|
||||
---
|
||||
|
||||
@@ -651,8 +650,9 @@
|
||||
Если локальный репозиторий повреждён или пуст, смотрите копию на VPS:
|
||||
`docker compose exec backup fs-backup list vps`.
|
||||
|
||||
2. **По желанию, но рекомендуется:** сначала отрепетируйте на ПК:
|
||||
`.\scripts\fs-backup.ps1 pull -Snapshot <ID>`, затем `restore-test` ([шаг 7](#шаг-7-учебное-восстановление-на-тест-клоне)).
|
||||
2. **По желанию, но рекомендуется:** перед восстановлением проверьте выбранный снимок на ПК:
|
||||
`.\scripts\fs-backup.ps1 pull -Snapshot <ID>`, затем [шаг 7](#шаг-7-проверка-скачанного-архива).
|
||||
Заодно у вас останется копия этого снимка вне Pi.
|
||||
|
||||
3. Остановите приложение. Сайт покажет страницу «Технические шоколадки»:
|
||||
|
||||
@@ -806,7 +806,7 @@
|
||||
- **Перед каждым обновлением прода** — `now -Tag before-update` (метка — латиница, цифры, `.`, `_`, `-`).
|
||||
- **Раз в месяц:**
|
||||
- скачать снимок на ПК (`pull`);
|
||||
- раз в пару месяцев сделать учебное восстановление (`restore-test`);
|
||||
- проверить скачанный архив ([шаг 7](#шаг-7-проверка-скачанного-архива));
|
||||
- удалить с ПК старые архивы — они не зашифрованы.
|
||||
- **Иногда:** посмотреть `docker compose ps`. Статус `unhealthy` у `backup` означает, что
|
||||
бэкапы перестали проходить (причину покажет `fs-backup status`).
|
||||
@@ -899,7 +899,7 @@ docker volume rm <имя тома>
|
||||
| `WARNING: UNPROTECTED PRIVATE KEY FILE!` | у файла ключа слишком открытые права (ключ создан в Git Bash/WSL или скопирован) | `icacls <путь к ключу> /inheritance:r /grant:r "$($env:USERNAME):(R)"` |
|
||||
| `Checksum mismatch … run pull again` | файл повредился при передаче | повторить `pull` (битый файл уже удалён) |
|
||||
| `Already downloaded: …` | этот снимок уже скачан | ничего не делать; нужен новый — сначала `now`, потом `pull` |
|
||||
| `restore-test`: `Import failed … The test clone data was not changed` | архив повреждён или неполный | скачать заново (`pull`); текст ошибки выше в выводе |
|
||||
| шаг 7: `integrity_check` не `ok` или счётчики не совпадают с `list` | архив повреждён или скачан не тот снимок | удалить файл из `backups\` и скачать заново (`pull -Snapshot <ID>`); если повторяется — `fs-backup verify` на Pi |
|
||||
|
||||
---
|
||||
|
||||
@@ -935,11 +935,9 @@ docker volume rm <имя тома>
|
||||
|---|---|
|
||||
| `status`, `list [-Repo vps]`, `now [-Tag имя]`, `verify` | то же, что на Pi, но с ПК |
|
||||
| `pull [-Snapshot ID] [-Repo vps]` | скачать снимок в `backups\` со сверкой sha256 |
|
||||
| `restore-test -File <архив>` | учебное восстановление в локальный тест-клон |
|
||||
| `-Target test` | выполнить `status`/`list`/`now`/`verify`/`pull` на локальном тест-клоне |
|
||||
|
||||
В bash-версии те же команды пишутся так: `list vps`, `now --tag имя`,
|
||||
`pull <ID> --repo vps`, `restore-test <архив>`, `--test` первым аргументом.
|
||||
`pull <ID> --repo vps`.
|
||||
|
||||
### Переменные `.env`
|
||||
|
||||
@@ -987,7 +985,7 @@ docker volume rm <имя тома>
|
||||
- [ ] На Pi первый бэкап прошёл в `local` и `vps`, `status` без ошибок (шаг 5)
|
||||
- [ ] `docker compose ps` показывает `backup` `(healthy)` (шаг 5)
|
||||
- [ ] С ПК `status`, `list`, `pull` работают без пароля (шаг 6)
|
||||
- [ ] Учебное восстановление на тест-клоне прошло, данные на месте (шаг 7)
|
||||
- [ ] Скачанный архив проверен: БД целая, числа совпадают с `list` (шаг 7)
|
||||
|
||||
**Через сутки**
|
||||
- [ ] В `list` появился снимок с меткой `scheduled` в 04:00
|
||||
|
||||
Reference in New Issue
Block a user