Laravel: Lumen CRUD + Docker + Tests — Introdução e ambiente
Tags: lumen, php
Published: 2023-10-10 12:09:31


![](https://cdn-images-1.medium.com/max/2542/1*YiCEMn5q8NqbhwRlbVz0SQ.png)

Para quem já acompanha ou acompanhou meu jeito de fazer post`s sabe que gosto bastante de trazer conteúdos para o medium dos quais passei por alguma experiência ou ia passar, e este aqui não será diferente não! Desta vez quero fazer alguns post`s sobre um teste que fiz em uma empresa, a [Send4](https://www.linkedin.com/company/send4/?originalSubdomain=pt) da qual tinha uma proposta onde era necessário a construção de uma aplicação em framework** php [Laravel](https://laravel.com/) **que realizasse um [*CRUD](https://pt.wikipedia.org/wiki/CRUD)* através do uso de [APIs](https://canaltech.com.br/software/o-que-e-api/) com recursos como validações e um esquema simples de tabelas.

Bom agora como já temos um *overview* da proposta, quero comentar que nesta proposta abordei bastante coisas legais como **docker, docker-compose, migrations, factory e testes unitários** porem vou abordar poucas coisas por vez… assim teremos posts diretos e bem segmentados/estruturados, ok?

### Primeiro ponto?

A proposta pede a inicialmente que o projeto seja feito em Laravel, ok! Porem para quem conhece um pouco mais esse maravilhoso framework sabe que o Laravel seria um dos pacotes mais completos, onde temos um arsenal de plugins que vem juntos neste pacote como por exemplo o [**blade](https://laravel.com/docs/5.8/blade)** para a construção de interfaces, as famosas ***views. ***Como a intensão é um serviço de APIs, podemos e consequentemente não usaremos o blade assim como outros recursos desta versão, podemos optar por algo mais compacto como o tão querido **Lumen**
[**Lumen - PHP Micro-Framework By Laravel**](https://lumen.laravel.com/)

Ok, vamos mostrar performance nesse teste galera!

![](https://cdn-images-1.medium.com/max/2000/1*8wYqBDJw_kwoUxiMWwH7Ww.gif)

Lumen como comentado tem muitaaas coisas a menos no fator *libs* do que o pacote tradicional Laravel, então a melhor opção é sim, utilizar ele diante do cenário.

### Ambiente de desenvolvimento

Comentei logo no inicio do post, que apliquei alguns conceitos bônus na proposta para mostrar eficiência, que tal hehehe

Alguns desses conhecimentos foi algumas automatizações por parte do ambiente de desenvolvimento com [**docker](https://www.docker.com/)** e [**docker-compose](https://imasters.com.br/banco-de-dados/docker-compose-o-que-e-para-que-serve-o-que-come)** para subir todo ambiente de maneira mais rápida e pratica alem de ficar muito massa!

Para quem sabe um pouco de docker fica mais fácil essas próximas etapas e para quem não sabe, já te deixo com a faca e o queijo na mão com esses post`s complementares que fiz aqui
[**Docker — 5 tópicos para iniciar o mais rápido possível**](https://dev.to/henriqueweiand/docker-5-topicos-para-iniciar-o-mais-rapido-possivel-52gn)
[**Docker — II — 5 tópicos para iniciar o mais rápido possível**](https://dev.to/henriqueweiand/docker-ii-5-topicos-para-iniciar-o-mais-rapido-possivel-20l)

*PS: Não sou expert em docker, mas eu diria que sei me virar*

### Subindo containers

Agora vamos começar de fato a ver códigos por aqui e mexer no nosso projeto, certo?

Com seu docker rodando!

![](https://cdn-images-1.medium.com/max/2000/1*uvZJUEaIrzlJzx34zUMEJA.png)
>  Aaah vou começar a usar prints das minhas pastas, então se em algum momento você notar algum arquivo a mais que eu não comentei, foi por isso e que ainda não chegamos na parte que eu falo do tal outro arquivo.

Criei um arquivo chamado *docker-compose.yml *com o seguinte conteúdo
https://gist.githubusercontent.com/henriqueweiand/bbcdfed9594ced7cc7107278443846fb/raw/e8b3ffff73bb575ff72600423fa8a651469d71c3/docker-compose.yml

Fiz a criação de três services, vulgo **containers** onde um é nosso banco de dados **MySql**, outro o **Nginx** e mais um que é nosso **php**, para alguns fiz a utilização de uma imagem "buildada" na hora, elas podem ser consultadas:
[**henriqueweiand/test-send4-lumen-crud**](https://github.com/henriqueweiand/test-send4-lumen-crud/tree/master/images)

E sim, este link acima é o repositório do projeto finalizado ;)

Detalhando mais alguns pontos do docker-compose, fiz o mapeamento de algumas pastas com a *option* volumes assim como o mapeamento de portas e links entre as imagens e por ultimo e bem importante, a imagem do mysql coloquei duas opções para em envieonment que são

    MYSQL_ROOT_PASSWORD: root

    MYSQL_DATABASE: lumen

Essas opções são importantes neste contexto da proposta pois assim ao subir o **mysql** a imagem automaticamente cria uma base de dados com o nome lumen, onde conseguimos posteriormente rodar as *migrations* assim como ter uma senha *default* para nosso .env
>  Não vou falar de tudo sobre o docker-compose.yml pois se não nosso post foge um pouco da ideia inicial, mas como já comentei acima, temos links complementares pare reforço dos conteúdos abordados

### Colocando para rodar

Chega de bla…bla…bla e vamos mostrar nossa criação rodando, então na pasta do docker-compose.yml execute o seguinte comando

    docker-compose up --build -d

e temos o seguinte resultado

![](https://cdn-images-1.medium.com/max/2000/1*G3r4_1sI4pvITeGTYYVF5Q.gif)
>  Não se assuste se demorar a rodar na sua maquina, pois aqui esta tudo meio que no cache já

Encerrando por hoje! Sim, falei de Laravel e lumen mas de fato não vimos nenhum código dele até então kkkk, mas não se preocupe que ainda vem alguns post`s na sequencia… Aqui trouxe mais uma intro sobre o que vamos ver e sobre o ambiente para o start tão esperado, certo?

Mas para quem quer ver o resultado final, pode ver o projeto na integra no repositório e rodar para ver que massa ficou
[**henriqueweiand/test-send4-lumen-crud**](https://github.com/henriqueweiand/test-send4-lumen-crud)

Até a próxima!

Next post
https://dev.to/henriqueweiand/lumen-instalando-atraves-do-docker-486c