/laravel6-docker-repository

Projeto base Laravel 6 com docker e arquitetura repository

Primary LanguagePHP

Introdução

Este projeto o ajudará a montar um ambiente de desenvolvimento Laravel utilizando o Docker. O mesmo contém os principios básicos para produzir um projeto Laravel além de flexibilizar a criação de Modules e o padrão Service and Repositorie.

Instalação

Para começar a utiliza-lo é necessário realizar um clone em sua máquina. Feito esse procedimento irá aparecer uma pasta com o nome laravel6-docker-repository/. Entre dentro do diretorio backend cd laravel6-docker-repository/backend e execute:

cp .env.example .env

Logo em seguida saia da pasta backend para poder levantar os containers cd ../. Feito isso execute:

docker-compose up --build -d

Após executar este comando você estará subindo um ambiente de desenvolvimento com as seguintes ferramentas:

Ferramenta Versão
PHP ^7.2
Postgres 11.7
Nginx Alpine

Acessando ambiente de desenvolvimento

Quando certificar-se que todos os containers subiram corretamente, é necessário entrar dentro da máquina que o docker criou. Para realizar tal tarefa é preciso executar o seguinte comando:

docker-compose exec backend bash 

Esse comando fará com que você entre dentro do ambiente de desenvolvimento criado, possibilitando-o ter acesso aos comandos que o composer irá disponibilizar. Como é um projeto novo, é requisito executar o comando abaixo para atualizar todas as dependências do projeto.

composer update

Liberar permissão de escrita

É necessário executar os comandos abaixo para poder ter acesso de leitura e escrita nos arquivos do projeto. Isso é obrigatório fazer, porque o docker por padrão irá procurar um usuário root dentro do container, então você acessa o container como root e executa os seguintes comandos.

chown -Rf 1000:1000 .
chown -Rf www-data:www-data storage/

Configurando autenticação

O projeto já vem com o modulo de Auth implementado, basta configurá-lo seguindo as instruções abaixo:

  • Migrar a estrutura de dados do passport
php artisan migrate
  • Ao implantar o Passport nos servidores de produção pela primeira vez, você provavelmente precisará executar o comando passport:keys. Este comando gera as chaves de criptografia que o Passport precisa para gerar o token de acesso. As chaves geradas geralmente não são mantidas no controle de origem. OBS: para executar este comando você tem que acessar o container como root.
php artisan passport:keys
  • Antes que seu aplicativo possa emitir tokens por meio da concessão de senha, você precisará criar um cliente de concessão de senha, para isso execute o seguinte comando.
php artisan passport:client --password
  • Depois de criar um cliente de concessão de senha, você pode solicitar um token de acesso emitindo uma solicitação POST para a rota oauth\token com o endereço de e-mail e a senha do usuário e o provedor de autenticação. Lembre-se de que essa rota já está registrada pelo método Passport::routes, não sendo necessário defini-la manualmente. Se o pedido for bem sucedida, você receberá um e na resposta JSON com access_token e refresh_token a partir do servidor
{
	"username": <username>,
	"password": <password>,
	"grant_type" : "password",
	"client_id": <client_id>,
	"client_secret" : <cleint_secret>,
	"scope": "",
	"provider": <provider>
}

Testando Projeto

Para realizar o teste se o projeto realmente está rodando abra o browser e acesse: localhost:8080

Criando Primeiro Modulo

Supondo que você está dentro da pasta backend, execute cd Modules/ isso o levará para o diretório de modulos e o habilitará a criar suas aplicações modulares. Para visualizar todos os comandos referentes aos modulos basta digitar

php artisan 

Isso irá lhe mostrar a lista de comandos para se trabalhar utilizando modulos. Para criar seu primeiro modulo execute:

php artisan module:make NomeDoModulo

Entre dentre da pasta NomeDoModulo e poderá trabalhar como um projeto que pode ser facilmente integrado com outros modulos ou caso preferir pode trabalhar como um projeto a parte.

Criando Service and Repositorie

Para criar o padrão Service and Repository execute o seguinte comando:

Nota: É necessário estar no diretório app para executar os comandos do artisan

php artisan module:make-repository NomeRepository -s NomeModelo NomeDoModulo

Executando esse comando você irá criar um repositorio com base no modelo que você já tenha previamente criado dentro do modulo, e criará em seguida o serviço referente ao seu repositorio. Vale ressaltar que tanto o repository quanto o service podem ser criados de forma separada, os comando estão na lista que a figura acima mostra. Para visualizar os arquivos criados digite cd /Modules/NomeDoModulo. Logo verá que foi criado um pasta chamada Repositories e outra Services.

Observações

Para realizar os prcodimentosé necessário ter o Docker e Docker Composer instalado em sua máquina.

Extra: Mensagens de confirmação semântica para git commit

Veja como uma pequena alteração no seu estilo de mensagem de confirmação pode torná-lo um programador melhor.

Formato: <type> (<scope>): <subject>

<scope> é opcional

  • Exemplo
feat: adicionar login para terceiros
^ --  ^----------------------------^
|     |
|     + -> Resumo no tempo presente.
|
+ -------> Tipo: chore, docs, feat, fix, refactor, style, or test

Mais exemplos:

  • feat: (novo recurso para o usuário, não um novo recurso para o script de construção)
  • fix: (correção de bug para o usuário, não uma correção para um script de construção)
  • docs: (alterações na documentação)
  • style: (formatação, ponto e vírgula ausente, etc; sem alteração no código de produção)
  • refactor: (refatorando o código de produção, por exemplo, renomeando uma variável)
  • test: (adicionando testes ausentes, refatorando testes; nenhuma alteração no código de produção)
  • chore: (atualizando tarefas grunhidas, etc; nenhuma alteração no código de produção)

Extra: Auditoria

Este pacote o ajudará a entender as mudanças nos seus modelos Eloquent, fornecendo informações sobre possíveis discrepâncias e anomalias que possam indicar preocupações comerciais ou atividades suspeitas.

  • Exemplo de Uso
    • A configuração de um modelo para auditoria não poderia ser mais simples. Basta usar a característica OwenIt\Auditing\Auditable no modelo que você deseja auditar e implementarOwenIt\Auditing\Contracts\Auditable a interface.
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;

class User extends Model implements Auditable
{
    use \OwenIt\Auditing\Auditable;

    // ...
}

Feito isso, toda alteração que acontecer nessa entidade será registrada em uma tabela nomeada de audits na sua base de dados.

Considerações Finais

Este tutorial teve como principio descrever como colocar no ar um ambiente de desenvolvimento Laravel o mais rápido possivel, vale ressaltar que não foi esclarecido comandos, tecnologias ou afins porque não era o objetivo do mesmo.

Links utilizados como base

Modulos : laravel-modules

Repositorios: repository-patern

Auditoria: laravel-auditing

Autenticação: auth-guards

Conventional Commits: Mensagens de confirmação semântica para git commit