/laravelORM_1paraN

Exemplo de CRUD de cadastro usando relacionamento 1 para N - curso iniciado 04/06/2020 - 09/06/2020

Primary LanguagePHP

Sobre o Projeto

Criação de um CRUD com Laravel 6.0 para entender o relacionamento 1:N

Sobre o código

  • Laravel 6.0
  • nginx:1.17.0
  • php:7.3-fpm
  • redis:alpine
  • phpmyadmin:latest
  • Mysql 8.0

Atenção

Existe a versão alpine e sem ela. A diferença que a versão alpine ela mais leve, por exemplo a versão nginx-1.17.0-alpine tem 19MB enquanto o nginx-1.17.0 tem 109 MB.

Para acessar o container com a versão alpine, use o comando:

docker exec -it nomedocontainerapp ash

Alterar o nome do Container

Nessa parte do código, você pode alterar o nome do container de acordo com a sua necessidade para melhor identificar o container.

container_name: "coloqueNomeAquiDoSeuContainer"

Ordem de comando

Execute o comando para gerar o build da imagem

docker-compose up -d --build

Uma observação vai demorar pouco pegar tudo, esperar copiar os arquivos do mysql para DBDATA

E não esqueça de dá o comando

chmod -R 777 dbdata

Acessar o container da aplicação

docker exec -it nome_container_php_fpm /bin/bash

Digite esse comando

cd /var/www/

Verifique se o arquivo .env.example foi copiado, usando o comando ls -la Se estiver tudo okay, vai poder visualizar sua aplicação funcionando.

  • PHPMYADMIN -> localhost:8082
  • SITE_LARAVEL -> localhost:8081

Precisa está dentro do container do php-fpm na pasta /var/www/ para executar os comando do laravel como.

php artisan migrate
php artisan make:model algumacoisa

São apenas alguns exemplos

DOCKER-COMPOSE.yaml

Essas são configurações que você editar para conectar ao seu banco de dados
e também para configurar o Mysql

configuração do service app

environment:
      - DB_DATABASE=laravel
      - DB_PASSWORD=root
      - DB_USERNAME=root
      - DB_HOST=db

configuração do service mysql

  environment:     
      - MYSQL_DATABASE=laravel
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root

Teste para verificar se o banco de dados se está OKAY

   healthcheck:
      test: ["CMD-SHELL", 'mysql -uroot --database=laravel --password=root --execute="SELECT count(table_name) > 0 FROM information_schema.tables;" --skip-column-names -B']
      interval: 10s
      timeout: 10s
      retries: 4

Código acima vai verificar se o banco de dado está funcional e está conectando, entretanto, quando você inicia pela primeira vez vai dá erro.

docker-compose up -d --build

Para provisionar o banco de dados demora mais do que outros containers. Contudo, pode alterar o tempo do Interval para que seja de acordo com o tempo que leva para criar o container do mysql .

Configurar Nginx

No arquivo dockerfile do nginx

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Atenção nessa parte fastcgi_pass app:9000; o nome app é do service que está no docker-compose , se alterar o nome do service no docker-compose é preciso alterar aqui também, porque aqui faz a mágica acontece e parte mais importante, pois é daqui que ele vai redirecionar a sua aplicação para porta 9000

Na hora de ignorar algumas pastas

Tente ignorar a pasta dbdata para upar para o repositório. Sempre que possível gere um arquivo sql do banco de dados e salva na pasta SQL.

O motivo é porque vai ficar muito grande seu repositório.

Como ignorar a pasta

Onde aprendi

Como fazer um .gitignore local?

Bom, este é um recurso, como muitos outros, bem escondido do git. Então resolvi fazer um post para explicar a situação em que pode-se usar e como fazer essa magia negra. 👻

O problema

Você provavelmente já adicionou algum dia um arquivo no projeto que não deveria ser commitado certo? E como você fez para ignorar esse arquivo mesmo? Provavelmente adicionou no arquivo .gitignore.

OK então, aí você commitou esse arquivo .gitignore e pronto, mais ninguém poderá criar um arquivo com o mesmo nome e commitar. Mas espera aí! Não era isso que você queria! Você só queria ignorar esse arquivo na sua máquina, se alguém, algum dia por obséquio achar esse um nome bom para seu arquivo, que assim seja.

Então como fazer isso? Não commitar o arquivo .gitignore e colocar o .gitignore dentro do .gitignore para não commitar ele por quando tiver alteração. Bom, essa opção se você pensar um pouco vai notar porque não funciona: se você disser para o git ignorar o .gitignore, como é que você vai commitar o .gitignore com o .gitignore ignorado (nossa, quanta ignorância 😁).

OK, como posso fazer então?

A solução!

Então, aqui vai uma maneira para você fazer isso. Em todo repositório git existe um arquivo .git/info/exclude. Ele funciona exatamente como um arquivo .gitignore só que ele não é commitado! Então é só colocar uma linha com o nome do seu arquivo nele e 🎉!