
# Изоляция

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](https://github.com/inline0/rudel/issues/13)).

## Выбор песочницы

Запросы HTTP выбирают песочницу через:

- заголовок `X-Rudel-Environment` (устаревший псевдоним `X-Rudel-Sandbox`)
- cookie `rudel_environment` (устаревший псевдоним `rudel_sandbox`)

Rudel никогда не устанавливает и не удаляет cookie. Удалите его, чтобы вернуться к хосту; пункт Sandbox в панели администратора ведет на хост URL, но оставляет cookie на месте ([issue #10](https://github.com/inline0/rudel/issues/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](https://github.com/inline0/rudel/issues/4)). Поскольку пользователи также клонируются, cookie входа хоста может быть действительным в песочнице.

## Метаданные среды выполнения

Метаданные среды выполнения Rudel хранятся в таблицах хоста WordPress MySQL:

```text
wp_rudel_environments
wp_rudel_worktrees
```

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