Isolamento
Rudel è un sistema overlay selezionato per richiesta. Una richiesta selezionata usa le tabelle del database della sandbox e i file del tema della sandbox, pur continuando a essere eseguita tramite l'installazione host di WordPress.
Isolati per sandbox
Tabelle di WordPress
Ogni sandbox riceve un prefisso di tabella generato: il prefisso host più i primi sette caratteri esadecimali dell'MD5 dell'ID della sandbox.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel imposta il prefisso delle tabelle WordPress prima che WordPress termini l'avvio, così ogni query in una richiesta sandbox legge e scrive nelle copie della sandbox.
Utenti
Le tabelle users e usermeta vengono clonate insieme al resto. Al momento della creazione, una sandbox parte con gli utenti e le password dell'host; da quel momento, gli utenti creati, modificati o eliminati nella sandbox non influiscono sull'host e le modifiche all'host non raggiungono la sandbox.
File del tema attivo
Il tema selezionato viene copiato nella directory della sandbox:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Se il tema è un tema child, Rudel copia anche il tema parent, così la relazione tra i template rimane valida. Una sandbox serve sempre il tema registrato al momento della creazione; cambiare tema nella sandbox non ha effetto.
Condivisi con l'host
- core di WordPress
- file dei plugin
- file multimediali caricati
Un plugin installato o aggiornato sull'host viene installato o aggiornato per ogni sandbox. I plugin attivi sono registrati nella tabella delle opzioni, quindi lo stato di attivazione è specifico per sandbox. I caricamenti effettuati all'interno di una sandbox finiscono nella directory dei caricamenti dell'host. In questo modo la creazione delle sandbox è rapida e si evita di sostituire WP_CONTENT_DIR a livello globale.
Mantenete Rudel attivo in ogni sandbox. Il blocco delle email e l'overlay del tema vengono eseguiti dal plugin; disattivarlo mentre è selezionata una sandbox rimuove anche la riga bootstrap dal wp-config.php condiviso, disattivando la selezione delle sandbox per l'intera installazione (issue #13).
Selezionare una sandbox
Le richieste HTTP selezionano una sandbox tramite:
- l'header
X-Rudel-Environment(alias legacyX-Rudel-Sandbox) - il cookie
rudel_environment(alias legacyrudel_sandbox)
Rudel non imposta né cancella mai il cookie. Eliminate il cookie per tornare all'host; la voce Sandbox nella barra di amministrazione rimanda all'URL host, ma lascia il cookie al suo posto (issue #10).
I comandi WP-CLI selezionano una sandbox tramite:
- la variabile d'ambiente
RUDEL_ENVIRONMENT - un
--urlil cui host inizia con l'ID della sandbox, ad esempio--url=http://alpha-3be7.example.test
Il selettore non è autenticato. Qualsiasi client che può raggiungere il sito e invia un ID sandbox valido accede a quella sandbox, e gli ID delle sandbox (nome più quattro caratteri esadecimali) sono facili da indovinare. Non considerate la selezione della sandbox un confine di controllo degli accessi; proteggete un host pubblico a livello di server web o di rete.
Impostazioni predefinite delle richieste
Per una richiesta selezionata, Rudel:
- blocca le email in uscita tramite un filtro
pre_wp_mail - imposta
WP_TEMP_DIRsulla directorytmpdella sandbox - imposta
WP_CACHE_KEY_SALTsu un valore specifico della sandbox, così le cache persistenti degli oggetti mantengono separate le chiavi della sandbox - offre il logging
WP_DEBUGversodebug.logdella sandbox e chiavi e salt di autenticazione derivati dall'ID della sandbox
Il bootstrap definisce ciascuna di queste costanti solo se wp-config.php non l'ha già definita. Un'installazione standard di wp-config.php definisce WP_DEBUG e tutte le chiavi e i salt; in un'installazione di questo tipo, le richieste sandbox usano quindi le impostazioni di debug e le chiavi e i salt dell'host (issue #4). Anche gli utenti vengono clonati, quindi un cookie di accesso dell'host può essere valido in una sandbox.
Metadati di runtime
I metadati di runtime di Rudel rimangono nelle tabelle MySQL di WordPress host:
wp_rudel_environments
wp_rudel_worktrees
Queste tabelle sono la fonte di verità di Rudel. Le directory degli ambienti contengono file e artefatti gestiti, non lo stato del registro di runtime.