Ga naar de inhoud

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.

Text
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:

Text
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-alias X-Rudel-Sandbox)
  • de cookie rudel_environment (legacy-alias rudel_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 --url waarvan 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_DIR in op de tmp-map van de sandbox
  • stelt WP_CACHE_KEY_SALT in op een sandboxspecifieke waarde, zodat persistente objectcaches de sleutels van sandboxes gescheiden houden
  • biedt WP_DEBUG-logging naar de debug.log van 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:

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