Евгений Сайты › Peppers Сбер ID
Сайты, SEO и GEO, реклама, чат-боты, ИИ и дизайн | Москва
Рейтинг
9 371
№ 111 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
9 /10
Город
Москва
Опыт работы
11 лет
На сайте с
2016 года
Юридический статус
Самозанятый
Freelance.Boutique
Премиум-сервис для лучших исполнителей

Резервное копирование сайтов и баз 1С для веб-студии: скрипты на Bash и PowerShell, хранилище по протоколу Amazon S3, проверка восстановления

Используемые навыки Amazon S3 Bash PowerShell Shell Script Скриптинг Bash

Описание

Резервное копирование для небольшой веб-студии, которая обслуживает интернет-магазины своих клиентов: около двадцати сайтов на серверах с 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 перечень серверов и то, чем сейчас пользуетесь. Подберу схему под ваш набор.

Оценили проект:

Другие проекты

Все проекты →
Маркетинг и Продвижение Продвижение в интернете: аудит сайтов, консультации по SEO, GEO (Generative Engine Optimization) и AEO для ответов нейросетей, аналитика в Метрике и Google Analytics
Продвижение в интернете: аудит сайтов, консультации по SEO, GEO (Generative Engine Optimization) и AEO для ответов нейросетей, аналитика в Метрике и Google Analytics
27
Дизайн и Брендинг Детская книга сказок о море от художника книги: раскадровка разворотов, глава-шторм в стиле манги, карикатура и мультфильм-трейлер, иллюстрации в Krita, герои без лиц
Детская книга сказок о море от художника книги: раскадровка разворотов, глава-шторм в стиле манги, карикатура и мультфильм-трейлер, иллюстрации в Krita, герои без лиц
13
Веб-разработка и IT Программа на Qt для ультразвуковых толщиномеров: перенос с C# на C++, график сигнала на OpenGL, общий протокол на C, версии для Windows и Linux
Программа на Qt для ультразвуковых толщиномеров: перенос с C# на C++, график сигнала на OpenGL, общий протокол на C, версии для Windows и Linux
17
Веб-разработка и IT Создание сайта магазина автозапчастей: поиск по артикулу на Elasticsearch, каталог в MongoDB, кэш Redis
Создание сайта магазина автозапчастей: поиск по артикулу на Elasticsearch, каталог в MongoDB, кэш Redis
18