Изоляция
Rudel — это система наложения, выбираемая для каждого запроса. Выбранный запрос использует таблицы базы данных и файлы темы песочницы, при этом продолжает выполняться через установку WordPress на хосте.
Изолируется в каждой песочнице
Таблицы WordPress
Для каждой песочницы создается префикс таблиц: префикс хоста плюс первые семь шестнадцатеричных символов MD5 идентификатора песочницы.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel переключает префикс таблиц WordPress до завершения загрузки WordPress, поэтому каждый запрос в песочнице читает и записывает ее копии таблиц.
Пользователи
Таблицы users и usermeta клонируются вместе с остальными. При создании песочница получает пользователей и пароли хоста; после этого созданные, измененные или удаленные в песочнице пользователи не влияют на хост, а изменения на хосте не попадают в песочницу.
Файлы активной темы
Выбранная тема копируется в каталог песочницы:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Если тема является дочерней, Rudel также копирует родительскую тему, чтобы связь шаблонов оставалась действительной. Песочница всегда предоставляет тему, записанную при создании; переключение тем внутри песочницы ни на что не влияет.
Общее с хостом
- Ядро WordPress
- файлы плагинов
- загруженные медиафайлы
Плагин, установленный или обновленный на хосте, устанавливается или обновляется во всех песочницах. Активные плагины хранятся в таблице параметров, поэтому состояние активации задается отдельно для каждой песочницы. Файлы, загруженные из песочницы, попадают в каталог загрузок хоста. Это ускоряет создание песочниц и позволяет не заменять WP_CONTENT_DIR глобально.
Оставляйте Rudel активным во всех песочницах. Блокировка почты и наложение темы выполняются плагином, а его деактивация при выбранной песочнице также удаляет строку загрузки из общего wp-config.php, отключая выбор песочниц для всей установки (issue #13).
Выбор песочницы
Запросы HTTP выбирают песочницу через:
- заголовок
X-Rudel-Environment(устаревший псевдонимX-Rudel-Sandbox) - cookie
rudel_environment(устаревший псевдонимrudel_sandbox)
Rudel никогда не устанавливает и не удаляет cookie. Удалите его, чтобы вернуться к хосту; пункт Sandbox в панели администратора ведет на хост URL, но оставляет cookie на месте (issue #10).
Команды WP-CLI выбирают песочницу через:
- переменную окружения
RUDEL_ENVIRONMENT --url, имя хоста которого начинается с идентификатора песочницы, например--url=http://alpha-3be7.example.test
Выбор не требует аутентификации. Любой клиент, имеющий доступ к сайту и отправивший действительный идентификатор песочницы, попадет в нее; идентификаторы песочниц (имя и четыре шестнадцатеричных символа) легко угадать. Не рассматривайте выбор песочницы как границу контроля доступа; защищайте публичный хост на уровне веб-сервера или сети.
Параметры запросов по умолчанию
Для выбранного запроса Rudel:
- блокирует исходящую почту с помощью фильтра
pre_wp_mail - задает для
WP_TEMP_DIRкаталог песочницыtmp - задает для
WP_CACHE_KEY_SALTзначение, уникальное для песочницы, чтобы постоянные кэши объектов разделяли ключи песочниц - предоставляет журналирование
WP_DEBUGв песочницуdebug.log, а также ключи и соли аутентификации, полученные из идентификатора песочницы
Загрузочный код определяет каждую из этих констант, только если wp-config.php еще не определил ее. Стандартная установка wp-config.php задает WP_DEBUG, а также все ключи и соли, поэтому в такой установке запросы песочницы используют параметры отладки, ключи и соли хоста (issue #4). Поскольку пользователи также клонируются, cookie входа хоста может быть действительным в песочнице.
Метаданные среды выполнения
Метаданные среды выполнения Rudel хранятся в таблицах хоста WordPress MySQL:
wp_rudel_environments
wp_rudel_worktrees
Эти таблицы — достоверный источник данных Rudel. Каталоги сред содержат управляемые файлы и артефакты, но не состояние реестра среды выполнения.