Domínio .COM.BR GRÁTIS a partir do período anual - Toque e garanta agora Seta para garantir domínio grátis no plano anual.

Docker em VPS: 4 Passos para Hospedar Múltiplos WordPress

Você gerencia múltiplos sites WordPress? Se sim, você conhece aquela sensação de pânico às 3 da manhã. Um cliente liga, o site está fora do ar.Você entra no seu VPS...

Docker em VPS: 4 Passos para Hospedar Múltiplos WordPress
Você gerencia múltiplos sites WordPress? Se sim, você conhece aquela sensação de pânico às 3 da manhã. Um cliente liga, o site está fora do ar.Você entra no seu VPS e descobre o pesadelo: um plugin do “Site A” quebrou a versão do PHP, e agora os outros oito sites no mesmo servidor também caíram. É o “inferno das dependências”.Gerenciar múltiplos sites em um único servidor é um ato de equilíbrio arriscado. Mas e se houvesse uma maneira de dar a cada site sua própria “casa” isolada, com seus próprios recursos, tudo dentro da mesma VPS?É exatamente isso que vamos construir. Este guia mostrará como usar Docker para rodar múltiplos WordPress em uma única VPS, de forma segura, eficiente e escalável. Usar esta plataforma transforma seu servidor de um frágil castelo de cartas em um conjunto robusto de blocos de construção independentes.

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

  1. Instale o Docker: É o motor principal que permite rodar containers.
  2. 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 para cliente-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.

  1. Crie uma nova pasta: /home/docker/cliente-b
  2. Copie o arquivo docker-compose.yml do Cliente A para a pasta do Cliente B.
  3. Abra o arquivo e altere:
    • Todos os _cliente_a para _cliente_b (ex: db_cliente_a vira db_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)
  4. 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:latest para wordpress:php8.1), você só precisa seguir estes passos na pasta /home/docker/cliente-a:
    1. Alterar a linha image: wordpress:latest para image: wordpress:php8.1-fpm-alpine.
    2. Rodar docker-compose pull (para baixar a nova imagem).
    3. 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.

  • 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!

Você pode gostar também:

Blog dia

Hospedagem Web

Seu site está realmente pronto para aguentar o próximo pico?

Tem uma cena que se repete toda Black Friday, todo lançamento grande e todo momento em que um site finalmente...

Blog dia

Hospedagem Web

Micro SaaS em 2026 não é só mais uma tendência, é ideia de negócio lucrativo real

Todo desenvolvedor já viveu essa situação pelo menos uma vez. Um cliente pede uma automação, você entende o problema, constrói...

Blog dia

Hospedagem Web

5 Tendências de Infraestrutura e Automação Que Todo Dev Precisa Conhecer em 2026

Nos últimos 18 meses, o cenário de infraestrutura e automação evoluiu mais rápido do que em toda a década anterior....