# Site Restorer — восстановление сайта из веб-архива

> Site Restorer — портативное приложение для Windows, которое собирает копию сайта из Internet Archive: инвентаризирует сохранённые адреса через CDX-индекс, скачивает файлы параллельно, переписывает ссылки в относительные, проверяет битые ссылки и формирует отчёт о полноте. Основная сборка — один самодостаточный бинарник на Rust: без установки, без интерпретатора и без зависимостей. Лицензия MIT. Интерфейс на русском и английском.

Ключевое: программа восстанавливает только то, что сохранил архив; динамические функции CMS (корзина, вход, поиск, AJAX) в статической копии не работают.

## Что это

- Назначение: восстановление собственного сайта, когда нет ни файлов, ни резервных копий, ни доступа к хостингу.
- Платформа: Windows 10 (1809+) и Windows 11, x64 и x86. Есть CLI и GUI сборки для Linux (x64).
- Реализация: Rust + egui для интерфейса; CLI-бинарник без GUI. Классическая версия на Python и экспериментальный порт на Go приложены к тому же релизу.
- Размеры: GUI для Windows x64 — 6,9 МБ, x86 — 6,2 МБ, CLI — 2,6 МБ, статический CLI для Linux — 3,3 МБ.
- Поставка: GitHub Releases, к релизу прилагается `SHA256SUMS.txt` с контрольными суммами.
- Лицензия: MIT. Исходный код открыт.
- Языки интерфейса: русский, английский, переключение на лету.

## Возможности

- Инвентаризация архива: CDX-индекс Internet Archive, постраничный обход, до 50 000 адресов за прогон (кап 200 страниц CDX).
- Параллельная загрузка HTML, CSS/JS, изображений и прочих файлов с адаптивной конкурентностью по AIMD: 2 → 24 потока, срез при HTTP 429.
- Работа с лимитами архива: `Retry-After`, экспоненциальные паузы, предохранитель на серию 429, keep-alive.
- Докачка: уже скачанное не запрашивается повторно, прерванный прогон продолжается с места остановки.
- Сборка локальной копии: абсолютные ссылки → относительные; эвристики для кэша CMS с хэшем в имени и для миниатюр.
- Проверка и отчёт: обход готовых страниц, подсчёт внутренних и битых ссылок, файл `report.html` с покрытием по типам файлов, объёмом копии и списком ошибок.
- Кодировки: страницы и стили в cp1251 (и другой объявленной кодировке) перекодируются в UTF-8, `<meta charset>` приводится в порядок.
- Любой ввод адреса: ссылка из письма, поиска или архива, русская раскладка клавиатуры, IDN-домены.
- Любая CMS: проверено на Bitrix, WordPress, MODX, Craft CMS, Laravel.
- Диагностика: журнал с URL, HTTP-кодом, размером и временем каждого запроса.
- Командная строка: `--site`, `--out`, `--workers`, `--rate`, `--limit`, `--lang`, `--version`.

## Как это работает

1. Вставьте адрес сайта — домен, ссылку с utm-метками или адрес из архива. Ввод очищается автоматически.
2. Выберите папку результата. По умолчанию `Документы\SiteRestore\site`.
3. Нажмите «Начать». Загрузка идёт в фоне: прогресс по типам файлов, журнал запросов, кнопка «Остановить».
4. Откройте `report.html` — покрытие, объём, битые ссылки. Копию открывают локальным статическим сервером.

Структура результата:

```
<папка>/
├── site/        готовая копия (открывать локальным веб-сервером)
├── mirror/      сырые файлы из архива
├── data/        inventory.jsonl — список адресов
└── report.html  отчёт о покрытии
```

Локальный просмотр копии:

```powershell
cd Документы\SiteRestore\site
python -m http.server 8080
# http://127.0.0.1:8080/
```

Командная строка:

```powershell
SiteRestorer.exe --cli --site example.com --out D:\mirror --workers 16
```

## Кейс

Витрина торговой компании: каталог товаров, блог и PDF-каталоги. Файлов, резервных копий и доступа к хостингу не осталось — единственным источником был веб-архив.

| Показатель | Значение |
|---|---|
| Уникальных адресов в CDX | 1 638 |
| Снимков за 2016–2026 | 9 476 |
| Скачано | 1 609 из 1 638 (98,2 %) |
| HTML-страниц | 1 164 из 1 168 |
| Страниц каталога | 1 042 из 1 044 |
| Объём копии | 315 МБ |

Что не восстановилось:

- Картинки товаров: 2 510 изображений не сохранялись в архиве ни разу (CDX без записей, replay отдаёт 404 за любой год).
- Динамика CMS: корзина, авторизация, поиск, AJAX-фильтры каталога требуют бэкенда и базы.
- Кэш шаблона: имена файлов содержат хэш сборки; подставляется файл того же типа — стили сохраняются, версия может отличаться.

## Ограничения и этика

- Восстанавливается только то, что сохранил архив.
- Копия статическая: формы, вход, корзина, поиск и AJAX не работают.
- Internet Archive ограничивает частоту запросов с одного IP; большие сайты качаются часами, докачка спасает.
- Инструмент предназначен для личного архивирования и восстановления своих сайтов. Он не обходит защиту, не подменяет User-Agent и не маскируется под браузер. Публиковать копию чужого сайта нельзя; условия Internet Archive и авторские права владельцев контента нужно уважать.

## Скачать

- x64 (GUI, Rust + egui, 6,9 МБ): https://github.com/azxasd69/site-restorer/releases/latest/download/SiteRestorer.exe
- x86 (GUI, 6,2 МБ): https://github.com/azxasd69/site-restorer/releases/latest/download/SiteRestorer-x86.exe
- CLI для Windows x64 (2,6 МБ): https://github.com/azxasd69/site-restorer/releases/latest/download/SiteRestorer-rust-win-cli-x64.exe
- CLI для Linux x64 (статический, 3,3 МБ): https://github.com/azxasd69/site-restorer/releases/latest/download/SiteRestorer-rust-linux-cli
- Контрольные суммы: https://github.com/azxasd69/site-restorer/releases/latest/download/SHA256SUMS.txt
- Все версии: https://github.com/azxasd69/site-restorer/releases

Сборка не подписана платным сертификатом: Windows SmartScreen может показать предупреждение — «Подробнее» → «Выполнить всё равно» (или `Unblock.cmd` из архива). Исходный код и CI открыты, можно собрать самому: матрица сборок — в `BUILD.md`.

## Поддержать автора

Проект без рекламы, подписок и телеметрии: https://boosty.to/explosion/donate

## Частые вопросы

**Нужен ли Python?** Нет: основная сборка — один бинарник на Rust, без интерпретатора. Python нужен только для `python -m http.server`, но подойдёт любой статический сервер.

**Что если архив ничего не сохранил?** Отчёт это покажет, программа ничего не выдумывает. Стоит проверить варианты домена (`www` и без) и соседние годы: для каждого адреса перебираются ближайшие снимки.

**Сколько времени занимает восстановление?** Зависит от сайта и лимитов архива: небольшой сайт — минуты, тысячи адресов — часы. Прогресс и время видны в окне, докачка позволяет продолжить позже.

**Вернутся ли картинки товаров?** Только если архив их сохранял: краулеры часто забирают страницы, но не каждое изображение. В одном из кейсов 2 510 картинок отсутствовали полностью, текст уцелел.

**Будут ли работать корзина, вход и поиск?** Нет, копия статическая.

**Это законно?** Инструмент создан для восстановления собственных сайтов; он не обходит защиту и не подменяет User-Agent. Публиковать чужую копию нельзя. Лицензия приложения — MIT.

## Ссылки

- Лендинг (RU): https://lastcopy.ru/
- Лендинг (EN): https://lastcopy.ru/en/
- Репозиторий: https://github.com/azxasd69/site-restorer
- README: https://github.com/azxasd69/site-restorer/blob/main/README.md
- Архитектура: https://github.com/azxasd69/site-restorer/blob/main/ARCHITECTURE.md
- Матрица сборок: https://github.com/azxasd69/site-restorer/blob/main/BUILD.md
- История изменений: https://github.com/azxasd69/site-restorer/blob/main/CHANGELOG.md
- Ошибки и идеи: https://github.com/azxasd69/site-restorer/issues
- Лицензия MIT: https://github.com/azxasd69/site-restorer/blob/main/LICENSE

## Контекст появления

Проект появился после аварии хостинга Beget в ночь с 1 на 2 ноября 2026 года: провайдер подтвердил потерю данных клиентов (виртуальные серверы, S3, Kubernetes, резервные копии VPS). Сайт, с которого начался проект, был размещён там и не имел собственных бэкапов — единственным источником контента оказался веб-архив.
