Isolatie
Rudel is een overlaysysteem dat per verzoek wordt geselecteerd. Een geselecteerd verzoek gebruikt sandbox-databasetabellen en sandbox-themabestanden, maar draait nog steeds via de WordPress-installatie van de host.
Per sandbox geïsoleerd
WordPress-tabellen
Elke sandbox krijgt een gegenereerd tabelprefix: het prefix van de host plus de eerste zeven hexadecimale tekens van de MD5 van de sandbox-ID.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel schakelt het tabelprefix van WordPress om voordat WordPress klaar is met opstarten, zodat elke query in een sandboxverzoek de sandboxkopieën leest en beschrijft.
Gebruikers
De tabellen users en usermeta worden samen met de rest gekloond. Een sandbox begint met de gebruikers en wachtwoorden van de host zoals die op het moment van aanmaken zijn; daarna hebben gebruikers die in de sandbox worden aangemaakt, gewijzigd of verwijderd geen invloed op de host, en bereiken wijzigingen op de host de sandbox niet.
Actieve themabestanden
Het geselecteerde thema wordt naar de sandboxmap gekopieerd:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Als het thema een child theme is, kopieert Rudel ook het parent theme, zodat de sjabloonrelatie geldig blijft. Een sandbox serveert altijd het thema dat bij het aanmaken is vastgelegd; van thema wisselen in de sandbox heeft geen effect.
Gedeeld met de host
- de WordPress-core
- pluginbestanden
- geüploade mediabestanden
Een plugin die op de host wordt geïnstalleerd of bijgewerkt, wordt voor elke sandbox geïnstalleerd of bijgewerkt. Welke plugins actief zijn, wordt opgeslagen in de optietabel, dus de activeringsstatus geldt per sandbox. Uploads vanuit een sandbox komen in de uploadmap van de host terecht. Zo blijft het aanmaken van sandboxes snel en wordt voorkomen dat WP_CONTENT_DIR wereldwijd wordt vervangen.
Houd Rudel actief in elke sandbox. De e-mailblokkering en thema-overlay worden vanuit de plugin uitgevoerd. Als u deze deactiveert terwijl een sandbox is geselecteerd, wordt ook de bootstrapregel uit het gedeelde wp-config.php verwijderd, waardoor sandboxselectie voor de hele installatie wordt uitgeschakeld (issue #13).
Een sandbox selecteren
Verzoeken met HTTP selecteren een sandbox via:
- de header
X-Rudel-Environment(legacy-aliasX-Rudel-Sandbox) - de cookie
rudel_environment(legacy-aliasrudel_sandbox)
Rudel stelt de cookie nooit in of wist deze nooit. Verwijder de cookie om terug te keren naar de host; het Sandbox-item in de beheerbalk linkt naar de URL van de host, maar laat de cookie staan (issue #10).
Opdrachten met WP-CLI selecteren een sandbox via:
- de omgevingsvariabele
RUDEL_ENVIRONMENT - een
--urlwaarvan de hostnaam begint met de sandbox-ID, bijvoorbeeld--url=http://alpha-3be7.example.test
De selector is niet geauthenticeerd. Elke client die de site kan bereiken en een geldige sandbox-ID verstuurt, krijgt toegang tot die sandbox; sandbox-ID's (naam plus vier hexadecimale tekens) zijn gemakkelijk te raden. Beschouw sandboxselectie niet als een grens voor toegangscontrole; beveilig een openbare host op webserver- of netwerkniveau.
Standaardwaarden voor verzoeken
Voor een geselecteerd verzoek doet Rudel het volgende:
- blokkeert uitgaande e-mail via een
pre_wp_mail-filter - stelt
WP_TEMP_DIRin op detmp-map van de sandbox - stelt
WP_CACHE_KEY_SALTin op een sandboxspecifieke waarde, zodat persistente objectcaches de sleutels van sandboxes gescheiden houden - biedt
WP_DEBUG-logging naar dedebug.logvan de sandbox en authenticatiesleutels en salts die zijn afgeleid van de sandbox-ID
De bootstrap definieert elk van deze constanten alleen als wp-config.php deze nog niet heeft gedefinieerd. Een standaardinstallatie van wp-config.php definieert WP_DEBUG en alle sleutels en salts; bij zo'n installatie gebruiken sandboxverzoeken dus de debuginstelling en sleutels en salts van de host (issue #4). Omdat ook de gebruikers worden gekloond, kan een inlogcookie van de host geldig zijn in een sandbox.
Runtime-metadata
Runtime-metadata van Rudel blijft in de hosttabellen WordPress MySQL:
wp_rudel_environments
wp_rudel_worktrees
Deze tabellen zijn de enige bron van waarheid van Rudel. Omgevingsmappen bevatten beheerde bestanden en artefacten, geen runtime-registerstatus.