Zum Inhalt springen

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.

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

Text
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 Alias X-Rudel-Sandbox)
  • das Cookie rudel_environment (veralteter Alias rudel_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_DIR auf das Sandbox-tmp-Verzeichnis
  • setzt WP_CACHE_KEY_SALT auf 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.log sowie 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:

Text
wp_rudel_environments
wp_rudel_worktrees

Diese Tabellen sind die maßgebliche Datenquelle von Rudel. Umgebungsverzeichnisse enthalten verwaltete Dateien und Artefakte, aber keinen Laufzeitregisterstatus.