Git Product home page Git Product logo

fct7-devops-docker-laravel's Introduction

Code Education | Desenvolvimento de Aplicações Modernas e Escaláveis com Microsserviços

Code Education - Full Cycle Turma 7.

As seguintes tecnologias são utilizadas neste projeto:

  • Nginx
  • PHP-FPM
  • Redis
  • MySQL

DevOps | Iniciando com Docker - Publicando imagem Laravel

Imagem Docker - Laravel: https://hub.docker.com/r/kaissi/devops-docker-laravel.
Imagem Docker - Desafio Docker: https://hub.docker.com/r/kaissi/codeeducation.

1. Gerando arquivos Laravel

Na pasta base está o Dockerfile que é utilizado para gerar os arquivos Laravel.

Após os arquivos Laravel terem sido gerados, não será mais necessário executar este passo.

Para gerar os arquivos, executar make generate-laravel-files

Executar make build-base para gerar a imagem base que será utilizada na aplicação.

2. Executando o sistema

2.1 Standalone

Na pasta raiz do projeto, onde agora estão os arquivos Laravel, também estão docker-compose.yaml e docker-compose.override.yaml que utilizaremos para executar o sistema.

docker-compose up --detach --build

No GCP, utilizaremos o arquivo docker-compose.cloudbuild.yaml no lugar de docker-compose.override.yaml:

docker-compose up --detach --build \
    -f docker-compose.yaml \
    -f docker-compose.cloudbuild.yaml

2.2 Kubernetes

Criar o password do MySQL:

kubectl create secret generic mysql-pass --from-literal=password='a1s2d3f4'

Subir o MySQL (será criado o Persistent Volume automaticamente):

kubectl apply -f .k8s/mysql/deployment.yaml

Subir o Redis:

kubectl apply -f .k8s/redis/deployment.yaml

Subir o Nginx:

kubectl apply -f .k8s/nginx/deployment.yaml

Por fim, subir a aplicação substituindo img-app-deployment pelo nome da imagem correta em .k8s/app/deployment.yaml

kubectl apply -f .k8s/app/deployment.yaml

Abrir no browser o IP externo gerado pelo serviço nginx-service

* No GCP todos estes passos devem ser feitos antes do cloudbuild executar, com exceção da substituição de img-app-deployment pelo nome da imagem gerada que é feita automaticamente, assim como o deploy no cluster do Kubernetes que também é feito automaticamente. Ver o arquivo cloudbuild.prod.yaml

3. Compilando Docker Multi-Plataforma (amd64, arm64, armv7, armhf)

Leia mais sobre buildx para saber como funciona e como habilitá-lo no Docker.

O comando make help mostra as opções para compilar o projeto.

Para executar o build padrão, gerando apenas para a plataforma local, executar:
make build

Internamente é executado:

docker build \
    -t kaissi/devops-docker-laravel:latest-default \
    -f Dockerfile.prod.build \
    .

Para executar o buildx, gerando imagem Docker para múltiplas plataformas, fazer:
make build-all

Caso dê algum erro para compilar uma plataforma diferente, executar o seguinte comando para a(s) plataforma(s) com erro:

docker run --rm --privileged aptman/qus -s -- -p aarch64

Para remover o suporte a uma ou mais plataformas específicas, executar:

docker run --rm --privileged aptman/qus -- -r aarch64

Para fazer o build para uma plataforma específica, fazer:
make build-armv7

Internamente está sendo executado:

docker buildx build \
    --pull \
    --load \
    -t kaissi/devops-docker-laravel:latest-armv7 \
    --platform linux/arm/v7 \
    -f Dockerfile.prod.build \
    .

Para que ao executar docker pull kaissi/devops-docker-laravel:latest, o Docker consiga escolher a plataforma automaticamente, executar make release. Este comando irá gerar o build para todas as plataformas (make get-archs), fazer o push para o Docker Hub de todas as imagens, e gerar e fazer o push do manifest para estas plataformas.

4. Gerando docker otimizado para produção

Na pasta raiz do projeto fazer:

docker build . -t kaissi/devops-docker-laravel-optimized:latest \
    -f Dockerfile.build \
    --build-arg APP_PORT=9000 \
    --build-arg DOCKERIZE_VERSION=v0.6.1

Note que o argumentos APP_PORT e DOCKERIZE_VERSION são opcionais. Se não passados, irão com os valores padrão definidos no Dockerfile.

fct7-devops-docker-laravel's People

Contributors

kaissi avatar

Watchers

 avatar

fct7-devops-docker-laravel's Issues

Help to explain how to run it as CI in cloud build.

I am using the docker compose files that the cloudbuild.yaml indicates, however I am getting errors in google cloud build. Can you tell us how to make the tests and migrations run for CI?

I have a trigger in cloud build that fires every time we create a Pull Request.

Screen Shot 2021-09-17 at 10 07 44

Screen Shot 2021-09-17 at 10 10 15

I am using the cloudbuild.yaml and the docker compose that you have in your repository to be able to run the tests and migrations in my project, since we have tests that simulate operations with the Database (MySQL).

https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/cloudbuild.yaml
https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/docker-compose.yaml
https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/docker-compose.cloudbuild.yaml
https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/.docker/mysql/Dockerfile
https://github.com/kaissi/fct7-devops-docker-laravel/tree/master/.docker/nginx
https://github.com/kaissi/fct7-devops-docker-laravel/tree/master/.docker/app
https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/.scripts/base/composer-installer.sh
https://github.com/kaissi/fct7-devops-docker-laravel/blob/master/.scripts/base/entrypoint.sh

But I am getting errors in google cloud build.

Screen Shot 2021-09-17 at 10 16 50

I hope you can help us solve it so that we can run our tests and migrations.

NOTE:
We are using laravel 8 with php 8, change the FROM php: 7.3 ... to 8.0-fpm-alpi

Docker file used.

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.