Резервное копирование для небольшой веб-студии, которая обслуживает интернет-магазины своих клиентов: около двадцати сайтов на серверах с Linux и два сервера с Windows, где лежат базы 1С. Схему настроил Евгений Росляков, который делает сайты с 2016 года. Он самозанятый, поэтому работа идёт по договору, а юрлицам к нему прилагаются закрывающие документы. Основное общение — удалённо, лично можно увидеться в Москве.
Копии у студии делались вручную, «когда вспомнят». Администратор заходил на сервер, выгружал базу и клал архив на тот же диск. Вспоминали то раз в месяц, то реже. Копия на сервере, который может выйти из строя, бесполезна, а открывается ли она вообще, никто не проверял.
Однажды это закончилось плохо. Сайт клиента упал, и восстановить его не получилось: свежая копия оказалась неполной, а старая была слишком давней. Магазин собирали заново по кускам, и заказы за несколько дней пришлось вытаскивать из почты.
После этого студия решила, что копии нужны по расписанию, в отдельном месте и с проверкой. Задача: автоматизировать всё, что можно, и сделать схему такой, чтобы любой администратор её понял и мог поддерживать.
Для серверов с Linux написал скрипты на Bash. Один выгружает базы MySQL и PostgreSQL так, чтобы магазин не вставал в рабочее время: таблицы InnoDB в MySQL выгружаются одной транзакцией без блокировки, а pg_dump в PostgreSQL по умолчанию читает согласованный снимок и никого не блокирует. Другой архивирует файлы сайта, пропуская кеш и временные папки: они только раздувают архив. Третий копирует результат на другой сервер через rsync.
Хранение устроено по ротации: ежедневные копии держатся недолго, еженедельные дольше, месячные ещё дольше. Старые удаляются сами, диски не забиваются.
Чтобы новые проекты подключались просто, сделал общий шаблон на Shell Script. Скриптинг Bash в студии теперь устроен одинаково: у каждого сайта свой файл настроек с путями, именем базы и сроком хранения, общий журнал и понятные коды выхода. Если что-то не получилось, скрипт завершается с ненулевым кодом, и это видно в отчёте. Новый сайт подключается заполнением одного файла.
На Windows-серверах работает PowerShell. Он выгружает информационные базы 1С в пакетном режиме, снимает теневые копии тома для файловых баз и упаковывает всё в архив. Логика та же, что на Linux, только инструменты другие.
Все архивы шифруются перед отправкой и уходят в объектное хранилище российского облачного провайдера. Хранилище работает по протоколу Amazon S3. Это общий стандарт: его поддерживают многие провайдеры, а привязки к зарубежному облаку нет. Достаточно тех же утилит, адреса хранилища и ключей доступа. Включил версионирование и правила хранения, чтобы случайная перезапись или удаление не уничтожили копию.
Раз в неделю система сама поднимает свежую копию на тестовом сервере и проверяет, что сайт открывается, а база читается. Результат приходит в рабочий чат, и туда же — тревога, если что-то сломалось.
Копии делаются сами каждую ночь, без вспоминания и ручной работы. Администратору не нужно заходить на сервер за выгрузкой: утром он смотрит отчёт в чате, и если всё в порядке, больше ничего не делает.
Главное изменение — студия знает, что копия живая. Еженедельное восстановление на тестовом сервере показывает это заранее, а не в день аварии. Тревога приходит, пока сбой мелкий, и его успевают починить.
Новый проект подключается быстро: скопировали файл настроек, прописали пути, проверили первый запуск. Для разработчиков студии это не отдельная наука, разобраться может любой, кто видел терминал.
Копии лежат вне серверов, на разных уровнях хранения. Потеря диска или случайное удаление не оставят студию без данных.
Есть ограничения. Проверка восстановления подтверждает, что сайт открывается и база читается, но не проверяет каждый заказ и каждую функцию магазина. Раз в квартал стоит проходить полное восстановление вручную. Выгрузка базы 1С занимает монопольный доступ к ней, поэтому её время выбрано в тихие часы, и если у клиента ночью идёт работа, расписание придётся двигать.
В планах — уведомление о том, что в хранилище заканчивается квота, и восстановление выбранного сайта одним запуском скрипта.
Если вам нужно резервное копирование сайтов или баз 1С, которое проверяет само себя, пришлите мне через freelance.ru перечень серверов и то, чем сейчас пользуетесь. Подберу схему под ваш набор.