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
Olá Matheus,
ResponderExcluirEssa 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'.
Puts cara, o 'never' parou de funcionar há algumas releases. Já está corrigido!
ExcluirVocê 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!
Estava explorando tua stack para entender melhor o Docker. Vou atualizar. E parabéns pelo artigo. Bem claro e direto.
ExcluirMuito bom tutorial, me ajuda d++++
ResponderExcluirEstou 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
Alterando o default.conf do nginx funcionou, tem vários filtros de bloqueio neste...
Excluir