
# Ізоляція

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

## Ізольовано для кожного середовища

### Таблиці WordPress

Кожне ізольоване середовище отримує згенерований префікс таблиць: префікс хоста плюс перші сім шістнадцяткових символів MD5 ID середовища.

```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`, вимикаючи вибір ізольованого середовища для всього встановлення ([проблема № 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 ([проблема № 10](https://github.com/inline0/rudel/issues/10)).

Команди WP-CLI вибирають ізольоване середовище через:

- змінну середовища `RUDEL_ENVIRONMENT`
- `--url`, ім’я хоста якого починається з ID ізольованого середовища, наприклад `--url=http://alpha-3be7.example.test`

Селектор не автентифікується. Будь-який клієнт, що має доступ до сайту й надсилає дійсний ID ізольованого середовища, потрапляє в це середовище, а ID (назва та чотири шістнадцяткові символи) легко вгадати. Не вважайте вибір середовища межею контролю доступу; захищайте публічний хост на рівні вебсервера або мережі.

## Типові параметри запиту

Для вибраного запиту Rudel:

- блокує вихідну пошту фільтром `pre_wp_mail`
- задає `WP_TEMP_DIR` як каталог `tmp` ізольованого середовища
- задає `WP_CACHE_KEY_SALT` окреме для середовища значення, щоб ключі в постійному кеші об’єктів не перетиналися
- увімкне журналювання `WP_DEBUG` для `debug.log` середовища, а також ключі та солі автентифікації, похідні від ID середовища

Початкове налаштування визначає кожну з цих констант, лише якщо `wp-config.php` її ще не визначив. Стандартне встановлення `wp-config.php` визначає `WP_DEBUG`, а також усі ключі та солі, тож у такому встановленні запити ізольованого середовища використовують налагоджувальне налаштування хоста й ключі та солі хоста ([проблема № 4](https://github.com/inline0/rudel/issues/4)). Оскільки користувачів також клоновано, cookie входу хоста може бути дійсним в ізольованому середовищі.

## Метадані середовища виконання

Метадані середовища виконання Rudel зберігаються в таблицях хоста WordPress MySQL:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Ці таблиці є єдиним достовірним джерелом даних для Rudel. Каталоги середовищ містять керовані файли й артефакти, а не стан реєстру середовища виконання.
