Criação de um CRUD com Laravel 6.0 para entender o relacionamento 1:N
- Laravel 6.0
- nginx:1.17.0
- php:7.3-fpm
- redis:alpine
- phpmyadmin:latest
- Mysql 8.0
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
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"
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
Essas são configurações que você editar para conectar ao seu banco de dados
e também para configurar o Mysql
environment:
- DB_DATABASE=laravel
- DB_PASSWORD=root
- DB_USERNAME=root
- DB_HOST=db
environment:
- MYSQL_DATABASE=laravel
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=root
- MYSQL_PASSWORD=root
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 .
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
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.
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. 👻
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?
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 🎉!