
# Izolace

Rudel je systém překryvných vrstev vybraných podle požadavku. Vybraný požadavek používá databázové tabulky a soubory motivu sandboxu, ale stále běží v hostitelské instalaci WordPress.

## Izolované pro každý sandbox

### Tabulky WordPress

Každý sandbox získá vygenerovanou předponu tabulek: hostitelskou předponu následovanou prvními sedmi hexadecimálními znaky MD5 ID sandboxu.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel přepne předponu tabulek WordPress ještě před dokončením zavádění WordPress, takže každý dotaz v požadavku sandboxu čte a zapisuje kopie sandboxu.

### Uživatelé

Tabulky `users` a `usermeta` se klonují spolu s ostatními. Sandbox při vytvoření obsahuje uživatele a hesla hostitele; poté uživatelé vytvoření, změnění nebo smazaní v sandboxu hostitele neovlivní a změny na hostiteli se do sandboxu nepromítnou.

### Soubory aktivního motivu

Vybraný motiv se zkopíruje do adresáře sandboxu:

```text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
```

Pokud jde o podřízený motiv, Rudel zkopíruje také nadřazený motiv, aby vztah šablon zůstal platný. Sandbox vždy používá motiv zaznamenaný při vytvoření; změna motivu uvnitř sandboxu nemá žádný účinek.

## Sdílené s hostitelem

- Jádro WordPress
- soubory pluginů
- nahrané mediální soubory

Plugin nainstalovaný nebo aktualizovaný na hostiteli se nainstaluje nebo aktualizuje ve všech sandboxech. Informace o aktivních pluginech se ukládají v tabulce options, takže stav aktivace je pro každý sandbox samostatný. Nahrané soubory ze sandboxu se ukládají do adresáře nahraných souborů hostitele. Díky tomu je vytváření sandboxů rychlé a není třeba globálně nahrazovat `WP_CONTENT_DIR`.

Rudel ponechte aktivní v každém sandboxu. Blokování e-mailů a překrytí motivu zajišťuje tento plugin; jeho deaktivace při vybraném sandboxu také odstraní zaváděcí řádek ze sdíleného souboru `wp-config.php`, čímž se výběr sandboxu vypne pro celou instalaci ([issue #13](https://github.com/inline0/rudel/issues/13)).

## Výběr sandboxu

Požadavky HTTP vybírají sandbox pomocí:

- hlavičky `X-Rudel-Environment` (starší alias `X-Rudel-Sandbox`)
- souboru cookie `rudel_environment` (starší alias `rudel_sandbox`)

Rudel soubor cookie nikdy nenastavuje ani nemaže. Smažte ho a vraťte se na hostitele; položka Sandbox na administrační liště odkazuje na hostitelský URL, ale soubor cookie ponechá ([issue #10](https://github.com/inline0/rudel/issues/10)).

Příkazy WP-CLI vybírají sandbox pomocí:

- proměnné prostředí `RUDEL_ENVIRONMENT`
- `--url`, jehož hostitel začíná ID sandboxu, například `--url=http://alpha-3be7.example.test`

Výběr není ověřován. Každý klient, který může přistupovat k webu a odešle platné ID sandboxu, se dostane do daného sandboxu; ID sandboxů (název a čtyři hexadecimální znaky) lze snadno uhodnout. Nepovažujte výběr sandboxu za hranici řízení přístupu; veřejného hostitele zabezpečte na úrovni webového serveru nebo sítě.

## Výchozí nastavení požadavků

Pro vybraný požadavek Rudel:

- blokuje odchozí e-maily pomocí filtru `pre_wp_mail`
- nastaví `WP_TEMP_DIR` na adresář `tmp` sandboxu
- nastaví `WP_CACHE_KEY_SALT` na hodnotu specifickou pro sandbox, aby trvalé mezipaměti objektů oddělily klíče sandboxů
- nabízí protokolování `WP_DEBUG` do sandboxu `debug.log` a ověřovací klíče a soli odvozené z ID sandboxu

Zaváděcí soubor definuje každou z těchto konstant pouze tehdy, pokud ji již nedefinoval `wp-config.php`. Standardní instalace `wp-config.php` definuje `WP_DEBUG` i všechny klíče a soli, takže požadavky sandboxu v takové instalaci používají nastavení ladění a klíče i soli hostitele ([issue #4](https://github.com/inline0/rudel/issues/4)). Protože se klonují také uživatelé, přihlašovací cookie hostitele může být v sandboxu platná.

## Metadata za běhu

Metadata běhu Rudel zůstávají v tabulkách MySQL hostitelské WordPress:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Tyto tabulky jsou jediným spolehlivým zdrojem dat pro Rudel. Adresáře prostředí obsahují spravované soubory a artefakty, nikoli stav registru za běhu.
