Lewati ke konten

Isolasi

Rudel adalah sistem overlay yang dipilih berdasarkan permintaan. Permintaan yang dipilih menggunakan tabel database sandbox dan file tema sandbox, tetapi tetap berjalan melalui instalasi host WordPress.

Terisolasi per sandbox

Tabel WordPress

Setiap sandbox mendapat prefiks tabel yang dibuat secara otomatis: prefiks host ditambah tujuh karakter heksadesimal pertama dari MD5 ID sandbox.

Text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users

Rudel mengganti prefiks tabel WordPress sebelum proses boot WordPress selesai, sehingga setiap kueri dalam permintaan sandbox membaca dan menulis salinan sandbox.

Pengguna

Tabel users dan usermeta diklon bersama konten lainnya. Saat dibuat, sandbox berisi pengguna dan kata sandi host; setelah itu, pengguna yang dibuat, diubah, atau dihapus di sandbox tidak memengaruhi host, dan perubahan di host tidak diterapkan ke sandbox.

File tema aktif

Tema yang dipilih disalin ke direktori sandbox:

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

Jika temanya adalah tema turunan, Rudel juga menyalin tema induk agar hubungan templat tetap valid. Sandbox selalu menyajikan tema yang tercatat saat dibuat; mengganti tema di dalam sandbox tidak berpengaruh.

Digunakan bersama host

  • inti WordPress
  • file plugin
  • file media yang diunggah

Plugin yang dipasang atau diperbarui di host akan dipasang atau diperbarui untuk setiap sandbox. Plugin yang aktif disimpan di tabel options, sehingga status aktivasi berlaku per sandbox. Unggahan yang dibuat di dalam sandbox tersimpan di direktori unggahan host. Cara ini mempercepat pembuatan sandbox dan mencegah penggantian WP_CONTENT_DIR secara global.

Pastikan Rudel tetap aktif di setiap sandbox. Pemblokiran email dan overlay tema dijalankan oleh plugin, dan menonaktifkannya saat sebuah sandbox dipilih juga menghapus baris bootstrap dari wp-config.php bersama, sehingga pemilihan sandbox dinonaktifkan untuk seluruh instalasi (masalah #13).

Memilih sandbox

Permintaan HTTP memilih sandbox melalui:

  • header X-Rudel-Environment (alias lama X-Rudel-Sandbox)
  • cookie rudel_environment (alias lama rudel_sandbox)

Rudel tidak pernah menetapkan atau menghapus cookie. Hapus cookie untuk kembali ke host; item Sandbox di bilah admin mengarah ke URL host, tetapi cookie tetap ada (masalah #10).

Perintah WP-CLI memilih sandbox melalui:

  • variabel lingkungan RUDEL_ENVIRONMENT
  • --url yang host-nya diawali ID sandbox, misalnya --url=http://alpha-3be7.example.test

Pemilih ini tidak diautentikasi. Klien mana pun yang dapat mengakses situs dan mengirim ID sandbox yang valid akan mendapat akses ke sandbox tersebut, dan ID sandbox (nama ditambah empat karakter heksadesimal) mudah ditebak. Jangan perlakukan pemilihan sandbox sebagai batas kontrol akses; lindungi host publik di tingkat server web atau jaringan.

Default permintaan

Untuk permintaan yang memilih sandbox, Rudel:

  • memblokir email keluar melalui filter pre_wp_mail
  • menetapkan WP_TEMP_DIR ke direktori tmp sandbox
  • menetapkan WP_CACHE_KEY_SALT ke nilai khusus untuk sandbox agar cache objek persisten memisahkan kunci sandbox
  • menyediakan pencatatan WP_DEBUG ke debug.log sandbox dan kunci autentikasi serta salt yang diturunkan dari ID sandbox

Bootstrap hanya menetapkan setiap konstanta ini jika wp-config.php belum menetapkannya. Instalasi standar wp-config.php menetapkan WP_DEBUG serta semua kunci dan salt, sehingga pada instalasi seperti itu, permintaan sandbox menggunakan pengaturan debug, kunci, dan salt milik host (masalah #4). Karena pengguna juga diklon, cookie login host dapat berlaku di sandbox.

Metadata runtime

Metadata runtime Rudel tetap disimpan di tabel MySQL WordPress host:

Text
wp_rudel_environments
wp_rudel_worktrees

Tabel ini adalah sumber kebenaran Rudel. Direktori lingkungan berisi file dan artefak yang dikelola, bukan status registri runtime.