Gå til indhold

Isolering

Rudel er et overlay-system, der vælges pr. anmodning. En valgt anmodning bruger sandkassens databasetabeller og temafiler, mens den stadig kører gennem værtens WordPress-installation.

Isoleret pr. sandkasse

WordPress-tabeller

Hver sandkasse får et genereret tabelpræfiks: værtens præfiks plus de første syv hexadecimale tegn fra sandkasse-ID'ets MD5.

Text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users

Rudel skifter WordPress-tabelpræfikset, før WordPress er færdig med at starte, så alle forespørgsler i en sandkasseanmodning læser og skriver til sandkassens kopier.

Brugere

Tabellerne users og usermeta klones sammen med resten. En sandkasse starter med værtens brugere og adgangskoder fra oprettelsestidspunktet. Derefter påvirker brugere, der oprettes, ændres eller slettes i sandkassen, ikke værten, og ændringer på værten overføres ikke til sandkassen.

Aktive temafiler

Det valgte tema kopieres til sandkassemappen:

Text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}

Hvis temaet er et undertema, kopierer Rudel også overtemaet, så skabelonforholdet forbliver gyldigt. En sandkasse viser altid det tema, der blev registreret ved oprettelsen; temaskift i sandkassen har ingen effekt.

Delt med værten

  • WordPress-kernen
  • pluginfiler
  • uploadede mediefiler

Et plugin, der installeres eller opdateres på værten, installeres eller opdateres for alle sandkasser. Hvilke plugins der er aktive, gemmes i indstillingstabellen, så aktiveringstilstanden er separat for hver sandkasse. Uploads fra en sandkasse placeres i værtens uploadmappe. Det holder oprettelsen af sandkasser hurtig og undgår at erstatte WP_CONTENT_DIR globalt.

Sørg for, at Rudel selv forbliver aktivt i alle sandkasser. Dets blokering af e-mail og temaoverlay kører fra pluginnet, og hvis det deaktiveres, mens en sandkasse er valgt, fjernes bootstrapping-linjen også fra den delte wp-config.php, hvilket slår valg af sandkasse fra for hele installationen (issue #13).

Valg af sandkasse

HTTP-anmodninger vælger en sandkasse via:

  • headeren X-Rudel-Environment (ældre alias X-Rudel-Sandbox)
  • cookien rudel_environment (ældre alias rudel_sandbox)

Rudel sætter eller rydder aldrig cookien. Slet den for at vende tilbage til værten; punktet Sandbox i adminbjælken linker til værtens URL, men lader cookien være (issue #10).

WP-CLI-kommandoer vælger en sandkasse via:

  • miljøvariablen RUDEL_ENVIRONMENT
  • en --url, hvis vært begynder med sandkasse-ID'et, f.eks. --url=http://alpha-3be7.example.test

Vælgeren er ikke godkendt. Enhver klient, der kan nå webstedet og sender et gyldigt sandkasse-ID, får adgang til den sandkasse, og sandkasse-ID'er (navn plus fire hexadecimale tegn) er lette at gætte. Betragt ikke valg af sandkasse som en adgangskontrolgrænse; beskyt en offentlig vært på webserver- eller netværksniveau.

Standardindstillinger for anmodninger

For en valgt anmodning gør Rudel følgende:

  • blokerer udgående e-mail via et pre_wp_mail-filter
  • sætter WP_TEMP_DIR til sandkassens tmp-mappe
  • sætter WP_CACHE_KEY_SALT til en sandkassespecifik værdi, så vedvarende objektcaches holder sandkassernes nøgler adskilt
  • tilbyder logning af WP_DEBUG til sandkassens debug.log samt godkendelsesnøgler og salte, der er afledt af sandkasse-ID'et

Bootstrap-koden definerer kun hver af disse konstanter, hvis wp-config.php ikke allerede har defineret den. En standard-wp-config.php definerer WP_DEBUG samt alle nøgler og salte, så sandkasseanmodninger på en sådan installation bruger værtens debugindstilling og nøgler og salte (issue #4). Da brugerne også klones, kan en login-cookie fra værten være gyldig i en sandkasse.

Kørselsmetadata

Rudels kørselsmetadata forbliver i værtens WordPress-tabeller for MySQL:

Text
wp_rudel_environments
wp_rudel_worktrees

Disse tabeller er Rudels autoritative datakilde. Miljømapper indeholder administrerede filer og artefakter, ikke kørselsregistreringstilstand.