Isolation
Rudel ist ein anfragebasiertes Overlay-System. Bei einer ausgewählten Anfrage werden Sandbox-Datenbanktabellen und Sandbox-Theme-Dateien verwendet, während die Host-WordPress-Installation weiterhin ausgeführt wird.
Pro Sandbox isoliert
WordPress-Tabellen
Jede Sandbox erhält ein generiertes Tabellenpräfix: das Host-Präfix plus die ersten sieben Hexadezimalzeichen der MD5 der Sandbox-ID.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel wechselt das Tabellenpräfix von WordPress, bevor WordPress den Startvorgang abschließt. Dadurch liest und schreibt jede Abfrage einer Sandbox-Anfrage die Sandbox-Kopien.
Benutzer
Die Tabellen users und usermeta werden mit dem Rest geklont. Zum Erstellungszeitpunkt enthält eine Sandbox die Benutzer und Passwörter des Hosts. Danach wirken sich im Sandbox-System erstellte, geänderte oder gelöschte Benutzer nicht auf den Host aus, und Änderungen am Host werden nicht in die Sandbox übernommen.
Dateien des aktiven Themes
Das ausgewählte Theme wird in das Sandbox-Verzeichnis kopiert:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Ist das Theme ein Child-Theme, kopiert Rudel auch das übergeordnete Theme, damit die Vorlagenbeziehung gültig bleibt. Eine Sandbox stellt immer das bei ihrer Erstellung gespeicherte Theme bereit; ein Theme-Wechsel innerhalb der Sandbox hat keine Auswirkung.
Gemeinsam mit dem Host genutzt
- WordPress-Core
- Plugin-Dateien
- hochgeladene Mediendateien
Ein auf dem Host installiertes oder aktualisiertes Plugin wird in allen Sandboxes installiert oder aktualisiert. Welche Plugins aktiv sind, steht in der Options-Tabelle; der Aktivierungsstatus gilt daher pro Sandbox. In einer Sandbox hochgeladene Dateien landen im Upload-Verzeichnis des Hosts. So bleibt das Erstellen von Sandboxes schnell und WP_CONTENT_DIR wird nicht global ersetzt.
Lass Rudel in jeder Sandbox selbst aktiv. Die E-Mail-Sperre und das Theme-Overlay werden vom Plugin ausgeführt. Wird es bei ausgewählter Sandbox deaktiviert, wird außerdem die Bootstrap-Zeile aus der gemeinsam genutzten wp-config.php entfernt. Dadurch wird die Sandbox-Auswahl für die gesamte Installation ausgeschaltet (Issue #13).
Sandbox auswählen
HTTP-Anfragen wählen eine Sandbox über:
- den Header
X-Rudel-Environment(veralteter AliasX-Rudel-Sandbox) - das Cookie
rudel_environment(veralteter Aliasrudel_sandbox)
Rudel setzt oder löscht das Cookie nie. Lösche es, um zum Host zurückzukehren. Der Sandbox-Eintrag in der Admin-Leiste verlinkt zur Host-URL, lässt das Cookie aber bestehen (Issue #10).
WP-CLI-Befehle wählen eine Sandbox über:
- die Umgebungsvariable
RUDEL_ENVIRONMENT - eine
--url, deren Host mit der Sandbox-ID beginnt, zum Beispiel--url=http://alpha-3be7.example.test
Die Auswahl ist nicht authentifiziert. Jeder Client, der die Website erreichen kann und eine gültige Sandbox-ID sendet, erhält Zugriff auf diese Sandbox. Sandbox-IDs (Name plus vier Hexadezimalzeichen) sind leicht zu erraten. Betrachte die Sandbox-Auswahl nicht als Zugriffsschutz; sichere einen öffentlichen Host auf Webserver- oder Netzwerkebene ab.
Standardwerte für Anfragen
Für eine ausgewählte Anfrage setzt Rudel:
- blockiert ausgehende E-Mails über einen
pre_wp_mail-Filter - setzt
WP_TEMP_DIRauf das Sandbox-tmp-Verzeichnis - setzt
WP_CACHE_KEY_SALTauf einen Sandbox-spezifischen Wert, damit persistente Objekt-Caches die Sandbox-Schlüssel getrennt halten - ermöglicht die
WP_DEBUG-Protokollierung für die Sandbox-debug.logsowie Authentifizierungsschlüssel und -Salts, die aus der Sandbox-ID abgeleitet werden
Der Bootstrap definiert jede dieser Konstanten nur, wenn wp-config.php sie noch nicht definiert hat. Eine Standardinstallation von wp-config.php definiert WP_DEBUG sowie alle Schlüssel und Salts. Daher verwenden Sandbox-Anfragen bei einer solchen Installation die Debug-Einstellung und Schlüssel samt Salts des Hosts (Issue #4). Da auch die Benutzer geklont werden, kann ein Anmelde-Cookie des Hosts in einer Sandbox gültig sein.
Laufzeit-Metadaten
Rudel-Laufzeitmetadaten bleiben in den MySQL-Tabellen des Hosts WordPress:
wp_rudel_environments
wp_rudel_worktrees
Diese Tabellen sind die maßgebliche Datenquelle von Rudel. Umgebungsverzeichnisse enthalten verwaltete Dateien und Artefakte, aber keinen Laufzeitregisterstatus.