Izolare
Rudel este un sistem de suprapunere selectat per solicitare. O solicitare selectată folosește tabelele bazei de date și fișierele temei din sandbox, continuând să ruleze prin instalarea gazdă WordPress.
Izolat în fiecare sandbox
Tabelele WordPress
Fiecare sandbox primește un prefix de tabel generat: prefixul gazdei urmat de primele șapte caractere hexazecimale din MD5 al ID-ului sandboxului.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel schimbă prefixul tabelelor WordPress înainte ca WordPress să termine inițializarea, astfel încât fiecare interogare dintr-o solicitare de sandbox să citească și să scrie copiile din sandbox.
Utilizatori
Tabelele users și usermeta sunt clonate împreună cu restul. La creare, un sandbox pornește cu utilizatorii și parolele gazdei; ulterior, utilizatorii creați, modificați sau șterși în sandbox nu afectează gazda, iar modificările gazdei nu ajung în sandbox.
Fișierele temei active
Tema selectată este copiată în directorul sandboxului:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Dacă tema este o temă copil, Rudel copiază și tema părinte, pentru a păstra validă relația dintre șabloane. Un sandbox servește întotdeauna tema înregistrată la creare; schimbarea temei în sandbox nu are niciun efect.
Partajat cu gazda
- nucleul WordPress
- fișierele pluginurilor
- fișierele media încărcate
Un plugin instalat sau actualizat pe gazdă este instalat sau actualizat pentru fiecare sandbox. Pluginurile active sunt înregistrate în tabelul de opțiuni, astfel că starea de activare este specifică fiecărui sandbox. Fișierele încărcate dintr-un sandbox ajung în directorul de încărcări al gazdei. Astfel, crearea sandboxurilor rămâne rapidă și se evită înlocuirea globală a WP_CONTENT_DIR.
Păstrați Rudel activ în fiecare sandbox. Blocarea e-mailurilor și suprapunerea temei rulează din plugin, iar dezactivarea acestuia în timp ce un sandbox este selectat elimină și linia de inițializare din wp-config.php partajat, ceea ce dezactivează selectarea sandboxurilor pentru întreaga instalare (problema #13).
Selectarea unui sandbox
Solicitările HTTP selectează un sandbox prin:
- antetul
X-Rudel-Environment(alias vechiX-Rudel-Sandbox) - cookie-ul
rudel_environment(alias vechirudel_sandbox)
Rudel nu setează și nu șterge niciodată cookie-ul. Ștergeți-l pentru a reveni la gazdă; elementul Sandbox din bara de administrare trimite la gazda URL, dar păstrează cookie-ul (problema #10).
Comenzile WP-CLI selectează un sandbox prin:
- variabila de mediu
RUDEL_ENVIRONMENT - un
--urla cărui gazdă începe cu ID-ul sandboxului, de exemplu--url=http://alpha-3be7.example.test
Selectorul nu este autentificat. Orice client care poate accesa site-ul și trimite un ID de sandbox valid primește acel sandbox, iar ID-urile sandboxurilor (nume plus patru caractere hexazecimale) sunt ușor de ghicit. Nu considerați selectarea sandboxurilor o limită de control al accesului; protejați o gazdă publică la nivelul serverului web sau al rețelei.
Valori implicite ale solicitărilor
Pentru o solicitare selectată, Rudel:
- blochează e-mailurile de ieșire printr-un filtru
pre_wp_mail - setează
WP_TEMP_DIRla directorultmpal sandboxului - setează
WP_CACHE_KEY_SALTla o valoare specifică sandboxului, astfel încât cache-urile persistente de obiecte să păstreze separate cheile sandboxurilor - oferă jurnalizarea
WP_DEBUGîndebug.logsandboxului și chei și valori salt de autentificare derivate din ID-ul sandboxului
Inițializarea definește fiecare dintre aceste constante doar dacă wp-config.php nu a definit-o deja. O instalare standard wp-config.php definește WP_DEBUG și toate cheile și valorile salt, astfel că pe o astfel de instalare solicitările sandboxului folosesc setarea de depanare a gazdei și cheile și valorile salt ale gazdei (problema #4). Deoarece utilizatorii sunt și ei clonați, un cookie de autentificare al gazdei poate fi valid într-un sandbox.
Metadate la rulare
Metadatele la rulare Rudel rămân în tabelele MySQL WordPress ale gazdei:
wp_rudel_environments
wp_rudel_worktrees
Aceste tabele sunt sursa de adevăr pentru Rudel. Directoarele de mediu conțin fișiere și artefacte gestionate, nu starea registrului la rulare.