← Voltar para Blog

Blog

Docker para WordPress: Por que Contêineres Isolados Mudam Tudo

Um cliente não pode derrubar outro. Um site não pode infectar outro. Esta é a arquitetura por trás da plataforma de hospedagem da PAGEnza.

A hospedagem tradicional de WordPress coloca vários sites em um único servidor. Eles compartilham PHP, acesso ao sistema de arquivos e, muitas vezes, um servidor de banco de dados. Isso funciona bem até que não funcione — e quando não funciona, é um problema sério.

A PAGEnza provisiona cada site WordPress em seu próprio contêiner Docker. Este post explica o que isso significa na prática e por que é importante para agências que gerenciam vários sites de clientes.

O problema da hospedagem compartilhada

Em um plano de hospedagem compartilhada típico ou mesmo em um VPS básico com várias instalações do WordPress:

Contenção de recursos: um site que recebe um pico de tráfego desacelera todos os outros sites no servidor. Um plugin mal otimizado no site A degrada o desempenho no site B.

Vazamento de segurança: se uma instalação do WordPress for comprometida — via um plugin vulnerável, uma senha fraca ou uma versão principal desatualizada — um invasor que obtiver acesso ao sistema de arquivos poderá ler arquivos de outros sites no mesmo servidor.

Conflitos de versão do PHP: o site A precisa do PHP 7.4 para um plugin antigo. O site B precisa do PHP 8.2 para um mais novo. Na hospedagem compartilhada, você escolhe um.

Exposição do banco de dados: servidores de banco de dados compartilhados significam que uma permissão de usuário mal configurada pode expor os dados de outros sites.

Contêineres Docker resolvem todos esses problemas no nível da infraestrutura.

O que é realmente um contêiner

Um contêiner Docker é um processo leve e isolado que possui seu próprio:

  • Sistema de arquivos (o contêiner não pode ver arquivos fora de seus limites)
  • Pilha de rede (seu próprio endereço IP, suas próprias portas)
  • Espaço de processos (não pode ver os processos de outros contêineres)
  • Limites de recursos (limites de CPU e memória)

Ele compartilha o kernel do host com outros contêineres, mas tudo acima do kernel é isolado. Não é uma máquina virtual completa — inicia em segundos, não em minutos, e usa uma fração dos recursos.

Para WordPress, um único contêiner executa: Nginx, PHP-FPM e arquivos do WordPress. O banco de dados é executado em um contêiner separado, conectado apenas a esse contêiner específico do WordPress.

Como a PAGEnza provisiona um site

Quando você cria um novo site de cliente na PAGEnza, veja o que acontece em menos de 45 segundos:

  1. Um novo contêiner Docker é iniciado a partir de uma imagem base do WordPress
  2. O WordPress é configurado com um banco de dados novo na instância MariaDB compartilhada (isolado para as credenciais desse contêiner)
  3. O plugin PAGEnza é instalado e ativado automaticamente
  4. Um host virtual Nginx é configurado com o subdomínio do cliente
  5. O SSL é emitido via Let's Encrypt
  6. O contêiner é registrado no proxy reverso com as regras de roteamento corretas

O cliente recebe um URL como nomedocliente.pagenza.com que fica ativo em 45 segundos após clicar em "Criar site". Nenhuma configuração manual de servidor, nenhum SSH, nenhum tempo de espera de DNS (para o subdomínio — a propagação de DNS de domínio personalizado é separada).

Isolamento de contêiner na prática

Limites de memória: cada contêiner tem um limite de memória configurável. Se um plugin descontrolado causar um pico de memória em um site de cliente, ele não poderá consumir a memória alocada para outros contêineres. O site pode ficar lento ou retornar um 503 — mas não afetará outros clientes.

Isolamento do sistema de arquivos: os arquivos do WordPress do cliente A são completamente invisíveis para o contêiner do cliente B. Um plugin comprometido no site do cliente A não tem caminho para os arquivos do cliente B.

Isolamento de rede: os contêineres se comunicam apenas através de pontes de rede definidas. O contêiner de banco de dados do cliente A aceita conexões apenas do contêiner WordPress do cliente A — não de nenhum outro contêiner no sistema.

PHP por contêiner: como cada contêiner executa sua própria instância PHP-FPM, você pode executar diferentes versões do PHP para diferentes clientes. O plugin legado do cliente A que precisa do PHP 7.4 funciona bem ao lado da pilha moderna do cliente B no PHP 8.2.

Domínios personalizados

A configuração padrão oferece a cada cliente um subdomínio *.pagenza.com. Para clientes que desejam seu próprio domínio, o processo é:

  1. O cliente aponta o registro A de seu domínio para o IP do servidor PAGEnza
  2. No painel PAGEnza, você insere o domínio personalizado
  3. A configuração do proxy reverso é atualizada automaticamente
  4. O SSL é emitido para o domínio personalizado via Let's Encrypt

As opções siteurl e home do WordPress são atualizadas para corresponder. Da perspectiva do cliente, seu site simplesmente funciona em seu domínio — sem redirecionamento, sem subdomínio visível para os visitantes.

O que isso significa para agências

O benefício prático para agências que gerenciam vários sites de clientes:

Velocidade de integração: provisionar um novo site de cliente leva menos de um minuto. Nenhuma configuração de servidor, nenhum cPanel, nenhuma instalação manual do WordPress.

Separação de clientes: o site de cada cliente é genuinamente isolado. Um cliente que instala um plugin problemático afeta apenas seu próprio site.

Escalabilidade: adicionar um novo cliente não requer provisionar um novo servidor. A infraestrutura de contêineres escala para a capacidade do host, e adicionar mais capacidade é uma questão de adicionar mais nós de host.

Recuperação de desastres: como cada site é conteinerizado, backup e restauração operam no nível do contêiner. Restaurar o site de um único cliente não afeta nenhum outro cliente.

A desvantagem é que a hospedagem em contêineres custa mais por site do que a hospedagem compartilhada. Mas para agências onde a confiabilidade do site e a separação de clientes são inegociáveis, a economia faz sentido — especialmente quando se consideram as economias de tempo de provisionamento.