Docker serve para migrar meu webAPP antigo em PHP 5?

  • Autor Autor coreio
  • Data de início Data de início
Este tópico foi traduzido automaticamente do espanhol. Ver original
C

coreio

Alfa
Verificación en dos pasos activada
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Olá, tenho um webAPP realmente antigo (PHP 5) com centenas de "hacks", configurações, bibliotecas, permissões... rodando atualmente em um servidor que vou desativar.

Tenho vários outros servers e quero migrá-lo para algum deles, a opção "fácil" seria virtualizar uma máquina e começar a instalar e mexer até acertar. Porém, isso representa um "overhead" de recursos e espaço para a extrema simplicidade da aplicação.

Eu me pergunto se posso usar docker para fazer a mesma coisa, ou seja, criar um contêiner virgem e acessar esse contêiner como se fosse uma máquina para começar a instalar, mexer etc.. e, uma vez funcionando, salvar essa "imagem" ?

É possível fazer isso ou existe alguma alternativa melhor?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Olá, tenho um webAPP realmente antigo (PHP 5) com centenas de "hacks", configurações, bibliotecas, permissões... rodando atualmente em um servidor que vou desativar.

Tenho vários outros servers e quero migrá-lo para algum deles, a opção "fácil" seria virtualizar uma máquina e começar a instalar e mexer até acertar. Porém, isso representa um "overhead" de recursos e espaço para a extrema simplicidade da aplicação.

Eu me pergunto se posso usar docker para fazer a mesma coisa, ou seja, criar um contêiner virgem e acessar esse contêiner como se fosse uma máquina para começar a instalar, mexer etc.. e, uma vez funcionando, salvar essa "imagem" ?

É possível fazer isso ou existe alguma alternativa melhor?
Claro que sim e é a melhor maneira de fazer isso. já existem imagens com PHP 5 prontas para serem usadas , isso porque os repositórios de PHP ou links que apontavam para os branches originais do linux já estão depreciados . mas também seria bom você procurar qual se adapta melhor a você. se você tem PHP-APACHE, PHP-NGINX. seria ir procurando no HUB do docker

e se nenhum te satisfizer. você vai ter que fazer tudo do 0. para isso já existem contêineres quase virgens de 5MB para você ir colocando tudo como deve ser. só que aí você vai ter que, no contêiner, BAIXAR o CÓDIGO-FONTE e compilar. criar seus scripts. e assim seu contêiner ficaria sob medida e o melhor seria, depois de pronto, você SUBIR para algum HUB para o futuro. como o GITLAB .

lembre-se de usar IA como ajuda. mas também de pesquisar em fóruns sobre os assuntos. e um conselho, porque quando comecei no docker o problema que quase sempre encontrei foi quando se quer usar VOLUMES compartilhados. e é um problema por causa das permissões. alguns contêineres têm usuários ou grupos de usuários já predefinidos. e nisso você vai ter que dar um jeito de unificá-los.

no meu caso. eu montei por 1 lado, criei 3 contêineres. 1 para NGINX e 1 para PHP7 e outro para php8 , assim um mesmo site podia rodar tanto com php7 quanto com php8. mas a imagem de php8 que usei já tratava o usuário como de um grupo com id 1001 e os demais usavam o id 1000. minha solução no início foi dar permissões 0777. mas depois mudei para que coincidisse com o id de grupo 1000. montando meu docker do 0 com alpine (compilando, criando usuário e grupo de usuários).

montei assim porque tinha projetos legacy em php 7 e eles tinham que ser migrados para o 8. mas sem deixá-los OFFLINE. já que a parte de testes eu deleguei aos clientes
 
Dá sim, eu fiz isso faz tempo, embora o objetivo fosse levantar um projeto velho e colocá-lo para funcionar para poder começar a migrá-lo.

É relativamente simples e você pode até fazer com que apenas 2 arquivos extras aos do código sejam a única coisa realmente necessária para levantá-lo no final.

Eu não recomendaria deixá-lo rodando online sem atualizar por muito tempo, sempre existe o perigo de algum dos muitos bots que passam o dia inteiro procurando justamente sistemas com vulnerabilidades conhecidas te aplicar um CVE velho. Talvez você me diga que nada aconteceu até agora, mas se há um risco tão óbvio, melhor prevenir.

kj
 
Obrigado pelas respostas, totalmente de acordo @kj2 , o app está em um diretório "estranho" não indexável e é a única barreira de segurança

@tudmin uma pergunta que para mim é fundamental, seja baixando um contêiner quase virgem ou algum lamp com php5: é possível acessar esse contêiner como se fosse um servidor novo? Quer dizer, posso criar um contêiner, rodá-lo e começar com sudo apt install php... etc.. como se fosse um servidor virtualizado?
 
  • Curtir
Reações: kj2
É possível acessar esse contêiner como se fosse um servidor novo? Quer dizer, posso criar um contêiner, rodá-lo e começar com sudo apt install php... etc.. como se fosse um servidor virtualizado?
Desde que os repositórios que você usar estejam vivos para você poder baixar (para php5 você tem os do sury), dá sim, você só precisa entrar no contêiner, assim:

Inserir CODE, HTML ou PHP:
docker exec -it [nombre del contenedor] bash

Se o contêiner for de alpine ou algum que não tenha bash, no lugar você pode colocar "sh".

Por outro lado, o que @tudmin acho que quis dizer era rodar PHP, mariadb e nginx em contêineres separados e que as coisas de PHP você instala dentro do contêiner PHP, que é a maneira moderna de fazer esse tipo de coisa para separá-las umas das outras. Mas de qualquer forma não é que não dê para colocar tudo junto, eu por ex. tenho este que fiz no início para outras pessoas, mas acabei usando eu mesmo:

https://git.kj2.me/kj/nginx-dev

O processo para fazer foi que na primeira vez entrei nele, deixei como eu queria e depois só peguei o histórico e com isso montei o código que acabei deixando nos arquivos Dockerfile e docker-compose.yml, que são os que o constroem.

kj
 
Última edição:
Obrigado pelas respostas, totalmente de acordo @kj2 , o app está em um diretório "estranho" não indexável e é a única barreira de segurança

@tudmin uma pergunta que para mim é fundamental, seja baixando um contêiner quase virgem ou algum lamp com php5: é possível acessar esse contêiner como se fosse um servidor novo? Quer dizer, posso criar um contêiner, rodá-lo e começar com sudo apt install php... etc.. como se fosse um servidor virtualizado?
resumindo, sim, lembre-se de que os contêineres são "máquinas virtuais" (não é correto, mas é para assimilar melhor a ideia), onde se executa um sistema operacional, que você acessa por BASH com comandos docker. existem distros base como ALPINE, que pesa quase 5 mb. que tem sua própria forma de adicionar pacotes ou repositórios onde já há PHP8 pré-compilado, por exemplo Node, mas se você preferir usar algo mais robusto há contêineres/distros base com UBUNTU , dependendo de com qual você tem familiaridade , os comandos podem mudar, usar APT, ou usar APK , etc depende do contêiner BASE. só lembre que, quando se trabalha com projetos antigos, os repositórios que dependem de links ou dependências externas podem dar problemas, porque às vezes já não há mais suporte de armazenamento, e você vai ter que compilar a partir dos códigos-fonte.
Você demoraria um pouco para encontrar contêineres que se ajustem às suas necessidades, mas eu recomendaria usar um contêiner BASE e começar a compilar tudo. isso porque dá para aprender no caminho.
 
@kj2 @tudmin Obrigado!! Acho que estou começando a entender, mas me parece que não é o que procuro, a não ser que eu esteja entendendo errado. Se para criar a imagem final eu tenho que listar os comandos executados, bibliotecas instaladas, etc.. para que ao instalá-la de novo ela replique esses passos, então muito provavelmente, daqui a X anos, se for preciso migrar (ou reinstalar) outra vez, não vai existir nem metade dos repositórios 🤣 Acho que vou pensar em fazer uma imagem completa virtualizada com tudo de ruim que isso implica....

Quanto a separar contêineres, acho que entendi. Cria-se um contêiner só de BD e assim, por mais apps / contêineres que você tenha, você só está rodando 1 servidor de bd (ou http), mas no meu caso, como o mysql também é do tempo do onça e usa apache com centenas de diretivas e regras, no fim eu seria obrigado a montar servidores exclusivos para este app que não posso aproveitar para outros apps...
 
@kj2 @tudmin Obrigado!! Acho que estou começando a entender, mas me parece que não é o que procuro, a não ser que eu esteja entendendo errado. Se para criar a imagem final eu tenho que listar os comandos executados, bibliotecas instaladas, etc.. para que ao instalá-la de novo ela replique esses passos, então muito provavelmente, daqui a X anos, se for preciso migrar (ou reinstalar) outra vez, não vai existir nem metade dos repositórios 🤣 Acho que vou pensar em fazer uma imagem completa virtualizada com tudo de ruim que isso implica....

Quanto a separar contêineres, acho que entendi. Cria-se um contêiner só de BD e assim, por mais apps / contêineres que você tenha, você só está rodando 1 servidor de bd (ou http), mas no meu caso, como o mysql também é do tempo do onça e usa apache com centenas de diretivas e regras, no fim eu seria obrigado a montar servidores exclusivos para este app que não posso aproveitar para outros apps...
é disso que se trata, os contêineres buscam ter exatamente o BUILD/COMPILADO daquele instante. olha, depois que faz todo esse BUILD, o docker armazena ou cria uma imagem DE uso , que é a usada, é como pegar sua máquina virtual, fazer um SNAPSHOT dela e usá-lo cada vez que seu server inicia / reinicia. mas se o seu server for formatado e você só tiver o arquivo docker, então toda a sua receita vai ser criada de novo do 0, para ter esse "SNAPSHOT". olha que a graça disso é que você pode subir para algum repositório. gratuito como Gitlab, ou no próprio "docker hub" (só permite 1 por conta de forma gratuita) . a questão dessas imagens/snapshots é que se daqui a 20 anos todos os LINKS de bibliotecas que você usou originalmente morrerem, e já não for possível replicar essa instalação em nenhum server novo, mas você tiver essa "imagem", então não precisa instalar nada, é só iniciar de onde estava ,

lembre-se de que as imagens só devem conter os executáveis, não os DADOS, como seus sites php, isso para evitar que cresça exageradamente.


agora outro ponto, isso de separar em vários contêineres, fragmentar os contêineres te dá certa liberdade de melhoria progressiva. imagine que você já tem todo o sistema com php5 e mysql. mas quer migrar para php 7.

pois como você tem seu mysql 5 em um contêiner, cria outro contêiner só com php7, mas que aponte para os DADOS do seu projeto atual. e assim você pode ver se algum projeto não quebra ou se não há mudanças significativas a fazer. quando chegar a esse ponto, aí você começa a mover.

agora com mysql é mais ou menos a mesma coisa, preparar um contêiner mysql-8 , e subir os DADOS , para ver se quebra. e se a compatibilidade quebrar, você pode tentar fazer um UPGRADE, faz uma cópia do seu contêiner com mysql5, entra nessa cópia-mysql5, e usa os arquivos de upgrade que o pessoal do mysql costuma fornecer e pronto, como resultado a DATA-cópia está pronta para mysql8, já em produção significaria parar todos os seus contêineres por algumas horas e fazer esse processo para que sua informação mais atual não seja afetada.

em resumo, o tema de contêineres é muito mais tranquilo do que fazer réplicas com vmware ou virtualbox. sem contar que o tamanho das imagens/snapshots resultantes é de centenas de megas em comparação aos snapshots do vmware, que são gigas
 
@kj2 @tudmin Obrigado!! Acho que estou começando a entender, mas me parece que não é o que procuro, a não ser que eu esteja entendendo errado. Se para criar a imagem final eu tenho que listar os comandos executados, bibliotecas instaladas, etc.. para que ao instalá-la de novo ela replique esses passos, então muito provavelmente, daqui a X anos, se for preciso migrar (ou reinstalar) outra vez, não vai existir nem metade dos repositórios 🤣 Acho que vou pensar em fazer uma imagem completa virtualizada com tudo de ruim que isso implica....

Quanto a separar contêineres, acho que entendi. Cria-se um contêiner só de BD e assim, por mais apps / contêineres que você tenha, você só está rodando 1 servidor de bd (ou http), mas no meu caso, como o mysql também é do tempo do onça e usa apache com centenas de diretivas e regras, no fim eu seria obrigado a montar servidores exclusivos para este app que não posso aproveitar para outros apps...
Bom, se o que você quer é ter algo congelado, sempre pode criar uma imagem a partir desse contêiner e pronto... agora essa imagem você pode subir para um repo tipo dockerhub ou um selfhost (como este) do qual fazer pull ou simplesmente mantê-la salva como um arquivo ".tar" que você pode guardar em qualquer lugar e exportá-la de lá.

Caso te sirva, os comandos para fazer o tar seriam:

Inserir CODE, HTML ou PHP:
docker export [nombredelcontenedor] imagen-de-mi-contenedor.tar

E depois para importar em outros lugares:

Inserir CODE, HTML ou PHP:
docker import imagen-de-mi-contenedor.tar  nombre-local-de-mi-imagen:latest

Isso deixaria uma imagem local (você pode vê-la com docker image) que você pode levantar como contêiner de novo assim (você pode adicionar mais argumentos, eu só coloco os mínimos):

Inserir CODE, HTML ou PHP:
docker run nombre-local-de-mi-imagen:latest bash

E isso seria equivalente a ter uma imagem de máquina virtual, mas com a vantagem de que o docker você pode rodar em qualquer VPS e gasta menos recursos.

A única dor de cabeça que deve te pegar no curto prazo fazendo isso é que o arquivo ".tar" provavelmente vai pesar 1 ou 2 GBs e, comprimindo, talvez você reduza o peso à metade, enquanto o Dockerfile e o docker-compose pesam apenas uns poucos KB (o que também é mais simples de fazer backup).

Não é necessário ter o Dockerfile e o docker-compose, é só algo bom de se ter em conta para quando for preciso fazer um contêiner igual de novo.

kj
 
Última edição:
Muitíssimo obrigado, agora sim, tudo esclarecido!! Retomo a ideia do docker, me desejem sorte!

Abraços
 
Voltar
Topo