Guias

Pare de lidar com conflitos de plugin no WordPress Multisite: dê a cada cliente sua própria stack de plugins

Equipe GrabWP
· 7 min read · Revisado por Equipe GrabWP

O WordPress Multisite é frequentemente vendido como a solução para rodar muitos sites de clientes a partir de uma única instalação. Para plugins, ele faz silenciosamente o oposto do que as agências esperam. O Multisite compartilha UM diretório wp-content e UMA database entre cada subsite. Os arquivos de plugin ficam em um único lugar para toda a rede. Essa camada única compartilhada é onde os conflitos começam, e nenhuma quantidade de ativação e desativação por site faz isso desaparecer.

Por que o gerenciamento de plugins do Multisite causa conflitos

No Multisite, os plugins são instalados em toda a rede. Depois disso, você tem duas escolhas: ativar um plugin na rede para que ele rode em todos os lugares, ou deixá-lo inativo e permitir que sites individuais o habilitem. De qualquer forma, os ARQUIVOS do plugin são compartilhados. Todo o código do plugin vive na mesma base de código para todos os subsites.

Essa distinção importa mais do que parece. “Habilitado por site” não significa “isolado”. Significa que o mesmo código físico está presente para todos os tenants e simplesmente ligado para alguns deles. Você não pode dar a dois subsites dois conjuntos de plugins genuinamente diferentes e isolados. Se o Cliente A precisa da versão 4 de um plugin e o Cliente B precisa da versão 6, o Multisite não tem onde colocar ambos. Uma versão vence, e vence para todos.

Cenários reais onde isso é um problema

A camada compartilhada transforma pequenos problemas locais em problemas para toda a rede:

  • Plugins incompatíveis. O Cliente A quer um plugin de reservas que usa os mesmos hooks que o plugin de membros do Cliente B. Em instalações separadas, isso não é um problema. No Multisite, ambos os plugins carregam no mesmo espaço de processo, e o erro fatal que um deles lança é sentido em toda a rede.
  • Fixação de versão. Um cliente rodando uma stack mais antiga e estável se recusa a atualizar um plugin porque isso quebra seu fluxo customizado. Outro cliente precisa do lançamento mais recente para uma correção de segurança. Em uma base de código compartilhada, você não consegue atender a ambos os pedidos.
  • Superfície de segurança. Cada arquivo de plugin presente na rede é código que pode ser explorado, mesmo em sites que nunca o ativaram. Um plugin vulnerável parado inativo no wp-content compartilhado ainda é distribuído com cada subsite. A superfície de ataque é a união dos plugins de todo mundo, não apenas os do próprio cliente.

Cada um desses pontos leva à mesma causa raiz: uma única camada compartilhada de plugin e theme.

Como o isolamento por cliente deveria realmente ser

O isolamento real significa que o plugin de um cliente é carregado apenas para aquele cliente. Se o Cliente A instala, atualiza ou quebra um plugin, nada muda para o Cliente B. Concretamente, isso requer:

  • Um diretório de plugins separado por cliente, e não um compartilhado com chaves liga/desliga por site.
  • Um diretório de themes separado por cliente, para que conflitos de theme e diferenças de versão fiquem contidos.
  • Versões independentes, para que fixar a stack de um cliente nunca bloqueie a atualização de outro.
  • Um raio de explosão de um, para que um erro fatal de plugin derrube um único tenant em vez da rede toda.

A opção de habilitar por site do Multisite não consegue entregar nada disso, porque os arquivos nunca deixam de ser compartilhados.

Como o wp-content por tenant entrega stacks separadas

Stacks separadas de plugin e theme por tenant no painel de extensões do GrabWP Tenancy Pro

Essa é a lacuna que o GrabWP Tenancy Pro foi construído para fechar. Em vez de um único wp-content compartilhado, o Pro dá a cada tenant uma separação COMPLETA de wp-content: seu próprio diretório isolado de themes e plugins sob seu próprio diretório de conteúdo. Cada cliente acaba com uma stack de plugin e theme genuinamente separada, e não uma base de código compartilhada que é ativada e desativada.

Como os arquivos são fisicamente separados, os cenários de conflito acima simplesmente param de acontecer. O Cliente A pode rodar a versão 4 do plugin enquanto o Cliente B roda a versão 6. Um plugin incompatível só é carregado para o tenant que o instalou. Um plugin vulnerável esquecido no diretório de um tenant não faz parte da superfície de ataque de nenhum outro tenant. O Pro também combina isso com um database MySQL ou SQLite dedicado por tenant e backup e restore por tenant, para que o isolamento de dados acompanhe o isolamento de código.

O plugin gratuito GrabWP Tenancy já isola uploads, prefixos de tabela e roteamento de domain ou path, e te dá um único dashboard para criar e gerenciar tenants. O wp-content por tenant completo, significando plugins e themes isolados, é o recurso do Pro. A base gratuita isola uploads e prefixos, não arquivos de plugin e theme, então opte pelo Pro especificamente quando a camada de plugin for onde os seus conflitos vivem.

Gerenciando muitas stacks isoladas a partir de um único dashboard

A preocupação óbvia com o isolamento é que você troca um problema por outro: em vez de lidar com conflitos, você agora cuida de dezenas de pastas de plugins separadas. O GrabWP é projetado para que isso não aconteça.

Mesmo com stacks totalmente isoladas, você ainda gerencia cada tenant a partir de UMA instalação do WordPress e um dashboard. A página de gerenciamento Extensions do Pro mostra o status ao vivo de plugin e theme por tenant, para que você possa ver exatamente o que cada cliente está rodando sem fazer login em cada site. Uma fila de diretivas a partir do site principal pode ativar ou desativar plugins, trocar themes e atualizar opções em qualquer tenant. O isolamento não custa o seu controle central: você ganha stacks separadas e um único lugar para controlar todas elas. Controles de Performance e Security por tenant completam o mesmo fluxo de trabalho em um único painel.

Migrando um cliente problemático para sua própria stack

Aqui está um fluxo de trabalho prático para aquele cliente cujos plugins continuam quebrando a sua rede:

  1. Instale o plugin gratuito GrabWP Tenancy na sua instalação do WordPress e confirme que o isolamento de uploads e prefixos está funcionando.
  2. Faça o upgrade para o Tenancy Pro para desbloquear o wp-content completo por tenant, e então crie um tenant para o cliente problemático.
  3. Faça um backup por tenant primeiro usando o backup guiado pronto para restore do Pro, para que você tenha um ponto de reversão seguro.
  4. Mova os plugins e theme do cliente para o diretório isolado de plugins e themes daquele tenant, nas versões exatas que ele precisa.
  5. Fixe as versões deles independentemente, sem se preocupar com o que qualquer outro tenant roda.
  6. Verifique pela página Extensions se o status ao vivo do plugin e theme do tenant corresponde ao que você pretendia.
  7. Use a fila de diretivas a partir do site principal para ativar os plugins certos e trocar o theme, e depois confirme que o resto dos seus tenants continuam intocados.

O cliente que antes ameaçava toda a rede agora vive em uma caixa selada que você ainda controla centralmente.

Tradeoffs e quando isso importa

As stacks por tenant usam mais disco do que um único wp-content compartilhado, porque cada tenant carrega seus próprios arquivos de plugin e theme. Para um punhado de sites quase idênticos que rodam todos os mesmos plugins, o Multisite comum pode ser o suficiente. Se isso descreve você, leia quando não usar o WordPress Multisite antes de adicionar qualquer camada de isolamento.

O momento em que os seus clientes precisarem de plugins diferentes, versões diferentes ou uma superfície de segurança compartilhada menor, a camada compartilhada se torna o gargalo, e o isolamento se paga sozinho. Para uma visão mais ampla sobre como manter sites de clientes separados, veja como isolar sites de clientes no WordPress sem o Multisite.

Comece com o plugin gratuito GrabWP Tenancy para isolar uploads, prefixos e roteamento a partir de um único dashboard. Quando a camada de plugin e theme for onde os seus conflitos moram, faça o upgrade para o GrabWP Tenancy Pro por $9.99/month para ter wp-content completo por tenant, para que cada cliente receba uma stack de plugin e theme genuinamente separada que você continua gerenciando centralmente.

Perguntas frequentes

Você pode dar a dois subsites do WordPress Multisite plugins completamente diferentes?
Na verdade não. O Multisite instala os arquivos de plugin em um diretório wp-content compartilhado. Você pode ativar um plugin na rede toda ou habilitá-lo por site, mas o código do plugin ainda é compartilhado entre todos os subsites. Você não consegue dar a dois subsites dois conjuntos de plugins genuinamente isolados e com versões independentes.
Como o wp-content por tenant evita conflitos de plugins?
Com o GrabWP Tenancy Pro, cada tenant recebe seu próprio diretório isolado de themes e plugins dentro do seu próprio diretório de conteúdo. O plugin de um cliente carrega código apenas para aquele cliente, de modo que um plugin incompatível ou com erro não consegue derrubar outros tenants. Cada stack é genuinamente separada, em vez de apenas ser ativada ou desativada a partir de uma base de código compartilhada.
Ter stacks de plugins isoladas significa perder o gerenciamento centralizado?
Não. Você ainda gerencia cada tenant a partir de uma instalação do WordPress e de um único dashboard. O GrabWP Tenancy Pro adiciona uma fila de diretivas que permite ao site principal ativar ou desativar plugins, trocar themes e atualizar opções em qualquer tenant, então o isolamento não custa o seu controle central.

Editorial standards: Our content is written by WordPress experts with hands-on multi-tenancy experience. Articles are fact-checked and regularly updated to ensure accuracy.