
Профили
Профиль — это именованный набор правил: что попадает в архив, в каком формате и что делается с персональными данными. Профиль выбирается при каждом запуске (--profile=имя или выпадающий список в менеджере), а если не указан — берётся из настройки mxbackup.default_profile.
Из коробки создаются два профиля.
| Профиль | Режим в менеджере | Значение в файле | Назначение |
|---|---|---|---|
prod | Production | prod | Полная аварийная копия. Данные не изменяются. |
dev | Development | dev | Копия для разработки. Обезличивание включено принудительно. |
Режим (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
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.gz | Phar, zlib | Значение по умолчанию. Шифрование недоступно. |
zip | ext-zip | Поддерживает AES-256 для содержимого файлов. |
AES-256
Чтобы зашифровать архив: выберите формат zip, включите шифрование в профиле и задайте пароль. Требуется ext-zip, собранный с libzip 1.2 или новее; после записи архива пакет проверяет, что без пароля содержимое действительно не читается, и при неудаче не публикует архив.
- Пароль хранится в открытом виде в PHP-файле профиля с правами
0640. Это защита архива при передаче, а не при компрометации сервера. - Пароль не возвращается в интерфейс, не пишется в манифест, историю и журнал. Пустое поле при повторном редактировании означает «оставить прежний».
- Восстановить забытый пароль невозможно — храните его в менеджере паролей.
- Шифруется содержимое элементов, имена файлов внутри архива видны.
- Для распаковки нужен архиватор с поддержкой WinZip AES-256.
Перенос профиля на другой сайт
- Скопируйте файл профиля в каталог
mxbackup.config_dirцелевого сайта. - Проверьте пути в исключениях: они относительны корня сайта, но структура каталогов у проектов различается.
- Выполните
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.
