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):
- Atualize os pacotes do sistema.
- Instale o Docker seguindo o pacote oficial da sua distribuição.
- 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.
- 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
- Crie um arquivinho de teste simples dentro de cada projeto que exiba a versão do PHP em uso.
- Acesse cada domínio pelo navegador e confirme que cada um está respondendo com a versão de PHP correta.
- 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. 💙