Skip to content
mxBackup
mxBackup
Резервное копирование сайта MODX Revolution 2 и 3 — архив файлов и SQL-дамп из менеджера, CLI и cron, обезличенные копии для разработки, шифрование AES-256 и безопасное восстановление.
  1. Компоненты
  2. mxBackup
  3. Настройка

Профили

Профиль — это именованный набор правил: что попадает в архив, в каком формате и что делается с персональными данными. Профиль выбирается при каждом запуске (--profile=имя или выпадающий список в менеджере), а если не указан — берётся из настройки mxbackup.default_profile.

Из коробки создаются два профиля.

ПрофильРежим в менеджереЗначение в файлеНазначение
prodProductionprodПолная аварийная копия. Данные не изменяются.
devDevelopmentdevКопия для разработки. Обезличивание включено принудительно.

Режим (mode) — не просто подпись: обезличивание применяется только в режиме Development, и в таком профиле стандартные правила нельзя выключить. Третий режим — «Пользовательский» (custom), для собственных профилей без обезличивания.

Подписи в менеджере и значения в файле

В интерфейсе режимы называются Production, Development и Пользовательский, а в файле профиля и в отчётах запуска те же режимы записаны как prod, dev и custom. Дальше в документации используются значения из файла — именно они видны в --profile, манифесте и истории.

Где хранятся профили

Каждый профиль — отдельный PHP-файл в каталоге из системной настройки mxbackup.config_dir. По умолчанию это core/config/mxbackup/profiles/, в значении допустим плейсхолдер {core_path}.

  • Имя файла и есть имя профиля: prod.php → профиль prod. Допустимы латинские буквы, цифры, _ и -.
  • Запись идёт через временный файл и атомарное переименование, права итогового файла — 0640.
  • Менеджер и CLI читают один и тот же источник — расхождения между интерфейсом и cron-задачей быть не может.
  • Файлы можно версионировать в git и копировать между сайтами.

Каталог профилей — не место для webroot

В файле профиля лежит пароль шифрования архива в открытом виде. Каталог должен быть недоступен по HTTP; путь по умолчанию внутри core/ этому условию удовлетворяет.

Структура файла

php
<?php

return [
  'name' => 'dev',
  'description' => 'Копия для разработки',
  'mode' => 'dev',
  'active' => true,
  'format' => 'zip',
  'encryption' => ['enabled' => true, 'password' => '…'],
  'files' => [
    'include' => ['*'],
    'exclude' => ['core/cache/', 'core/packages/', 'core/config/', 'assets/cache/'],
  ],
  'database' => [
    'include_tables' => ['*'],
    'exclude_tables' => ['modx_session'],
  ],
  'masking' => ['standard' => true, 'rules' => []],
  'createdon' => 1754400000,
  'editedon' => 1754400000,
];

Профиль с active => false не предлагается для запуска. Встроенные prod и dev нельзя переименовать или удалить.

Настройка в менеджере

Три вкладки Компоненты → mxbackup отвечают за состав профиля.

MODX 2: половина действий живёт в контекстном меню

В линии для MODX 2 интерфейс построен на стандартных гридах менеджера, а в них правка, удаление и просмотр открываются щелчком правой кнопкой мыши по строке — кнопок для этого в панели нет. Что где спрятано:

ВкладкаПравая кнопка по строкеДругие способы
Профили«Редактировать»кнопка «Добавить профиль» в панели
Таблицы БДменю нетобычный щелчок по строке включает и выключает таблицу
Обезличивание«Добавить правило» / «Изменить правило», «Удалить»кнопка «Очистить таблицу в dev-копии» в панели
История«Детали запуска», «Восстановить из архива»двойной щелчок по строке открывает отчёт

Пункты, требующие права mxbackup_manage или mxbackup_restore, у остальных пользователей в меню не появляются.

MODX 3: действия видны в строке

В линии для MODX 3 контекстных меню нет — у каждой строки справа стоят кнопки действий, а таблицы включаются переключателем:

ВкладкаКак действовать
Профиликнопки «Изменить» и «Удалить» в строке, «Добавить профиль» — над таблицей; двойной щелчок по строке тоже открывает правку
Таблицы БДпереключатель в колонке «В архиве»; изменение сохраняется сразу
Обезличиваниекнопки правки и удаления правила в строке, «Очистить таблицу в dev-копии» — над таблицей
Историякнопки «Детали запуска» и «Восстановить из архива» в строке; двойной щелчок открывает отчёт

Кнопки, требующие права mxbackup_manage или mxbackup_restore, у остальных пользователей не отображаются.

Профили

Режим, формат архива, шифрование и пароль, флаг «Активен», а также include/exclude для файлов сайта. Профиль создаётся кнопкой «Добавить профиль», а редактируется через контекстное меню строки (MODX 2) или кнопкой «Изменить» в строке (MODX 3). Правка требует права mxbackup_manage.

Таблицы БД

Грид реальных таблиц базы с числом строк, размером, движком и признаком «в архиве». Поиск — по любой части имени, пагинация серверная. В MODX 2 таблица включается и выключается щелчком по строке, после чего изменения сохраняются кнопкой в панели; в MODX 3 — переключателем в строке, который сохраняет выбор сразу.

Кнопки «Включить все» и «Исключить все» действуют на результат текущего поиска: с непустым запросом меняются только найденные таблицы, с пустым — все.

Отдельно задаётся поведение для таблиц, которых на момент настройки ещё не существовало:

Режим «Новые таблицы»Что записывается в профильПоведение
Добавлять автоматическиinclude_tables = ['*'], невыбранные попадают в exclude_tablesНовая таблица войдёт в архив сама
Только выбранныеinclude_tables = явный список, exclude_tables пустНовая таблица в архив не войдёт, пока её не отметят

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

Обезличивание

Правила подмены данных для режима Development — подробно на странице Обезличивание.

Отбор файлов

include и exclude — списки путей и масок относительно корня сайта, по одному на строку. Правило простое: сначала проверяются исключения, и если путь попал под любое из них, файл в архив не идёт независимо от include.

ЗаписьЧто означает
*все файлы (значение include по умолчанию)
core/cache/каталог целиком; завершающий / обязателен
assets/uploads/*.zipмаска в стиле fnmatch; * не переходит через /
assets/images/logo.pngконкретный файл

Каталог, попавший под исключение, не обходится вообще — это заметно экономит время на core/cache/.

Дополнительно:

  • символические ссылки пропускаются — в отчёт запуска добавляется предупреждение с путём;
  • нечитаемый файл не прерывает копию, а даёт предупреждение, и статус запуска становится «С предупреждениями»;
  • если каталог хранения архивов оказался внутри корня сайта, он исключается автоматически — архив не попадёт сам в себя.

Формат архива и шифрование

Формат задаётся в профиле (tar.gz или zip) и может быть переопределён настройкой, файлом конфигурации или флагом --format — см. Системные настройки.

ФорматТребованияОсобенности
tar.gzPhar, zlibЗначение по умолчанию. Шифрование недоступно.
zipext-zipПоддерживает AES-256 для содержимого файлов.

AES-256

Чтобы зашифровать архив: выберите формат zip, включите шифрование в профиле и задайте пароль. Требуется ext-zip, собранный с libzip 1.2 или новее; после записи архива пакет проверяет, что без пароля содержимое действительно не читается, и при неудаче не публикует архив.

  • Пароль хранится в открытом виде в PHP-файле профиля с правами 0640. Это защита архива при передаче, а не при компрометации сервера.
  • Пароль не возвращается в интерфейс, не пишется в манифест, историю и журнал. Пустое поле при повторном редактировании означает «оставить прежний».
  • Восстановить забытый пароль невозможно — храните его в менеджере паролей.
  • Шифруется содержимое элементов, имена файлов внутри архива видны.
  • Для распаковки нужен архиватор с поддержкой WinZip AES-256.

Перенос профиля на другой сайт

  1. Скопируйте файл профиля в каталог mxbackup.config_dir целевого сайта.
  2. Проверьте пути в исключениях: они относительны корня сайта, но структура каталогов у проектов различается.
  3. Выполните validate-config, затем dry-run — состав таблиц на другом сайте почти наверняка отличается.

Префикс таблиц

В правилах обезличивания используются маски вида *_users, поэтому они переносятся между сайтами с разными префиксами таблиц. А вот явные списки include_tables/exclude_tables записываются с реальными именами и после переноса требуют проверки.

Собственный профиль

Профиль можно завести двумя равноправными способами: кнопкой «Добавить профиль» в менеджере или просто положив PHP-файл в каталог профилей — например, скопировав prod.php под новым именем и поправив содержимое. Каталог перечитывается при каждом обращении, поэтому новый файл виден в CMP и в CLI сразу.

При ручном создании учтите четыре правила:

  • имя профиля — это имя файла, а не ключ name внутри: при чтении name принудительно заменяется на имя файла без расширения;
  • имя файла должно состоять из латинских букв, цифр, _ и -; файл с другим именем при обходе каталога просто пропускается;
  • файл обязан возвращать массив, иначе запуск завершится ошибкой «Файл конфигурации должен возвращать массив»;
  • необязательные ключи имеют умолчания: mode без значения — это custom, то есть без обезличивания; отсутствующий active считается включённым.

Правка в CMP перезаписывает файл целиком

Сохранение профиля через интерфейс переписывает файл заново: комментарии, форматирование и порядок ключей не сохраняются. Для профилей, которые лежат в git, это заметно в diff.

Типичные сценарии собственного профиля:

  • только база — исключить * из файлов, оставив дамп;
  • быстрая копия перед обновлением — исключить assets/ с тяжёлыми загрузками, оставив код и базу;
  • отдельный каталог хранения — прописать в файле профиля ключ storage_path, например для копий, которые забирает внешний скрипт. В интерфейсе такого поля нет: путь задаётся либо в файле профиля, либо глобально системной настройкой.

После создания профиля обязательно выполните для него dry-run.