Přejít k obsahu

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).

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).

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). 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.