Servidor & DevOps 32 visualizações

Como configurar Docker para isolar diferentes versões de PHP em um mesmo VPS

Ver no WHMCS

Como configurar Docker para isolar diferentes versões de PHP em um mesmo VPS

Oi, tudo bem? Aqui é a Sensei da GeHost 🥋 e hoje eu vou te ensinar uma técnica que resolve uma dor de cabeça muito comum: você tem um site rodando em PHP 7.4 (porque um plugin antigo não abre mão dele) e precisa subir, no mesmo servidor, uma aplicação nova que exige PHP 8.2. Rodar as duas versões "soltas" no mesmo sistema operacional costuma virar um nó. É aí que o Docker entra como nosso cinto de segurança.

Antes de começar: este guia é para ambientes de VPS com acesso root (Docker precisa desse nível de acesso para funcionar). Os planos de hospedagem compartilhada cPanel da GeHost não trabalham com Docker/root — se você não sabe se o seu ambiente é um VPS ou tem esse recurso liberado, é só confirmar com a nossa equipe pelo painel.gehost.com.br antes de seguir.

Por que usar Docker para isso?

Pensa no Docker como se fosse um prédio de apartamentos: cada "apartamento" (container) tem sua própria versão de PHP, suas próprias bibliotecas e configurações, sem interferir no vizinho. Assim você pode ter um container com PHP 7.4 rodando o sistema legado e outro com PHP 8.2 rodando o projeto novo, os dois no mesmo VPS, sem brigar entre si.

Passo 1 — Instalar o Docker e o Docker Compose

Conecte no seu VPS via SSH e instale o Docker (o comando pode variar um pouco conforme a distribuição Linux):

  1. Atualize os pacotes do sistema.
  2. Instale o Docker seguindo o pacote oficial da sua distribuição.
  3. Instale também o Docker Compose, que vai facilitar demais a nossa vida — com ele a gente descreve todos os containers num único arquivo de texto.
  4. Confirme que deu certo rodando um comando de versão do Docker e do Compose no terminal.
Dica da Sensei: se você não se sente confortável mexendo em linha de comando, não tem problema nenhum em pedir apoio da nossa equipe técnica — é melhor perguntar do que rodar um comando errado num servidor de produção.

Passo 2 — Organizar as pastas dos seus projetos

Crie uma pasta para cada projeto, separadinha, por exemplo uma para o site que usa PHP 7.4 e outra para a aplicação que usa PHP 8.2. Dentro de cada uma delas vai morar o código do respectivo projeto e o arquivo de configuração do Docker.

Passo 3 — Criar um "Dockerfile" para cada versão de PHP

O Dockerfile é a "receita de bolo" que diz ao Docker qual versão de PHP usar e o que mais instalar (extensões, dependências etc.). Dentro da pasta do projeto que precisa do PHP mais antigo, você cria um arquivo chamado Dockerfile baseando a imagem na versão 7.4. Na pasta do outro projeto, você cria outro Dockerfile, dessa vez baseado na versão 8.2. Ou seja: um Dockerfile por versão de PHP que você precisa isolar.

Passo 4 — Descrever tudo no docker-compose.yml

Agora vem a parte mais gostosa: em vez de subir cada container na mão, você cria um arquivo docker-compose.yml (pode ser um para cada projeto, ou um único arquivo central listando os dois serviços). Nele você define, para cada projeto:

  • Qual Dockerfile/imagem usar;
  • Qual pasta do seu código vai ser "espelhada" dentro do container (o chamado volume);
  • Qual porta do container vai ficar exposta — e aqui está o pulo do gato: cada container precisa de uma porta diferente na sua VPS (por exemplo, um respondendo numa porta e o outro noutra), assim o servidor web na frente (Nginx ou Apache) sabe para qual container mandar cada requisição.

Passo 5 — Subir os containers

Com o docker-compose.yml pronto, dentro da pasta do projeto você roda o comando de subir os containers em modo "background". O Docker vai construir a imagem (baixando a versão de PHP definida) e deixar o container rodando. Repita o processo para o outro projeto, com a outra versão de PHP.

Passo 6 — Apontar o site para o container certo

Por fim, configure o seu servidor web (Nginx costuma ser o mais usado nesse cenário, funcionando como "proxy reverso") para redirecionar cada domínio/subdomínio para a porta do container correspondente. É esse último passo que fecha o ciclo: o visitante acessa o domínio normalmente, sem nem imaginar que por trás existem dois "PHPs" completamente isolados um do outro.

Passo 7 — Testar cada versão

  1. Crie um arquivinho de teste simples dentro de cada projeto que exiba a versão do PHP em uso.
  2. Acesse cada domínio pelo navegador e confirme que cada um está respondendo com a versão de PHP correta.
  3. Só depois disso, teste o funcionamento completo de cada aplicação (login, banco de dados, funcionalidades principais).

Boas práticas para não ter dor de cabeça depois

  • Sempre use volumes para o código do projeto, assim você edita os arquivos fora do container e não perde nada se precisar recriar o container.
  • Guarde os logs de cada container organizados — eles ajudam demais na hora de diagnosticar um erro.
  • Atualize as imagens com calma: teste em um ambiente separado antes de atualizar a versão do PHP em produção.
  • Documente qual container é qual — com o tempo, é fácil esquecer qual porta pertence a qual projeto.
Combinado final da Sensei: Docker é uma ferramenta poderosa, mas mexe direto no coração do servidor. Se em algum momento a configuração ficar complexa demais ou você sentir insegurança em algum comando, chama a gente pelo painel.gehost.com.br — prefiro te ajudar com calma a te ver perder tempo (ou dado!) tentando resolver sozinho. 💙
Precisa de Ajuda?

Nossa equipe está pronta para resolver suas dúvidas.