Pular para o conteúdo

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.

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

Text
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 legado X-Rudel-Sandbox)
  • o cookie rudel_environment (alias legado rudel_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 --url cujo 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_DIR como o diretório tmp do ambiente isolado
  • define WP_CACHE_KEY_SALT com um valor específico do ambiente, para que caches persistentes de objetos mantenham separadas as chaves do ambiente
  • oferece registro WP_DEBUG em debug.log do 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:

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