Vai al contenuto

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.

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

Text
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 legacy X-Rudel-Sandbox)
  • il cookie rudel_environment (alias legacy rudel_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 --url il 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_DIR sulla directory tmp della sandbox
  • imposta WP_CACHE_KEY_SALT su un valore specifico della sandbox, così le cache persistenti degli oggetti mantengono separate le chiavi della sandbox
  • offre il logging WP_DEBUG verso debug.log della 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:

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