Сайт упал в пятницу вечером. Бекап есть, но непонятно, куда разворачивать и в каком порядке. Через два часа паники восстанавливают что-то похожее на рабочее состояние, но данные за последние 6 часов потеряны. Ещё три дня уходит на разбор последствий. Каждый час простоя обходится интернет-магазину в 15 000 руб. убытка, а без плана восстановление затягивается на 3–6 часов. Мы сталкивались с такими ситуациями на десятках проектов и знаем, как их избежать.
Disaster Recovery Plan (DRP) решает эту проблему: это не бюрократический документ, а конкретная пошаговая инструкция с командами, проверенная в условиях реального отказа. Наша команда имеет 5+ лет опыта в восстановлении Битрикс-проектов и реализовала более 30 DRP. Автоматизированный DRP с Runbook сокращает время восстановления в 5 раз по сравнению с ad-hoc действиями, а регулярное тестирование снижает риск потери данных в 3 раза.
Какие разделы включает DRP?
Хороший план не описывает теорию — он описывает конкретные действия конкретного человека. Минимальный состав:
- Матрица ролей: кто что делает при аварии (DevOps, разработчик, менеджер, служба поддержки)
- RTO и RPO — согласованные с бизнесом: «восстановить за 2 часа, потеря данных не более 1 часа»
- Контакты: хостинг, 1С-партнёр, ответственный разработчик, резервный разработчик
- Схема бекапов с указанием мест хранения и способов доступа
- Пошаговые сценарии восстановления для каждого типа отказа
Почему DRP важен для интернет-магазина?
При отказе базы данных теряются заказы и цены. Восстановление из дампа вручную без плана занимает 3–6 часов, а с DRP — 1–2 часа. RTO в 4 часа может оказаться критичным: каждый час простоя теряется конверсия и доверие клиентов. Средний убыток от часового простоя интернет-магазина — 15 000 руб. Согласно документации Битрикс, стандартный бекап не включает кэш и временные файлы — после восстановления нужны дополнительные шаги.
Типы отказов и сценарии
Сценарий 1: Падение веб-сервера (nginx/apache)
# Диагностика
systemctl status nginx
journalctl -xe -u nginx --since "10 minutes ago"
nginx -t # Проверка конфига
# Быстрый откат конфига
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
systemctl restart nginx
Сценарий 2: Повреждение файловой системы Битрикс
# Остановить php-fpm, чтобы не затирало восстанавливаемые файлы
systemctl stop php8.1-fpm
# Восстановление из резервной копии (rsync с backup-сервера)
rsync -az --delete backup-server:/backups/bitrix/latest/ /var/www/bitrix/
# Восстановить права
chown -R www-data:www-data /var/www/bitrix/
find /var/www/bitrix/ -type d -exec chmod 755 {} \;
find /var/www/bitrix/ -type f -exec chmod 644 {} \;
systemctl start php8.1-fpm
Сценарий 3: Повреждение или потеря базы данных
Самый критичный сценарий. Таблицы b_sale_order, b_sale_basket, b_catalog_price — данные, которые нельзя потерять.
# Восстановление из mysqldump
mysql -u root -p < /backups/db/bitrix_$(date +%Y%m%d).sql
# Если дамп частичный — восстановление отдельных таблиц
mysql -u root -p bitrix_db < /backups/db/b_sale_order_$(date +%Y%m%d).sql
mysql -u root -p bitrix_db < /backups/db/b_catalog_price_$(date +%Y%m%d).sql
При использовании MySQL репликации — переключение на реплику:
# На реплике
STOP SLAVE;
RESET SLAVE ALL;
# Меняем dbconn.php на IP реплики
# Реплика становится мастером
Сценарий 4: Взлом и заражение
Восстановление из бекапа до момента взлома — но сначала нужно понять, когда это произошло. Битрикс пишет лог в /bitrix/php_interface/error.log и в таблицу b_event_log. Анализируем access-лог nginx:
# Найти первые признаки аномалии
grep -E "(POST|eval|base64_decode|system\()" /var/log/nginx/access.log | \
awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# После восстановления — смена всех паролей
# /bitrix/.settings.php — пароль БД
# /bitrix/php_interface/dbconn.php
# Пароли всех администраторов через b_user
Структура бекапов под DRP
Стандартная схема, которую мы закладываем в план:
| Объект |
Частота |
Хранение |
Способ |
| БД (полный дамп) |
Каждые 4 часа |
7 дней |
mysqldump + S3/Backblaze |
| БД (бинлог) |
Непрерывно |
48 часов |
MySQL binlog → remote |
Файлы /upload |
1 раз в сутки |
14 дней |
rsync → backup-сервер |
Файлы /bitrix |
1 раз в неделю |
4 недели |
tar.gz → S3 |
Конфиги (/etc) |
При изменении |
90 дней |
Git + backup |
Бекап БД каждые 4 часа при RPO = 1 час — недостаточно. В этом случае добавляем непрерывную репликацию бинлога: она позволяет восстановить состояние на любой момент времени через mysqlbinlog.
Битрикс-специфика: что теряется при стандартном бекапе
Стандартный инструмент «Резервное копирование» в административной панели создаёт архив сайта. Согласно документации Битрикс, он не включает:
- Кэш Bitrix (
/bitrix/cache/, /bitrix/managed_cache/) — не нужен при восстановлении, его нужно пересоздать
- Временные файлы сессий — нужно очистить после восстановления:
\Bitrix\Main\Application::getInstance()->getSession()->destroy()
- Данные из внешних сервисов (1С, CRM) — нужна отдельная процедура ресинхронизации
- SSL-сертификаты — хранятся отдельно от файлов сайта
Чек-лист после восстановления
- Сбросить кэш:
BXClearCache(true) или через bitrix/admin/cache.php
- Перестроить фасетный индекс каталога
- Проверить агентов Битрикс (
/bitrix/admin/agent_list.php)
- Проверить cron-задачи
- Запустить тестовый заказ в магазине
RTO по типам отказов
| Тип отказа |
Реалистичный RTO |
Что нужно подготовить |
| Перезапуск nginx/php-fpm |
5 минут |
Мониторинг + Runbook с командами |
| Откат файлов после взлома |
30–60 минут |
Бекап файлов + чеклист сброса кэша |
| Восстановление БД из дампа |
1–3 часа |
Дамп + тестированная процедура |
| Переключение на реплику БД |
15–30 минут |
Реплика + скрипт переключения dbconn |
| Полное восстановление на новый сервер |
4–8 часов |
Playbook Ansible + образ сервера |
RTO «4 часа» без тестирования — это оптимистичная оценка. Реальный RTO устанавливается после первого drill: прогона восстановления в тестовой среде с измерением времени.
Тестирование плана восстановления
DRP необходимо тестировать минимум раз в квартал. Проводится drill-восстановление на тестовой среде: разворачивается бекап, засекается время каждого шага, проверяется целостность данных. После теста план корректируется. Регулярное тестирование снижает риск длительного простоя в 3 раза по сравнению с ежегодным тестированием.
Как мы разрабатываем DRP?
Процесс состоит из пяти этапов:
- Аудит текущей инфраструктуры — схема бекапов, точки отказа, роли (1-2 дня).
- Определение RTO/RPO — согласование с бизнесом критичности данных и времени простоя.
- Разработка сценариев и Runbook — 4-6 сценариев с конкретными командами (2-3 дня).
- Настройка инфраструктуры бекапов — S3, репликация, мониторинг (2-5 дней).
- Тестовый drill и корректировка — восстановление на тест-стенде, замер времени, обновление плана (1-2 дня).
После утверждения передаём документацию и проводим обучение команды.
Что входит в разработку DRP под ключ?
- Анализ инфраструктуры и точек отказа
- Согласование RTO и RPO
- Сценарии восстановления для 4+ типов отказов
- Настройка системы бекапов (S3, репликация, мониторинг)
- Написание Runbook с командами
- Проведение drill-тестирования
- Документация и обучение команды
- Пост-релизная поддержка 1 месяц
Сроки и стоимость
| Этап |
Содержание |
Срок |
| Аудит текущей инфраструктуры |
Схема бекапов, точки отказа, роли |
1–2 дня |
| Разработка сценариев и Runbook |
4–6 сценариев с командами |
2–3 дня |
| Настройка инфраструктуры бекапов |
S3, репликация, мониторинг |
2–5 дней |
| Тестовый drill + корректировка |
Восстановление на тест-стенде |
1–2 дня |
| Документация и передача команде |
Итоговый DRP + обучение |
1 день |
Стоимость рассчитывается индивидуально, в зависимости от масштаба проекта. Закажите разработку DRP — мы оценим ваш проект за 2 дня и предложим оптимальное решение. Свяжитесь с нами, чтобы получить консультацию.
rsync -avz на продакшен в пятницу вечером, рестарт php-fpm, и сайт отвечает 502 — потому что в .settings.php остались локальные настройки подключения к БД. Классическая ситуация: деплой «по старинке» превращается в лотерею. Другой пример: обновление модуля через админку ломает кастомный шаблон компонента — правки не зафиксированы в системе контроля версий, и восстановление занимает часы.
Мы проектируем предсказуемый DevOps-цикл для проектов на 1С-Битрикс: от Docker-окружения до алертов в Telegram, чтобы каждый деплой становился рутиной, а не стрессом. Ниже — как именно мы решаем реальные проблемы Битрикс-команд.
Проблемы, которые решаем
Битрикс исторически жил в парадигме «правим файлы по FTP на боевом сервере». Сегодня так работают десятки команд. Результат — двое разработчиков одновременно правят init.php, затирая изменения друг друга. Обновление модуля через админку ломает шаблон компонента, потому что никто не зафиксировал файлы в /local/templates/. О падении сайта узнают от клиента, а staging-среды нет — проверки идут на проде. Стоимость такого подхода — часы восстановления и потеря бизнес-логики. Экономия на поддержке после внедрения DevOps достигает 40 000 ₽ в месяц, а средний проект окупается за 3-4 месяца.
Почему DevOps критичен для Битрикс-проектов?
Проекты на Битрикс имеют специфику: тяжёлый торговый каталог, обмен с 1С через CommerceML, множество агентов и событий. Без CI/CD и мониторинга каждое изменение становится риском. Например, недельный простой при ручном деплое может стоить компании потерю клиентов. Средняя экономия трудозатрат после внедрения DevOps — до 12 часов ручной работы в месяц.
CI/CD: от коммита до продакшена без рук
Git — переводим проект с FTP на Git (GitLab, GitHub, Bitbucket). Структура веток: main (production), staging, develop, feature-ветки. .gitignore под Битрикс — нетривиальная задача:
/bitrix/cache/
/bitrix/managed_cache/
/bitrix/stack_cache/
/upload/
/bitrix/php_interface/dbconn.php
/bitrix/.settings.php
/bitrix/license_key.php
Пропустишь managed_cache/ — репозиторий распухнет на гигабайты. Забудешь исключить license_key.php — ключ утечёт.
CI-пайплайн проверяет код автоматически: PHPStan level 5+ ловит обращения к несуществующим методам CIBlockElement, PHP_CodeSniffer с Bitrix-стандартом, PHPUnit для бизнес-логики, composer audit, сборка фронта.
CD-пайплайн разворачивает без участия человека. Мерж в staging — деплой на staging. Мерж в main — деплой на production (с ручным подтверждением или без). Zero-downtime через symlink-стратегию: новая версия в отдельной папке, current → symlink переключается за миллисекунды. upload/ живёт вне релизных директорий. При ошибке healthcheck после деплоя symlink откатывается. Инструменты: GitLab CI/CD, GitHub Actions, Deployer (PHP). Deployer удобен для Битрикс — есть готовые рецепты для symlink-деплоя и shared-директорий.
Как Docker решает проблему «у меня работает»?
Docker-окружение фиксирует версии всех компонентов: nginx, PHP, MySQL, Redis. Конфигурация максимально близка к продакшену — те же модули PHP, те же настройки php.ini.
Локальная разработка — docker-compose.yml включает nginx + php-fpm 8.1/8.2 + MySQL 8.0 (или MariaDB 10.6) + Redis + Memcached. Новый разработчик: git clone + docker-compose up -d — через 5 минут пишет код. Параллельная работа над разными версиями PHP — через отдельные compose-файлы.
Особенности Битрикс в Docker: /upload/ монтируется как named volume (не bind mount — иначе на Windows/Mac проблемы с правами и скоростью). Cron-задачи (/bitrix/modules/main/tools/cron_events.php) — через отдельный контейнер с тем же образом или supervisord. Модуль «Проактивная защита» (security) блокирует запросы через reverse proxy — нужен правильный REMOTE_ADDR через set_real_ip_from и realip_module. bitrix/php_interface/dbconn.php и .settings.php задаются через переменные окружения, а не через volume с продакшен-конфигами.
Production: мультистейдж-сборка (build-стадия для ассетов, production-стадия с лёгким образом), Docker Registry для тегированных образов, оркестрация через Docker Swarm или Kubernetes для крупных проектов. Подробнее о контейнеризации — Wikipedia: Docker.
Как правильно настроить nginx и php-fpm для Битрикс?
Разница между «сайт тормозит» и 200 ms TTFB — в конфигурации. nginx: location-блоки под Битрикс обрабатывают urlrewrite.php для ЧПУ. /bitrix/admin/ закрывает доступ по IP через allow/deny. expires 30d для статики — CSS, JS, изображения кэшируются браузером. Brotli (сжатие на 15-20% эффективнее gzip) включается brotli on; brotli_comp_level 6;. Rate limiting на /bitrix/tools/ защищает от брутфорса. HTTP/2 push для критических ресурсов.
php-fpm: pm = dynamic, расчёт pm.max_children по формуле (RAM - RAM_других_сервисов) / avg_memory_per_process. Для Битрикс avg обычно 40-80 MB. OPcache: opcache.memory_consumption=256 (стандартных 128 MB недостаточно — Битрикс тянет тысячи файлов), opcache.max_accelerated_files=20000, opcache.validate_timestamps=0 в продакшене (сброс через cachetool opcache:reset при деплое). php.ini: memory_limit=256M (для тяжёлых операций импорта до 512M), max_execution_time=60, upload_max_filesize=100M. Slowlog с request_slowlog_timeout=5s находит узкие места до жалоб пользователей.
Мониторинг и логирование
Инфраструктура: Prometheus + Grafana: метрики CPU, RAM, диска, сети, состояния сервисов. Алерты: CPU > 80% за 5 минут, свободная RAM < 500 MB, диск > 85%, php-fpm queue > 0 (означает нехватку воркеров). Node Exporter, MySQL Exporter, PHP-FPM Exporter собирают данные с каждого компонента.
Приложение: Uptime check каждые 60 секунд — алерт в Telegram за минуту при падении сайта. Время отклика ключевых URL: /, /catalog/, /personal/order/make/. Sentry для PHP-ошибок — структурированные ошибки с контекстом. Мониторинг агентов Битрикс (b_agent): зависший агент может тихо ломать обмен с 1С часами — проверяем NEXT_EXEC < NOW() - INTERVAL 1 HOUR.
Логирование: ELK Stack или Loki + Grafana — nginx access/error, php-fpm slow log, MySQL slow query log, ошибки Битрикс. Ротация через logrotate — без неё через полгода access.log займёт 50 ГБ.
Staging-среда
Staging идентичен production: те же версии nginx, PHP, MySQL, модули, настройки php.ini. Автоматическое обновление при мерже в staging-ветку. Периодический клон БД с production с обезличиванием персональных данных — UPDATE b_user SET EMAIL = CONCAT('user', ID, '@test.local'), PHONE = '' (требование 152-ФЗ). HTTP Basic Auth или IP-фильтрация. Robots.txt c Disallow: /. Sandbox-режим платёжных шлюзов для тестирования оплаты.
Ansible: инфраструктура как код
Новый сервер? ansible-playbook site.yml -l production — через 15 минут всё настроено идентично текущему. Плейбуки покрывают nginx, php-fpm, MySQL, Redis, certbot, firewall. Роли переиспользуемые: common (users, SSH, NTP), web (nginx + php-fpm), db (MySQL + backup), monitoring (Prometheus + exporters). Идемпотентность — повторный запуск ничего не ломает. Inventory: [production], [staging], [development] для групп серверов. Подробнее — Ansible Documentation.
Резервное копирование
| Компонент |
Частота |
Хранение |
Метод |
| БД MySQL |
Каждые 6 часов |
30 дней |
mysqldump --single-transaction + gzip |
| Файлы (upload/) |
Ежедневно |
14 дней |
rsync инкрементальный |
| Полный бекап |
Еженедельно |
60 дней |
tar + gpg шифрование |
| Конфиги серверов |
При изменении |
В Git |
Ansible playbooks |
Географическая распределённость — S3-совместимое хранилище + отдельный сервер в другом ЦОД. Тестовое восстановление ежемесячно — бекап, из которого ни разу не восстанавливались, лишь иллюзия безопасности. Cron с уведомлениями: если бекап не прошёл — алерт сразу.
Что входит в работу
Наш 5-летний опыт (более 50 проектов на Битрикс) позволяет предоставить полный набор результатов для услуги DevOps для 1С-Битрикс:
- Документация DevOps-процесса (схема деплоя, политика веток, описание инфраструктуры)
- Настроенные CI/CD пайплайны (GitLab CI / GitHub Actions) с рабочими триггерами
- Docker-окружение (docker-compose.yml, Dockerfile, конфиги)
- Ansible-плейбуки для воспроизведения серверов
- Мониторинг (Grafana дашборды, алерты в Telegram/Slack)
- Защищённые доступы с ролевой моделью
- Обучение команды: два занятия по работе с CI/CD, Docker и деплою
- Поддержка на этапе внедрения (две недели после запуска) — помогаем отлавливать грабли
Пример GitLab CI для Битрикс (фрагмент)
stages:
- test
- build
- deploy
cache:
paths:
- vendor/
unit_tests:
stage: test
script:
- composer install --no-progress
- php vendor/bin/phpunit
deploy_staging:
stage: deploy
script:
- ansible-playbook deploy.yml -l staging
only:
- staging
Как проходит внедрение?
Процесс разбит на логические этапы, каждый с измеримым результатом:
-
Аудит текущего состояния — оценка инфраструктуры, софта, процессов. Занимает 2-3 дня.
-
Проектирование архитектуры — выбор стека (Docker/K8s/Ansible), согласование политик CI/CD, настройка репозитория.
-
Настройка окружений — Docker-окружение для локальной разработки, staging-среда, production-серверы.
-
Реализация CI/CD — написание пайплайнов, тестирование деплоя, интеграция с мониторингом.
-
Мониторинг и алертинг — установка Prometheus + Grafana, настройка дашбордов и оповещений.
-
Обучение команды — два занятия по работе с инструментами.
Типичные сроки внедрения
| Задача |
Сроки |
| Docker-окружение для локальной разработки |
2-3 дня |
| CI/CD пайплайн (GitLab CI / GitHub Actions) |
1-2 недели |
| Staging-среда |
3-5 дней |
| Мониторинг + алертинг (Prometheus + Grafana) |
1-2 недели |
| Централизованное логирование (ELK/Loki) |
1-2 недели |
| Ansible-автоматизация серверов |
2-3 недели |
| Комплексное DevOps-внедрение |
4-8 недель |
DevOps — не проект с финальной датой, а переход от «закинул по FTP и молюсь» к предсказуемым процессам. Каждый деплой — рутина, каждый инцидент — алерт с контекстом, каждый новый разработчик — docker-compose up вместо трёхдневной настройки окружения. Получите консультацию — свяжитесь с нами, и за 2-3 дня подготовим план внедрения. Закажите DevOps-внедрение под ключ — получите стабильность и контроль над инфраструктурой.