Перейти к содержимому

Изоляция

Rudel — это система наложения, выбираемая для каждого запроса. Выбранный запрос использует таблицы базы данных и файлы темы песочницы, при этом продолжает выполняться через установку WordPress на хосте.

Изолируется в каждой песочнице

Таблицы WordPress

Для каждой песочницы создается префикс таблиц: префикс хоста плюс первые семь шестнадцатеричных символов MD5 идентификатора песочницы.

Text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users

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

Пользователи

Таблицы users и usermeta клонируются вместе с остальными. При создании песочница получает пользователей и пароли хоста; после этого созданные, измененные или удаленные в песочнице пользователи не влияют на хост, а изменения на хосте не попадают в песочницу.

Файлы активной темы

Выбранная тема копируется в каталог песочницы:

Text
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:

Text
wp_rudel_environments
wp_rudel_worktrees

Эти таблицы — достоверный источник данных Rudel. Каталоги сред содержат управляемые файлы и артефакты, но не состояние реестра среды выполнения.