Docker :: Containerizando PHP7-FPM, Nginx e MySQL sem complicações.

Share:


Esse vai ser mais um presente do meu repositório de Stacks Docker, que eu tenho a meta de passar pra cá até o final do ano. Meio tenso, porque meus Labs lá estão crescendo muito em comparação a minha frequência de posts aqui (rs). Dessa vez é a vez do PHP ser containerizado aqui. Basicamente esta Stack segue uma arquitetura de PHP FPM totalmente separada do Webserver, que no caso da vez, será o Nginx. De leva, vamos criar um container de MySQL persistente para o nosso projeto.

Essa Stack se assemelha mais a um ambiente de desenvolvimento do que um de QA ou produção, porque eu gosto de mapear os arquivos de configuração dinamicamente para dentro dos containers, pra poder ter um controle maior durante o desenvolvimento, alterar configuração, testar e etc. Caso queira levar isso para produção, te aconselho a dar um ADD ou COPY nos arquivos de configuração do Nginx, FPM para dentro dos containers durante o Build.

Link do projeto: https://github.com/msfidelis/CintoDeUtilidadesDocker/tree/master/Nginx-PHP7-FPM

Basicamente, o esquema de diretórios é o abaixo.



docker-compose.yml

Nosso Docker Compose é bem simples, e basicamente se consiste em 3 serviços. O nginx que vai atender nossa porta 80, o fpm que será nosso servidor de PHP e o mysql que vai atender nosso banco de dados. Sem segredo. 




PHP7fpm/Dockerfile

Essa é a Dockerfile do serviço do PHP-FPM. Nela eu não fui muito simplista. Já utilizei uma imagem prontad o php7.0-fpm e instalei algumas dependências que eu uso bastante nos meus projetos em questão de performance, como o Opcache, APCU e algumas outras bibliotecas auxiliares. 



Nginx/Dockerfile

Essa é a Dockerfile do nosso Nginx. Também sem muito segredo. Basicamente é só uma receita de um Debian com o Nginx instalado. Eu procuro não mapear diretamente os arquivos de configuração para dentro dos containers em ambiente de desenvolvimento, só em produção, só pra poder ter um controle maior em questão de mudar parâmetros, testar configurações e etc. Mas caso você não sinta essa necessidade, é só copiar os arquivos do Nginx para dentro do build sem problemas. 



Nginx/nginx.conf

A configuração padrão do Nginx também não tem o que esconder. Configura um servidor padrão. Habilito o gzip para caso eu queira fornecer algumas páginas e conteúdos estáticos. E etc. Aqui você customiza de acordo com a sua necessidade. 



Nginx/app.vhost

Esse é as configurações do nosso virtualhost do projeto. Ele está como Default, ou seja, vai atender qualquer requisição sem a necessidade de um virtualhost específico. Aqui é importante notar o link para o serviço de fpm que vai funcionar como nosso servidor de PHP. Caso sinta a necessidade de alterar o nome do serviço, não pode esquecer de alterar aqui também para não dar problema. 



Agora pra rodar, o mesmo esquema :)
 # docker-compose build   
 # docker-compose up   





5 comentários:

  1. Olá Matheus,

    Essa compose file, na versão 2, só tem para o restart as opções: no, always, on-failure, não é isso? Tentei subir o docker mas ele acusou o erro invalid restart police 'never'.

    ResponderExcluir
    Respostas
    1. Puts cara, o 'never' parou de funcionar há algumas releases. Já está corrigido!
      Você me lembrou de atualizar pra versão 3 também. Vou fazer isso assim que possível pra melhorar essa Stack.

      Obrigado por avisar e pelo comentário, abraço!

      Excluir
    2. Estava explorando tua stack para entender melhor o Docker. Vou atualizar. E parabéns pelo artigo. Bem claro e direto.

      Excluir
  2. Muito bom tutorial, me ajuda d++++
    Estou com uma dúvida, se eu digito {meusite.com}/index.php ele não encontra, apenas digitando {meusite.com}
    O que falta eu fazer? Lembrando que meu index.php está na pasta /app

    ResponderExcluir
    Respostas
    1. Alterando o default.conf do nginx funcionou, tem vários filtros de bloqueio neste...

      Excluir