Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
July 28, 2022 06:04 pm GMT

Utilizando uma imagem base para suas aplicaes PHP

Para garantir a padronizao das aplicaes e facilitar o trabalho do dia a dia, na Convenia, utilizamos uma imagem base para todas as aplicaes. O proposito desse post mostrar as vantagens dessa abordagem e como criar suas aplicaes a partir dessa imagem.

Porque padronizar a imagem base?

Na Convenia temos uma stack bem homognea quase que inteiramente em PHP, manter uma imagem diferente em cada projeto aumenta a chance de aparecer um problema especfico com uma verso especfica de uma biblioteca que est instalada apenas em um projeto, o desenvolvedor que mantm esse projeto ter que resolver esse problema e no ter como reaproveitar o conhecimento dos amigos visto que esse problema ocorreu apenas no projeto dele.

Seguindo a mesma linha de raciocnio imagine o quo diferente os setups podem parecer sem uma padronizao, manter essa padronizao ajuda bastante quando o desenvolvedor muda de projeto ou mesmo quando ele faz um "merge request" em um outro projeto, dessa forma ganhamos agilidade por no ter que estudar especificidades de cada projeto.

Novas features e correes de bugs so centralizadas em apenas uma imagem ao invs de serem feitas em cada projeto.

Bom e finalmente eliminamos o famoso "na minha maquina funciona". J que estamos utilizando um container padronizado no ambiente de desenvolvimento porque no utilizar o mesmo container em ambiente de produo(com alguns cuidados claro)? Isso praticamente erradica a possibilidade de ocorrer um erro proveniente da discrepncia entre uma biblioteca visto que quase todas as bibliotecas vo ser idnticas. Esse risco s no nulo porque inevitavelmente vamos ter que instalar alguma extenso antes de enviar para produo(opcache por exemplo).

Em algum momento teremos que gerar uma nova imagem a partir da imagem base contendo a aplicao para rodar em produo. Se todos os projetos tem a necessidade de ter um webserver por exemplo porque no adicionar esse webserver j na imagem base? Isso vai tornar a etapa de build do pipeline muito mais rpida visto que passamos a maioria das coisas comuns aos projetos para a imagem base, temos um deploy mais gil!

Utilizando a imagem base

Para rodar uma aplicaes PHP da forma convencional so necessrios 2 containers, o PHP-FPM e um servidor web como nginx ou apache. Rodar esses 2 componentes separadamente, apesar de ser o recomendado, demanda que o desenvolvedor mergulhe em detalhes referentes comunicao entre os containers e at mesmo configurao de volumes, muitas vezes esses detalhes no so interessantes no momento, desenvolvedores iniciantes se sentem bem perdidos nesses detalhes.

Analisando outras stacks como nodejs vamos perceber que relativamente mais simples containerizar esse tipo de aplicao, pois o prprio processo do node j capaz de servir os requests sendo necessrio apenas um container, mas e se podessemos rodar uma aplicao PHP com a mesma simplicidade? Essa a proposta da imagem PHP Full que utilizamos aqui na convenia como imagem base de todas as aplicaes PHP.

Vamos executar a imagem PHP Full com o seguinte comando:

docker run --rm -p 80:80 convenia/php-full:latest

O comando acima executa um container apartir da image convenia/php-full:latest e binda a porta 80 do container porta 80 do host, logo ao entrar no nosso localhost pelo browser(em windows e macOS pode ser necessrio utilizar o IP da vm do docker, dependendo do seu setup) devemos ver a pgina da documentao:

Pgina padro do container contendo a documentao

Essa documentao um arquivo PHP, isso significa que a imagem j est pronta para servir nossa aplicao, tudo que precisamos fazer colocar nossa aplicao dentro do diretrio /var/www/app que onde a imagem procura por padro.

Para fazer um lab bem rpido vamos executar um comando no terminal para instalar uma aplicao Laravel fresh:

docker run --user 1000 --rm -v $(pwd):/app composer create-project laravel/laravel

Isso deve utilizar o composer para criar uma aplicao Laravel bem na pasta em que executamos o comando. Em seguida vamos executar o seguinte comando para criar um container "colocando" a aplicao Laravel que criamos no passo anterior dentro da pasta /var/www/app, nessa pasta que o webserver dentro do container olha para servir a aplicao:

docker run --rm -p 80:80 -v $(pwd)/laravel:/var/www/app convenia/php-full:latest

Aps executar o comando podemos entrar no nosso browser novamente porm agora o resultado esse:

Pgina padro do Laravel

Pronto finalmente estamos rodando nossa aplicao PHP dentro do container, e tudo que fizemos foi copiar a aplicao para uma pasta especfica dentro do container, esse o propsito dessa imagem, prover uma forma simples e segura para executar aplicaes PHP podendo ser utilizado em ambiente de desenvolvimento e produo.

Criando um arquivo Docker Compose

J sabemos como utilizar nossa imagem porm em um ambiente real podemos sentir a necessidade de rodar mais de um container, containers de servios como mysql e redis para nossa aplicao e o prprio container da nossa aplicao pode comear a ficar complexo pois pode surgir a necessidade de utilizar mais volumes, podemos definir uma network para isolar nossa aplicao. Logo o comando para rodar esse container vai ficando cada vez mais complexo e rodar a stack completa se torna uma tarefa rdua. Para resolver esse problema utilizamos um arquivo docker-compose.yml que deve ser criado na raiz do projeto:

version: '3.3'services:  app:    image: convenia/php-full:latest    container_name: application    volumes:      - .:/var/www/app    ports:      - 80:80

Esse arquivo contm todos os detalhes que inclumos via linha de comando quando rodamos nosso container e ele versionado junto com a aplicao, dessa forma qualquer pessoa que pegar o projeto consegue executar a stack toda com um nico comando:

docker-compose up -d

Aps executar esse comando devemos ver o mesmo resultado de quando utilizamos o comando anterior, devemos ver a aplicao rodando no browser.

Concluso

Com certeza padronizar uma imagem base nos seus projetos no vai resolver todos os seus problemas mas ajuda a diminuir a complexidade na implantao e evita silos de conhecimento relacionados ao setup local, espero ter contribudo com esse post, deixe sua opinio nos comentrios ou me da um grito no twitter.


Original Link: https://dev.to/convenia/utilizando-uma-imagem-base-para-suas-aplicacoes-php-1g8a

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To