Para entender como, é útil ver o que os próprios criadores dizem em sua documentação oficial, que a define como uma plataforma para “construir, compartilhar e rodar aplicações” em ambientes isolados.
O Que é Docker e Por Que Usar no WordPress?
Antes de mergulharmos nos passos, vamos entender nossos dois conceitos principais: a plataforma e os containers.
A Analogia (Containers são como LEGOs):
Pense na sua VPS como um grande “terreno” vazio. Da forma tradicional, para construir uma “casa” (site WordPress), você teria que construir tudo do zero no local (PHP, MySQL, Nginx).
Se a “Casa A” precisasse de PHP 8.1 e a “Casa B” de PHP 7.4, no mesmo servidor, você teria um problema sério.
A tecnologia de containers muda esse jogo. Ela usa “Containers”.
- Um Container é como uma casa pré-fabricada (um “LEGO” gigante). Ele já vem com tudo o que o site WordPress precisa para funcionar (o próprio WP, a versão exata do PHP, a conexão com o banco de dados) tudo selado dentro dele.
Você simplesmente “coloca” esse container no seu terreno (VPS). Ele funciona perfeitamente e é 100% isolado da casa ao lado. A “Casa A” pode rodar PHP 8.1 e a “Casa B” pode rodar PHP 7.4, no mesmo servidor, sem nunca se tocarem.
Benefícios Imediatos para Múltiplos WordPress
- Isolamento Total: Um plugin quebrado ou um ataque de malware em um site não afeta nenhum outro.
- Sem Conflitos de Versão: Rode sites com PHP, MySQL ou qualquer outra dependência diferente, lado a lado.
- Eficiência: Containers são muito mais leves que máquinas virtuais completas. Você pode hospedar dezenas de sites em uma VPS KVM robusta que antes mal aguentava cinco.
- Portabilidade: A “planta” da sua casa (um arquivo
docker-compose.yml) pode ser usada para construir uma casa idêntica em qualquer outra VPS que tenha as ferramentas instaladas.
Os 4 Passos para Hospedar Múltiplos WordPress em Containers
Vamos ao guia prático. Dividimos o processo em 4 passos principais, desde a preparação do terreno até a construção de múltiplas “casas”.
Passo 1: Preparando sua VPS (O Terreno)
Primeiro, você precisa do seu “terreno”. Assumimos que você já tenha uma VPS limpa (recomendamos Ubuntu 22.04). O primeiro passo é instalar as “ferramentas de construção”.
- Instale o Docker: É o motor principal que permite rodar containers.
- Instale o Docker Compose: Esta é a ferramenta de “planta baixa”. Em vez de construir um container manualmente, você escreve um arquivo simples (
docker-compose.yml) dizendo “eu quero um container de WordPress e um de MySQL, e quero que eles conversem entre si”. O Compose lê essa planta e constrói tudo para você.
A instalação é direta. No Ubuntu, seria algo assim:
# Atualiza os pacotes
sudo apt update
# Instala o Docker
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
# Instala o Docker Compose (verifique a versão mais recente no GitHub)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Passo 2: O Cérebro da Operação – O Reverse Proxy (O Carteiro)
Aqui está um ponto crucial. Sua VPS tem apenas um “endereço” principal (um endereço IP). Se você tem 10 containers de sites, como o servidor sabe para qual container enviar um visitante?
A Analogia (O Carteiro do Prédio):
Pense no Reverse Proxy (Proxy Reverso) como o carteiro de um prédio de apartamentos. Sua VPS é o prédio (um único endereço). Os containers são os apartamentos (Apto 101, Apto 102, etc.).
O visitante (tráfego da web) chega no endereço do prédio. O carteiro (Reverse Proxy) olha o nome na carta (o domínio, ex: cliente-a.com) e automaticamente entrega a carta no “Apto 101” (o container do Cliente A).
Configurando o Traefik (O Carteiro)
Para isso, recomendamos o **Traefik**. É um proxy reverso moderno que “ouve” o *daemon* de container. Quando você lança um novo container, o Traefik o detecta automaticamente e começa a rotear o tráfego para ele. Ele também gera e renova certificados SSL (HTTPS) automaticamente.
Crie uma pasta para ele, por exemplo /home/docker/traefik, e dentro dela crie um arquivo docker-compose.yml:
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik_proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
command:
# Habilita o "listening" no Docker
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# Define os pontos de entrada (HTTP e HTTPS)
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
# Configura o resolvedor de SSL (Let's Encrypt)
- "--certificatesresolvers.meu_resolver_ssl.acme.tlschallenge=true"
- "--certificatesresolvers.meu_resolver_ssl.acme.email=seu-email@dominio.com"
- "--certificatesresolvers.meu_resolver_ssl.acme.storage=/letsencrypt/acme.json"
# Redirecionamento automático de HTTP para HTTPS
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
volumes:
# Arquivo onde o SSL é armazenado (DEVE EXISTIR)
- "./letsencrypt/acme.json:/letsencrypt/acme.json"
# Permite o Traefik "ouvir" o daemon de container
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- traefik_network
networks:
# Cria uma rede "externa" que seus containers de WP vão usar
traefik_network:
name: traefik_network
Antes de rodar, crie o arquivo que armazenará os certificados SSL:
# Crie a pasta
mkdir -p /home/docker/traefik/letsencrypt
# Crie o arquivo JSON e dê as permissões corretas
touch /home/docker/traefik/letsencrypt/acme.json
chmod 600 /home/docker/traefik/letsencrypt/acme.json
Agora, na pasta /home/docker/traefik, rode docker-compose up -d. Seu “carteiro” está pronto.
Passo 3: Criando seu Primeiro Site (A Primeira Casa)
Agora a mágica acontece. Vamos criar a “planta baixa” para um site WordPress. Crie uma pasta para seu primeiro cliente (ex: /home/docker/cliente-a) e, dentro dela, crie um arquivo docker-compose.yml:
version: '3.8'
services:
# --- Container do Banco de Dados ---
db_cliente_a:
image: mysql:8.0
container_name: db_cliente_a
volumes:
# 'Volume' é onde os dados do BD ficam salvos, fora do container
- db_data_cliente_a:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'SENHA_MUITO_FORTE_AQUI'
MYSQL_DATABASE: 'wp_clientea'
MYSQL_USER: 'user_clientea'
MYSQL_PASSWORD: 'OUTRA_SENHA_FORTE_AQUI'
# --- Container do WordPress ---
wordpress_cliente_a:
image: wordpress:latest
container_name: wp_cliente_a
depends_on: # Diz ao sistema para iniciar o BD *antes* do WordPress
- db_cliente_a
volumes:
# 'Volume' onde os arquivos do site (plugins, temas) ficam salvos
- wp_files_cliente_a:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db_cliente_a:3306
WORDPRESS_DB_USER: 'user_clientea'
WORDPRESS_DB_PASSWORD: 'OUTRA_SENHA_FORTE_AQUI'
WORDPRESS_DB_NAME: 'wp_clientea'
# --- Etiquetas para o "Carteiro" (Traefik) ---
labels:
- "traefik.enable=true" # "Ei Traefik, olhe para mim!"
# Define o domínio para este container
- "traefik.http.routers.wp_clientea.rule=Host(`cliente-a.com`)"
- "traefik.http.services.wp_clientea.loadbalancer.server.port=80"
# Habilita o SSL (HTTPS) automaticamente
- "traefik.http.routers.wp_clientea.entrypoints=websecure"
- "traefik.http.routers.wp_clientea.tls.certresolver=meu_resolver_ssl"
# Define os volumes como "persistentes"
volumes:
db_data_cliente_a:
wp_files_cliente_a:
# Conecta este site na mesma rede do "carteiro"
networks:
default:
external:
name: traefik_network
Vamos analisar os pontos-chave deste arquivo:
- volumes: Isso é crucial. Diz à plataforma: “Salve os arquivos do banco de dados (
db_data...) e os arquivos do site (wp_files...) fora do container, no disco da VPS.” Isso garante que seus dados (posts, plugins) estarão seguros. - labels: São as instruções para o “carteiro” (Traefik). A linha
Host(`cliente-a.com`)diz: “Qualquer tráfego paracliente-a.com, envie para este container.” - labels (tls.certresolver): Diz ao Traefik: “Use o resolvedor ‘meu_resolver_ssl’ (que definimos no Passo 2) para buscar um certificado SSL para este domínio.”
Para lançar o site, entre na pasta /home/docker/cliente-a e rode: docker-compose up -d. Em 30 segundos, seu site estará no ar e com HTTPS.
Passo 4: Escalando para Múltiplos Sites (Construindo Mais Casas)
E agora, como adicionar o cliente-b.com?
É aqui que seu investimento valeu a pena. Você não precisa instalar outro PHP ou MySQL. Você simplesmente repete o Passo 3 com nomes diferentes.
- Crie uma nova pasta:
/home/docker/cliente-b - Copie o arquivo
docker-compose.ymldo Cliente A para a pasta do Cliente B. - Abra o arquivo e altere:
- Todos os
_cliente_apara_cliente_b(ex:db_cliente_aviradb_cliente_b). - As senhas no
environment(por segurança). - A label do Host para:
Host(`cliente-b.com`) - A label do router para:
traefik.http.routers.wp_clienteb.rule=...(use um nome único)
- Todos os
- Na pasta
/home/docker/cliente-b, rode:docker-compose up -d.
É isso. Em mais 30 segundos, o Traefik (nosso carteiro) detecta o novo container, vê sua etiqueta cliente-b.com, busca um certificado SSL para ele e o coloca no ar.
💡 Dicas de Profissional para Gerenciar seu Ambiente
Gerenciar **múltiplos WordPress em containers** é poderoso, mas exige boas práticas.
- Faça Backup dos Volumes: Seus dados (banco de dados e arquivos
wp-content) vivem nos “volumes” que definimos. Sua rotina de backup deve focar em fazer cópias desses volumes, que geralmente estão em/var/lib/docker/volumes/. - Atualizando o PHP de um Site: Para atualizar o PHP do Cliente A (ex: de
wordpress:latestparawordpress:php8.1), você só precisa seguir estes passos na pasta/home/docker/cliente-a:- Alterar a linha
image: wordpress:latestparaimage: wordpress:php8.1-fpm-alpine. - Rodar
docker-compose pull(para baixar a nova imagem). - Rodar
docker-compose up -d(para recriar o container com a nova imagem).
O site ficará offline por cerca de 10 segundos e voltará com a nova versão, sem afetar nenhum outro site.
- Alterar a linha
- Use o Portainer: Se você não gosta de linha de comando, use o Portainer. É uma interface gráfica (que também roda em um container!) que lhe dá um painel visual de todas as suas “casas” (containers), permitindo parar, iniciar e monitorar tudo facilmente. Como detalhado no site oficial do Portainer, ele é um excelente complemento para seu ambiente de gerenciamento de containers.
Conclusão
Você conseguiu. Você deixou para trás o “inferno das dependências” e transformou sua VPS de um frágil castelo de cartas em uma plataforma de hospedagem multi-tenant, segura e eficiente.
Dominar essa configuração coloca você em um nível de gerenciamento de servidor muito mais profissional, permitindo escalar seus negócios de hospedagem ou sua agência sem escalar seus custos ou suas dores de cabeça.
Precisa de ajuda com Docker? Fale com os especialistas da StayCloud!



