Вернуться к статьям

Полезные статьи Wcoders

Резервное копирование веб-сервиса: бэкапы, восстановление, данные и план аварийного отката

Разбираем, как спроектировать резервное копирование веб-сервиса: какие данные сохранять, как часто делать бэкапы, где хранить копии, что такое RPO и RTO, как проверять восстановление и готовить план аварийного отката.

Поддержка и развитие веб-проекта после запуска Технический аудит веб-проекта Перенос сайта или веб-сервиса на новую архитектуру Безопасность веб-сервиса Разработка платформы с API Интеграция сайта с CRM Платежи в веб-сервисе Импорт и экспорт данных в веб-сервисе Админ-панель для веб-сервиса Тестирование веб-сервиса перед запуском
Резервное копирование веб-сервиса: бэкапы, восстановление, данные и план аварийного отката

Введение

Резервное копирование веб-сервиса часто вспоминают только после проблемы: удалили важные данные, сломали релиз, ошибочно запустили импорт, база повредилась, сервер недоступен, хостинг заблокирован, сотрудник стер файлы, интеграция перезаписала статусы, злоумышленник получил доступ или обновление пошло не по плану. В этот момент выясняется главное: бэкап либо есть и его можно быстро восстановить, либо проект фактически держался на надежде.

Бэкап - это не просто архив "на всякий случай". Для веб-сервиса резервное копирование должно быть частью архитектуры эксплуатации. Нужно понимать, какие данные сохраняются, как часто создаются копии, где они хранятся, кто имеет доступ, как защищены копии, сколько времени занимает восстановление, сколько данных можно потерять без критичного ущерба и что делать, если авария произошла во время рабочего дня.

Особенно важны бэкапы для проектов, где есть заявки, пользователи, платежи, документы, личный кабинет, CRM, 1С, импорт файлов, каталог, партнерская программа, админ-панель, API и интеграции. В таких системах потеря данных - это не абстрактный технический риск. Это потерянные продажи, спорные платежи, недоступные документы, остановка команды, конфликт с клиентами и дополнительные расходы на восстановление.

Хорошая стратегия резервного копирования отвечает не на вопрос "делается ли копия", а на вопрос "можем ли мы восстановить рабочее состояние сервиса с понятной потерей данных и за приемлемое время". Разница между этими формулировками огромная.

Что такое резервное копирование веб-сервиса

Резервное копирование веб-сервиса - это регулярное создание защищенных копий данных и конфигураций, которые позволяют восстановить сервис после сбоя, ошибки, удаления, компрометации или неудачного изменения.

В веб-проекте копировать нужно не только файлы сайта. Реальная система может состоять из базы данных, пользовательских файлов, медиа, документов, исходного кода, переменных окружения, настроек сервера, конфигураций очередей, ключей интеграций, шаблонов уведомлений, cron-задач, docker-compose файлов, инфраструктурных манифестов, данных поиска, логов аудита и настроек внешних сервисов.

Если сохранить только код, но не сохранить базу, сервис не восстановится. Если сохранить базу, но потерять файлы документов, личный кабинет будет неполным. Если сохранить файлы и базу, но не сохранить конфигурацию окружения, восстановление может занять часы или дни. Если сохранить все, но не проверить восстановление, копия может оказаться бесполезной в момент аварии.

Поэтому резервное копирование - это не кнопка "создать архив". Это процесс, в котором есть состав данных, расписание, место хранения, контроль успешности, права доступа, тестовое восстановление и план действий.

Бэкапы работают лучше как часть общей эксплуатации сервиса: мониторинг, восстановление, безопасные релизы и реакция на сбои должны складываться в понятный порядок действий.

Почему бэкап без восстановления не считается защитой

Самая частая ошибка - считать наличие файла с копией достаточным. На практике бэкап может оказаться неполным, поврежденным, слишком старым, недоступным, зашифрованным злоумышленником, созданным не из той базы, несовместимым с новой версией приложения или бесполезным без конфигурации.

Надежная стратегия всегда включает восстановление. Не теоретическое, а проверенное.

Что нужно уметь:

  • найти нужную точку восстановления;
  • понять, какие данные в нее входят;
  • развернуть копию в тестовой среде;
  • проверить целостность базы;
  • проверить пользовательские файлы;
  • проверить вход в админку и личный кабинет;
  • проверить заявки, платежи, документы и статусы;
  • понять, сколько времени заняло восстановление;
  • понять, сколько данных потеряно относительно аварии;
  • зафиксировать результат проверки.

AWS Well-Architected и AWS Prescriptive Guidance отдельно подчеркивают необходимость периодически проверять восстановление, чтобы убедиться, что backup-процесс соответствует RTO и RPO. Это практичный принцип: пока восстановление не проверено, бэкап нельзя считать надежным.

RPO и RTO простыми словами

Для резервного копирования важно определить два показателя: RPO и RTO.

RPO, Recovery Point Objective, отвечает на вопрос: сколько данных бизнес готов потерять при восстановлении. Если бэкап делается раз в сутки, при аварии можно потерять до 24 часов данных. Для сайта-визитки это может быть приемлемо. Для сервиса с оплатами, заявками и документами - часто нет.

RTO, Recovery Time Objective, отвечает на вопрос: за сколько времени сервис должен вернуться в рабочее состояние. Для некритичного блога восстановление за сутки может быть терпимым. Для B2B-портала, платежной системы или сервиса записи простой в несколько часов уже может быть серьезным ущербом.

Примеры:

  • корпоративный сайт: RPO 24 часа, RTO 8 часов;
  • сайт с заявками из рекламы: RPO 1 час, RTO 2 часа;
  • личный кабинет клиентов: RPO 15-60 минут, RTO 1-4 часа;
  • платежный веб-сервис: RPO близко к нулю для платежных событий, RTO зависит от критичности;
  • B2B-портал с заказами: RPO 15 минут - 1 час, RTO 1-4 часа;
  • внутренний сервис сотрудников: RPO и RTO зависят от того, останавливает ли сбой операционную работу.

Нельзя выбирать RPO и RTO "по красоте". Чем меньше допустимая потеря данных и чем быстрее нужно восстановление, тем дороже архитектура: чаще бэкапы, репликация, журналы транзакций, резервная инфраструктура, автоматизация восстановления, тесты и контроль.

Хотите запустить похожий проект?

Опишите задачу, и команда Wcoders подскажет, какой формат подойдет: MVP, Telegram Mini App, веб-сервис, интеграция или аудит текущего продукта.

Какие данные нужно сохранять

Перед настройкой бэкапов нужно составить карту данных. Без нее легко сохранить одно и потерять другое.

Обычно веб-сервису нужны копии:

  • базы данных;
  • пользовательских файлов;
  • загруженных изображений;
  • документов;
  • счетов, актов и договоров;
  • конфигураций приложения;
  • переменных окружения;
  • исходного кода;
  • миграций базы;
  • настроек сервера;
  • docker или инфраструктурных файлов;
  • cron-задач;
  • настроек очередей;
  • данных поиска, если их нельзя быстро пересобрать;
  • шаблонов уведомлений;
  • audit log;
  • логов критичных операций;
  • экспортов для сверки;
  • ключевых справочников.

Не все данные нужно копировать одинаково. База данных с заказами может требовать частых копий. Медиафайлы можно копировать инкрементально. Логи можно хранить отдельно с ограниченным сроком. Кэш можно не сохранять, если он пересобирается. Индекс поиска можно не копировать, если его можно быстро восстановить из основной базы.

Главное - не путать данные, которые можно пересоздать, с данными, которые существуют только в одном месте.

База данных: главный объект восстановления

Для большинства веб-сервисов база данных - самый важный слой. В ней живут пользователи, заявки, заказы, платежные статусы, права доступа, документы, настройки, события и история операций.

Бэкап базы должен учитывать:

  • тип базы данных;
  • размер;
  • частоту изменений;
  • нагрузку;
  • допустимую потерю данных;
  • способ создания копии;
  • point-in-time recovery;
  • транзакционную целостность;
  • совместимость версии;
  • шифрование;
  • контроль успешности;
  • тестовое восстановление.

Простая выгрузка SQL-файла подходит не всегда. Для больших баз или сервисов с постоянной записью может понадобиться snapshot, реплика, WAL-архивирование, binlog, managed backup или PITR. Если копия создается в момент активных изменений, важно обеспечить консистентность, иначе восстановленная база может быть поврежденной или логически неполной.

Для платежей, заказов и документов особенно важно сохранять историю статусов. Если восстановить базу на точку до оплаты, но платежный провайдер уже списал деньги, система должна уметь сверить статус и исправить расхождение.

Файлы и документы

Во многих веб-сервисах файлы важны не меньше базы. Это договоры, акты, счета, сертификаты, билеты, загруженные документы пользователей, изображения товаров, вложения заявок, PDF-отчеты, аватары, презентации, сканы, медиаматериалы.

Проблема в том, что база и файлы связаны. В базе может быть запись о документе, а файл хранится в объектном хранилище. Если восстановить базу на 10:00, а файлы на 12:00, появятся несоответствия. Если восстановить файлы без базы, непонятно, кому они принадлежат. Если восстановить базу без файлов, пользователи увидят записи без содержимого.

Что нужно продумать:

  • где физически хранятся файлы;
  • как они связаны с базой;
  • как часто копируются;
  • есть ли версии файлов;
  • что делать при удалении;
  • как восстановить отдельный файл;
  • как восстановить пакет файлов;
  • как проверять доступы после восстановления;
  • как защищать приватные документы;
  • как учитывать юридические сроки хранения.

Для документооборота и личных кабинетов важно не только наличие файла, но и права доступа. После восстановления пользователь не должен получить доступ к чужому документу из-за ошибки связей или старой роли.

Код, инфраструктура и конфигурации

Некоторые считают, что код не нужно бэкапить, потому что он есть в репозитории. Это верно только если репозиторий доступен, настроены права, есть актуальные ветки, сохранены теги релизов и можно восстановить именно ту версию, которая работала в продакшене.

Кроме кода нужны конфигурации:

  • переменные окружения;
  • настройки web-сервера;
  • docker-compose или Kubernetes-манифесты;
  • CI/CD-конфигурация;
  • cron-задачи;
  • настройки очередей;
  • права пользователей;
  • настройки домена и DNS;
  • конфигурации object storage;
  • ключи внешних интеграций;
  • шаблоны уведомлений;
  • настройки платежных webhooks.

Секреты нельзя просто хранить в открытом архиве. Их нужно защищать: secret manager, шифрование, ограниченный доступ, журналирование действий, отдельные права. Но если секреты полностью потеряны, восстановление может остановиться, даже если база и файлы на месте.

Виды резервных копий

В веб-проектах обычно используют несколько типов копий.

Полный бэкап содержит весь объем данных. Он проще для понимания, но может быть тяжелым и дорогим, если данных много.

Инкрементальный бэкап сохраняет изменения после предыдущей копии. Он экономит место, но восстановление может зависеть от цепочки копий.

Дифференциальный бэкап сохраняет изменения после последнего полного бэкапа. Он проще некоторых инкрементальных схем, но с течением времени растет в размере.

Snapshot фиксирует состояние ресурса на момент времени. Это удобно для дисков, баз и облачных сервисов, но нужно понимать, является ли snapshot приложенчески консистентным.

Point-in-time recovery позволяет восстановить базу на конкретный момент, например до ошибочного импорта или удаления. Для этого нужны журналы транзакций или возможности managed database.

Экспорт данных полезен для ручной сверки, отчетности и переноса, но не всегда является полноценным бэкапом. CSV-файл с заказами не восстановит роли, связи, вложения, индексы, историю и настройки.

Где хранить бэкапы

Бэкап, который лежит на том же сервере, что и сайт, защищает только от части ошибок. Если сервер недоступен, диск поврежден, аккаунт скомпрометирован или хостинг заблокирован, копия может исчезнуть вместе с основным проектом.

Надежнее использовать отдельное хранилище:

  • объектное хранилище;
  • другой регион;
  • другой аккаунт;
  • managed backup провайдера;
  • отдельное резервное хранилище;
  • offline или cold copy для критичных данных;
  • immutable storage, если доступно.

Microsoft в материалах по защите от ransomware описывает принцип 3-2-1: три копии данных, два типа носителей, одна копия offsite или cold. В современных облачных проектах этот принцип адаптируют через разные аккаунты, регионы, политики неизменяемости, ограниченные права и отдельный контур управления.

Для веб-сервиса важно не только "где лежит архив", но и кто может его удалить. Если один администраторский аккаунт имеет доступ и к продакшену, и к бэкапам, компрометация этого аккаунта может уничтожить оба слоя.

Защита резервных копий

Бэкапы содержат ценные данные. Если их украдут, это может быть хуже, чем обычная ошибка в интерфейсе. Поэтому копии нужно защищать не слабее продакшена.

Нужно продумать:

  • шифрование при хранении;
  • шифрование при передаче;
  • отдельные права доступа;
  • MFA для администраторов;
  • запрет публичного доступа;
  • журнал действий;
  • ограничение удаления;
  • immutable или WORM-хранение;
  • раздельные аккаунты;
  • ротацию ключей;
  • контроль скачивания;
  • срок хранения;
  • безопасное удаление по регламенту.

Особенно опасны открытые backup-архивы с базой данных. В них могут быть персональные данные, email, телефоны, адреса, документы, платежные статусы, токены, внутренние комментарии и коммерческая информация.

Статья Безопасность веб-сервиса раскрывает общий контур защиты ролей, файлов, API и платежей. Резервные копии являются частью этого контура, а не отдельной технической папкой.

Immutable backup и защита от удаления

Immutable backup - это резервная копия, которую нельзя изменить или удалить до окончания заданного срока хранения. Такой подход нужен для защиты от ransomware, ошибочного удаления и компрометации административного доступа.

Злоумышленник часто пытается уничтожить бэкапы до шифрования или удаления основной системы. Если резервные копии можно стереть тем же аккаунтом, который управляет продакшеном, это слабое место.

Практические меры:

  • включить soft delete там, где это доступно;
  • использовать immutable storage;
  • хранить копии в отдельном аккаунте;
  • ограничить права на удаление;
  • включить MFA для критичных операций;
  • фиксировать все действия с backup-хранилищем;
  • делать копии в другой регион или контур;
  • регулярно проверять, что защита реально включена.

Azure Backup Security Best Practices описывает стратегию 3-2-1-1: три копии, два типа хранения, одна offsite и одна immutable или isolated. Для веб-сервиса смысл не в названии правила, а в практике: авария или атака не должны уничтожать все варианты восстановления.

Расписание бэкапов

Расписание должно соответствовать RPO. Если бизнес не готов терять больше часа данных, ежедневный ночной бэкап не подходит. Если данные меняются редко, слишком частые копии могут быть избыточными.

Примерный подход:

  • база с заявками - каждые 15 минут, час или несколько часов в зависимости от критичности;
  • файлы документов - инкрементально несколько раз в день или по событию;
  • код - через репозиторий и теги релизов;
  • конфигурации - после каждого изменения;
  • справочники - по расписанию и перед массовыми изменениями;
  • крупные медиа - отдельно, с проверкой целостности;
  • логи аудита - с учетом требований хранения;
  • экспорт перед импортом - перед массовой операцией.

Перед опасными изменениями стоит делать ручную точку восстановления: перед релизом, миграцией базы, импортом, массовым обновлением цен, изменением ролей, переносом домена, сменой платежной логики.

При этом нельзя полагаться только на ручные копии. Регулярный процесс должен работать автоматически и контролироваться алертами.

Срок хранения и ротация

Если хранить все бэкапы вечно, расходы будут расти, а риск хранения лишних данных увеличится. Если хранить слишком мало, можно не успеть обнаружить ошибку.

Нужно определить retention policy:

  • сколько хранятся hourly backups;
  • сколько хранятся daily backups;
  • сколько хранятся weekly backups;
  • сколько хранятся monthly backups;
  • какие копии уходят в холодное хранилище;
  • какие данные нужно хранить по юридическим причинам;
  • какие данные нужно удалять по регламенту;
  • как бэкапы связаны с удалением пользовательских данных.

Пример: копии за последние 24 часа каждые 1-2 часа, ежедневные копии за 14-30 дней, недельные копии за 2-3 месяца, месячные копии за год. Но универсального правила нет. Для каждого проекта важны объем данных, стоимость хранения, юридические требования и риск позднего обнаружения ошибки.

План аварийного восстановления

Disaster recovery plan - это не только копии. Это инструкция, как вернуть сервис в рабочее состояние после серьезного сбоя.

В плане должны быть:

  • список критичных сервисов;
  • ответственные люди;
  • контакты провайдеров;
  • доступы и где они хранятся;
  • порядок восстановления;
  • критерии запуска аварийного режима;
  • RPO и RTO;
  • сценарий восстановления базы;
  • сценарий восстановления файлов;
  • сценарий восстановления приложения;
  • проверка платежей и CRM;
  • коммуникация с бизнесом;
  • коммуникация с пользователями, если нужна;
  • rollback-план;
  • порядок фиксации инцидента;
  • действия после восстановления.

NIST SP 800-34 описывает contingency planning как сочетание планов, процедур и технических мер для восстановления систем, операций и данных после нарушения. Для бизнеса это переводится просто: восстановление должно быть заранее описанным процессом, а не импровизацией в самый плохой момент.

Аварийный откат и восстановление - не одно и то же

Откат и восстановление часто смешивают, но это разные действия.

Откат нужен, когда нужно вернуть предыдущее состояние после неудачного изменения: релиз сломал функцию, миграция пошла не так, импорт обновил не те данные, новая настройка нарушила доступы.

Восстановление нужно, когда данные или инфраструктура повреждены, удалены, потеряны или недоступны.

Откат может быть:

  • откат кода на предыдущий релиз;
  • откат миграции;
  • восстановление отдельной таблицы;
  • отмена импорта;
  • возврат старой конфигурации;
  • отключение новой функции;
  • переключение на резервный provider;
  • восстановление из snapshot.

Важный нюанс: откат данных сложнее отката кода. Если после релиза пользователи уже создали заявки, оплатили заказы или загрузили документы, нельзя просто вернуть вчерашнюю базу без анализа. Можно потерять реальные действия. Поэтому для рискованных операций нужны журналы изменений, корректирующие операции, feature flags, миграции с обратным планом и точечное восстановление.

Бэкап перед релизом

Перед релизом, который меняет данные, структуру базы, платежи, роли, импорт, интеграции или документы, нужно делать контрольную точку восстановления.

Минимальный чек-лист:

  • создан актуальный бэкап базы;
  • сохранены пользовательские файлы;
  • зафиксирована версия кода;
  • зафиксированы миграции;
  • сохранена конфигурация;
  • понятно, как откатить релиз;
  • есть доступы к восстановлению;
  • проверены критичные сценарии после релиза;
  • назначен ответственный за наблюдение;
  • есть окно для исправления.

Связь с тестированием важна. Статья Тестирование веб-сервиса перед запуском показывает, какие сценарии нужно проверять до релиза. Бэкап добавляет к этому возможность вернуться назад, если после публикации обнаружится критичная проблема.

Бэкапы при миграции и переносе архитектуры

При переносе сайта или веб-сервиса на новую архитектуру резервное копирование становится одним из главных элементов плана. В миграции есть риск потерять данные, заявки, файлы, SEO-структуру, пользовательские аккаунты, статусы и связи между объектами.

Перед переносом нужно:

  • снять полную копию старой системы;
  • зафиксировать состояние базы;
  • выгрузить файлы;
  • сохранить настройки домена и редиректов;
  • сохранить старые URL;
  • проверить экспорт пользователей;
  • проверить платежные статусы;
  • сделать тестовую миграцию;
  • сравнить количество записей;
  • проверить выборочно данные;
  • подготовить rollback-план.

Если в день переноса продолжают приходить заявки, нужно решить, как синхронизировать последние изменения. Иногда вводят короткое окно read-only, иногда повторяют дельта-миграцию, иногда оставляют старую систему доступной для сверки.

Подробнее общий процесс переноса раскрыт в статье Перенос сайта или веб-сервиса на новую архитектуру. В этой статье фокус - именно на копиях, восстановлении и аварийном плане.

Бэкапы и CRM

CRM-интеграция усложняет восстановление. Заявка может храниться на сайте и в CRM. Если восстановить сайт на более раннюю точку, часть заявок уже может быть в CRM. Если восстановить CRM отдельно, сайт может не знать о новых статусах. Если интеграция повторно отправит старые заявки, появятся дубли.

Что нужно продумать:

  • где источник истины по заявке;
  • как сверять заявки после восстановления;
  • как не отправить дубли;
  • как сохранить UTM и источник;
  • как повторить передачу неотправленных лидов;
  • как обработать заявки, созданные между бэкапом и аварией;
  • как уведомить менеджеров о возможных расхождениях.

Статья Интеграция сайта с CRM подробно объясняет, как не терять заявки. Бэкапы в этом контуре нужны не для архива, а для возможности восстановить цепочку "форма - сайт - CRM - менеджер".

Бэкапы и платежи

Платежи требуют особой аккуратности. Нельзя просто восстановить базу и считать, что все статусы вернулись корректно. Внешний платежный провайдер хранит свою историю, а деньги уже могли быть списаны, возвращены или находиться в обработке.

После восстановления нужно сверить:

  • платежи в статусе ожидания;
  • успешные списания;
  • возвраты;
  • подписки;
  • webhooks, которые могли не обработаться;
  • заказы без финального статуса;
  • чеки;
  • суммы;
  • currency;
  • idempotency keys;
  • дубли событий.

Для платежей полезно хранить журнал событий отдельно от текущего статуса. Если восстановленное состояние неполное, журнал помогает пересобрать картину и запросить актуальный статус у провайдера.

Подробно платежная логика разобрана в статье Платежи в веб-сервисе. Резервное копирование должно учитывать, что платеж - это не только запись в базе, а цепочка событий между сайтом, провайдером, webhook, заказом, чеком и уведомлением.

Бэкапы при импорте и массовых изменениях

Импорт данных - один из самых частых источников ошибок. Загрузили не тот файл, перепутали колонку, обновили цены не той категории, создали дубли, перезаписали описания, удалили связи, загрузили старые остатки. Если нет точки восстановления или журнала изменений, исправление может быть тяжелее самого импорта.

Перед массовым импортом стоит:

  • сделать бэкап затронутых таблиц;
  • сохранить исходный файл;
  • сделать preview изменений;
  • ограничить область обновления;
  • вести журнал строк;
  • сохранять старые значения;
  • предусмотреть откат;
  • не запускать импорт без проверки;
  • тестировать на копии данных.

Но полный откат не всегда безопасен. Если после импорта уже были заказы или платежи, возврат старых данных может нарушить историю. Иногда правильнее сделать корректирующий импорт и сохранить оба события.

Связанный материал: Импорт и экспорт данных в веб-сервисе.

Точечное восстановление

Не каждая авария требует восстановления всего сервиса. Иногда нужно вернуть одну запись, один файл, одну таблицу, один документ, один шаблон, один набор настроек.

Точечное восстановление полезно, когда:

  • удалили пользователя;
  • удалили документ;
  • испортили карточку товара;
  • случайно изменили роль;
  • импорт перезаписал часть данных;
  • менеджер удалил заявку;
  • файл был заменен неправильной версией;
  • настройка оплаты была изменена ошибочно.

Чтобы точечное восстановление было возможным, нужны:

  • история изменений;
  • audit log;
  • версии документов;
  • soft delete;
  • отдельные экспорты;
  • понятные связи данных;
  • инструменты администратора;
  • права на восстановление.

Если единственный вариант - откатить всю базу ради одного документа, процесс будет рискованным. Поэтому для бизнес-критичных сущностей стоит проектировать версии и корзину, а не полагаться только на общий backup.

Роль админ-панели

Админ-панель не должна давать всем администраторам полный доступ к бэкапам, но она может помогать в контроле восстановления.

Полезные возможности:

  • видеть статус последнего бэкапа;
  • видеть ошибки backup-задач;
  • видеть дату последней проверки восстановления;
  • запускать безопасный экспорт;
  • восстанавливать удаленные записи, если это предусмотрено;
  • видеть журнал критичных действий;
  • повторять неуспешные операции;
  • проверять очереди после аварии;
  • видеть расхождения интеграций.

При этом создание, удаление и скачивание полных резервных копий лучше держать в отдельном защищенном контуре. Полный backup часто содержит слишком много чувствительной информации, чтобы отдавать его обычной бизнес-админке.

Общая логика управления веб-сервисом раскрыта в статье Админ-панель для веб-сервиса.

Мониторинг бэкапов

Бэкап может не создаться, но команда об этом не узнает. Например, закончилось место, истек токен доступа, изменилась политика storage, упала cron-задача, база стала слишком большой, архив не загрузился, процесс завершился с ошибкой.

Отдельно стоит связать backup-процесс с мониторингом веб-сервиса после запуска: алерт должен приходить не только при падении сайта, но и при сбое резервного копирования.

Нужно мониторить:

  • успешность backup-задач;
  • время последнего бэкапа;
  • размер копии;
  • резкое изменение размера;
  • время выполнения;
  • ошибки загрузки;
  • доступность хранилища;
  • срок действия ключей;
  • заполнение места;
  • результат тестового восстановления;
  • количество доступных restore points.

Если размер базы вчера был 8 ГБ, а сегодня бэкап стал 200 МБ, это повод проверить процесс. Если копия не создавалась три дня, алерт должен прийти сразу, а не в момент аварии.

Тестовое восстановление

Проверка восстановления - обязательная часть стратегии. Она показывает, что копии действительно работают.

Как проводить тест:

  • выбрать точку восстановления;
  • развернуть сервис в изолированной среде;
  • восстановить базу;
  • восстановить файлы;
  • применить конфигурацию;
  • запустить приложение;
  • проверить вход;
  • проверить критичные сценарии;
  • проверить выборочные данные;
  • замерить время;
  • записать результат;
  • исправить найденные проблемы.

Периодичность зависит от критичности. Для простого сайта достаточно реже. Для веб-сервиса с платежами, заказами и кабинетами тестовое восстановление нужно проводить регулярно, а также после существенных изменений архитектуры.

Важно тестировать не только "восстановили базу", но и "пользователь может выполнить сценарий". Например, зайти в личный кабинет, открыть документ, увидеть заказ, проверить статус оплаты, отправить заявку, открыть админку.

Что делать при аварии

В момент аварии нельзя действовать хаотично. Нужно сначала остановить ущерб, сохранить доказательства и выбрать правильный сценарий.

Порядок действий:

  • зафиксировать время и симптомы;
  • определить критичность;
  • остановить опасные операции, если они продолжаются;
  • сохранить логи;
  • понять, затронуты ли данные;
  • выбрать точку восстановления;
  • оценить потерю данных;
  • уведомить ответственных;
  • восстановить сервис в тестовой или резервной среде;
  • проверить критичные сценарии;
  • переключить пользователей или вернуть production;
  • сверить данные после восстановления;
  • зафиксировать инцидент;
  • обновить план, если нашли слабые места.

Если есть риск компрометации, нельзя просто восстановить старую копию в ту же среду без анализа. Нужно понять, как произошел доступ, сменить ключи, проверить пользователей, закрыть уязвимость и только потом возвращать сервис.

Как понять, что восстановление прошло успешно

Восстановление нельзя считать завершенным только потому, что сайт открылся. Нужно проверить бизнес-сценарии.

Минимальный набор проверок:

  • главная страница открывается;
  • вход пользователя работает;
  • админка доступна нужным ролям;
  • заявки на месте;
  • новые заявки сохраняются;
  • CRM-передача работает или поставлена в очередь;
  • платежные статусы сверены;
  • документы открываются;
  • файлы доступны только нужным пользователям;
  • уведомления отправляются;
  • очереди обрабатываются;
  • cron-задачи включены;
  • API отвечает;
  • логи пишутся;
  • мониторинг видит сервис;
  • резервное копирование снова работает.

После восстановления полезно вести список ручных сверок. Например, проверить последние 20 заявок, последние 20 платежей, последние загруженные документы, последние изменения ролей и последние интеграционные события.

Частые ошибки

Первая ошибка - хранить бэкап на том же сервере. При потере сервера исчезает и основная система, и копия.

Вторая ошибка - не проверять восстановление. Копии есть, но никто не знает, можно ли ими воспользоваться.

Третья ошибка - копировать только файлы, но не базу. Для веб-сервиса это почти всегда бесполезно.

Четвертая ошибка - копировать базу, но забывать документы и пользовательские файлы. Личный кабинет восстановится неполным.

Пятая ошибка - не защищать бэкапы. Архив с базой без шифрования может стать источником утечки.

Шестая ошибка - давать одному аккаунту право удалить и production, и резервные копии.

Седьмая ошибка - не учитывать платежи и CRM при восстановлении. После отката появляются расхождения статусов.

Восьмая ошибка - не делать точку восстановления перед массовым импортом или миграцией.

Девятая ошибка - не иметь регламента. В аварии команда тратит время на выяснение, кто отвечает и где лежат доступы.

Десятая ошибка - не обновлять план. Архитектура меняется, а backup-сценарий остается старым.

Что включить в первый релиз

Для первого релиза веб-сервиса не всегда нужна сложная disaster recovery архитектура. Но базовый уровень должен быть.

Минимальный набор:

  • автоматический бэкап базы;
  • копирование пользовательских файлов;
  • хранение копий вне основного сервера;
  • ограничение доступа к backup-хранилищу;
  • шифрование чувствительных данных;
  • контроль успешности бэкапа;
  • понятный срок хранения;
  • ручная точка перед релизами;
  • инструкция восстановления;
  • тестовое восстановление перед запуском или сразу после;
  • список критичных данных;
  • ответственный за процесс.

Если в первом релизе есть платежи, документы, личный кабинет, интеграции или заявки из рекламы, минимальный уровень нужно усиливать: чаще копии, отдельные проверки, сверка внешних статусов, лог событий и план аварийной коммуникации.

Что подготовить для подрядчика

Чтобы подрядчик мог правильно оценить резервное копирование, нужно дать не абстрактное "нужны бэкапы", а конкретный контекст.

Полезно подготовить:

  • какие данные хранит сервис;
  • какие данные критичны;
  • сколько данных создается в день;
  • сколько данных можно потерять;
  • сколько допустим простой;
  • какие внешние сервисы участвуют;
  • есть ли платежи;
  • есть ли документы;
  • есть ли персональные данные;
  • какие юридические сроки хранения;
  • кто будет иметь доступ;
  • где размещается инфраструктура;
  • нужно ли immutable storage;
  • как часто планируются релизы;
  • кто отвечает за аварии.

Если этих ответов нет, подрядчик может настроить технически рабочий backup, но он не обязательно подойдет бизнесу. Например, ежедневная копия будет выглядеть нормально в смете, но окажется недостаточной для сервиса, который получает заявки каждые 10 минут.

Как Wcoders может подойти к резервному копированию

Для Wcoders резервное копирование логично рассматривать не как отдельную техническую задачу, а как часть надежной разработки веб-сервиса. Особенно если проект связан с заявками, платежами, личным кабинетом, B2B-порталом, документами, CRM, 1С, импортом, API и админкой.

Практический подход:

  • разобрать критичные данные;
  • определить RPO и RTO;
  • описать сценарии аварий;
  • выбрать стратегию копирования базы и файлов;
  • защитить backup-хранилище;
  • настроить автоматические копии;
  • добавить контроль успешности;
  • подготовить инструкцию восстановления;
  • провести тестовое восстановление;
  • связать бэкапы с релизами, импортами и миграциями;
  • после запуска периодически проверять процесс.

Такой подход помогает не просто "иметь архив", а реально управлять рисками. Если что-то случится, команда будет знать, какие данные есть, где они лежат, как их восстановить и сколько времени это займет.

FAQ

Что такое резервное копирование веб-сервиса?

Это регулярное создание защищенных копий базы данных, файлов, конфигураций и других важных компонентов, которые позволяют восстановить сервис после сбоя, удаления, ошибки, атаки или неудачного релиза.

Как часто нужно делать бэкапы?

Частота зависит от RPO - допустимой потери данных. Для сайта без частых изменений может хватить ежедневной копии. Для сервиса с заявками, платежами и личным кабинетом копии могут понадобиться каждые 15 минут, каждый час или по событию.

Что важнее: бэкап или восстановление?

Бэкап важен только вместе с восстановлением. Если копию нельзя развернуть, проверить и использовать, она не защищает бизнес. Поэтому нужно регулярно проводить тестовое восстановление.

Где лучше хранить резервные копии?

Не на том же сервере, где работает основной сервис. Лучше использовать отдельное хранилище, другой аккаунт, другой регион, offsite-копию или immutable storage для критичных данных.

Что такое RPO и RTO?

RPO показывает, сколько данных можно потерять при аварии. RTO показывает, за сколько времени сервис должен вернуться в рабочее состояние. Эти показатели помогают выбрать частоту копий и сложность восстановления.

Нужно ли копировать пользовательские файлы?

Да, если они важны для продукта: документы, счета, акты, изображения, билеты, вложения заявок, PDF, сертификаты. База без файлов часто восстанавливает только часть сервиса.

Можно ли откатить только одну ошибочную операцию?

Можно, если заранее предусмотрены версии, audit log, soft delete, журнал импорта или точечное восстановление. Если таких механизмов нет, иногда приходится восстанавливать всю базу, что рискованнее.

Что делать после восстановления из бэкапа?

Нужно проверить бизнес-сценарии: вход, заявки, CRM, платежи, документы, уведомления, очереди, права доступа, API и мониторинг. Также нужно сверить данные, созданные незадолго до аварии.

Итог

Резервное копирование веб-сервиса - это не формальность и не архив "на всякий случай". Это система защиты данных и бизнес-процессов. Она должна учитывать базу данных, файлы, документы, конфигурации, код, платежи, CRM, интеграции, права доступа, сроки хранения и план восстановления.

Надежный backup-процесс строится вокруг RPO, RTO, автоматических копий, защищенного хранилища, контроля успешности, тестового восстановления и понятного аварийного регламента. Без этого проект может выглядеть стабильным до первой серьезной ошибки, а потом выяснится, что восстановление дольше и дороже, чем сама разработка.

Для бизнеса главный вывод простой: бэкап нужен не ради галочки. Он нужен, чтобы после сбоя можно было вернуть веб-сервис, данные, заявки, документы и доверие пользователей в понятные сроки и без хаоса.

Хотите запустить похожий проект?

Опишите задачу, и команда Wcoders подскажет, какой формат подойдет: MVP, Telegram Mini App, веб-сервис, интеграция или аудит текущего продукта.

Экспертиза Wcoders

За проектом стоит команда, которая думает о продукте, рисках и запуске

Мы смотрим на задачу шире кода: разбираем бизнес-сценарий, роли пользователей, интеграции, нагрузку, безопасность, стоимость поддержки и путь продукта после первого релиза.

01

Кто делает

В работу подключаем продуктовую аналитику, UX, frontend, backend и инфраструктуру ровно в том объеме, который нужен проекту.

02

Как принимаем решения

Сравниваем пользу функции, риски, сроки и влияние на бюджет, чтобы не раздувать первый запуск лишними возможностями.

03

Как проектируем архитектуру

Сразу продумываем роли, данные, API, интеграции, админку, безопасность и точки роста, чтобы продукт не пришлось пересобирать заново.

04

Как контролируем запуск

Проверяем ключевые сценарии, формы, платежи, уведомления, мобильную версию, скорость и поведение системы при ошибках.

Еще по теме

Другие полезные материалы

Собрали рядом материалы, которые помогают лучше разобраться в задаче и выбрать правильный формат разработки.

Поддержка и развитие веб-проекта после запуска: что входит, зачем нужна и как не потерять продукт
24 мин чтения

Поддержка и развитие веб-проекта после запуска: что входит, зачем нужна и как не потерять продукт

Разбираем поддержку сайта, веб-сервиса, MVP или цифровой платформы после запуска: мониторинг, безопасность, SEO, SLA и развитие.

Технический аудит веб-проекта: какие ошибки мешают росту, рекламе и SEO
26 мин чтения

Технический аудит веб-проекта: какие ошибки мешают росту, рекламе и SEO

Разбираем, зачем нужен технический аудит сайта или веб-сервиса, какие ошибки мешают индексации, рекламе, SEO, скорости, заявкам, аналитике и развитию проекта, и что проверять до масштабирования.

Перенос сайта или веб-сервиса на новую архитектуру: как не потерять SEO, данные и заявки
28 мин чтения

Перенос сайта или веб-сервиса на новую архитектуру: как не потерять SEO, данные и заявки

Разбираем, как перенести сайт, личный кабинет или веб-сервис на новую архитектуру без потери SEO, данных, заявок и платежей.