Isolamento
Rudel é um sistema de sobreposição selecionado por solicitação. Uma solicitação selecionada usa tabelas do banco de dados e arquivos de tema do ambiente isolado, mas continua sendo executada na instalação WordPress do host.
Isolado por ambiente
Tabelas de WordPress
Cada ambiente isolado recebe um prefixo de tabela gerado: o prefixo do host seguido pelos primeiros sete caracteres hexadecimais do MD5 do ID do ambiente.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel altera o prefixo das tabelas de WordPress antes que WordPress termine de iniciar, para que todas as consultas em uma solicitação do ambiente leiam e gravem nas cópias isoladas.
Usuários
As tabelas users e usermeta são clonadas junto com o restante. Um ambiente isolado começa com os usuários e senhas do host existentes no momento da criação; depois disso, usuários criados, alterados ou excluídos no ambiente não afetam o host, e as alterações no host não chegam ao ambiente.
Arquivos do tema ativo
O tema selecionado é copiado para o diretório do ambiente isolado:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Se o tema for um tema filho, Rudel também copia o tema pai para manter válida a relação com o modelo. Um ambiente isolado sempre serve o tema registrado no momento da criação; trocar de tema dentro do ambiente não tem efeito.
Compartilhado com o host
- núcleo de WordPress
- arquivos de plugins
- arquivos de mídia enviados
Um plugin instalado ou atualizado no host também é instalado ou atualizado em todos os ambientes isolados. Os plugins ativos são registrados na tabela de opções, então o estado de ativação é específico de cada ambiente. Os arquivos enviados dentro de um ambiente isolado são gravados no diretório de uploads do host. Isso mantém rápida a criação de ambientes isolados e evita substituir WP_CONTENT_DIR globalmente.
Mantenha Rudel ativo em cada ambiente isolado. O bloqueio de e-mails e a sobreposição do tema são executados pelo plugin, e desativá-lo enquanto um ambiente está selecionado também remove a linha de inicialização do wp-config.php compartilhado, desativando a seleção de ambientes isolados em toda a instalação (problema #13).
Selecionar um ambiente isolado
As solicitações HTTP selecionam um ambiente isolado por meio de:
- o cabeçalho
X-Rudel-Environment(alias legadoX-Rudel-Sandbox) - o cookie
rudel_environment(alias legadorudel_sandbox)
Rudel nunca define nem limpa o cookie. Exclua-o para voltar ao host; o item Sandbox na barra de administração leva ao URL do host, mas mantém o cookie (problema #10).
Os comandos WP-CLI selecionam um ambiente isolado por meio de:
- a variável de ambiente
RUDEL_ENVIRONMENT - um
--urlcujo host começa com o ID do ambiente isolado, como--url=http://alpha-3be7.example.test
O seletor não é autenticado. Qualquer cliente que consiga acessar o site e envie um ID válido de ambiente isolado terá acesso a esse ambiente, e os IDs (nome mais quatro caracteres hexadecimais) são fáceis de adivinhar. Não trate a seleção de ambientes isolados como uma barreira de controle de acesso; proteja um host público no servidor Web ou no nível da rede.
Padrões das solicitações
Para uma solicitação com um ambiente isolado selecionado, Rudel:
- bloqueia e-mails de saída por meio de um filtro
pre_wp_mail - define
WP_TEMP_DIRcomo o diretóriotmpdo ambiente isolado - define
WP_CACHE_KEY_SALTcom um valor específico do ambiente, para que caches persistentes de objetos mantenham separadas as chaves do ambiente - oferece registro
WP_DEBUGemdebug.logdo ambiente, além de chaves de autenticação e salts derivados do ID do ambiente
A inicialização define cada uma dessas constantes somente se wp-config.php ainda não a tiver definido. Uma instalação padrão de wp-config.php define WP_DEBUG e todas as chaves e salts; nesse tipo de instalação, as solicitações do ambiente usam a configuração de depuração e as chaves e salts do host (problema #4). Como os usuários também são clonados, um cookie de login do host pode ser válido em um ambiente isolado.
Metadados de execução
Os metadados de execução de Rudel permanecem nas tabelas WordPress MySQL do host:
wp_rudel_environments
wp_rudel_worktrees
Essas tabelas são a fonte de verdade de Rudel. Os diretórios de ambiente contêm arquivos e artefatos gerenciados, não o estado do registro de execução.