Este projeto é uma API desenvolvida em Laravel para gerenciar um CRUD de veículos, com sincronização automática (via agendamento) com uma API externa. A autenticação é feita utilizando Laravel Sanctum, garantindo segurança no acesso aos endpoints.
- Somente o docker e docker compose
- Clone o repositório:
git clone https://github.com/Casmei/sync-vehicles.git- Entre na pasta do projeto:
cd sync-vehicles🔹 Pequena observação, a variável de ambiente API_ALPESONE já está adicionada ao .env.example, logo, não é necessário nenhuma alteração no .env
- Suba os serviços com Docker
docker compose upFoi utilizado containers one-shot, responsáveis por realizarem uma tarefa específica e depois são encerrados automaticamente.
- Localmente Após subir os containers, acesse:
http://localhost/docs/api(Gerada com Scramble)
- Produção: https://alpesone.kontact.com.br/docs/api
🔑 Usuário padrão para login:
Email: [email protected]
Senha: carbel123⤵ Comando de sincronização
php artisan vehicle:sync🔗 Basta executar
php artisan test Este projeto utiliza GitHub Actions para automação de testes e deploy:
- Tests: A cada push, é executada uma pipeline que roda os testes unitários e de integração via PHPUnit, garantindo a integridade do código.
- Deploy to EC2: Também em cada push, a aplicação é implantada automaticamente em uma instância EC2. O workflow acessa o servidor via SSH, atualiza o código do repositório e executa docker compose up -d para aplicar as alterações.
Um pequeno overview geral do projeto e suas camadas
app/
├── Services
│ ├── AuthService.php
│ ├── LoadVehicleService.php
│ └── VehicleService.php
├── Repositories
│ ├── UserRepository.php
│ ├── VehicleRepository.php
│ └── ... (Implementações concretas)
├── Http/Controller/
│ ├── AuthController.php
│ └── VehicleController.php
├── Models/
│ ├── User.php
│ └── Vehicle.php
└── Console/Commands/
└── SyncExternalVehicles.php
tests/
├── Feature/
│ ├── AuthControllerTest.php
│ └── VehicleControllerTest.php
└── Unit/
├── AuthControllerTest.php
├── LoadVehicleServiceTest.php
└── AuthServiceTest.php
A aplicação roda em uma instância EC2 t2.micro (AWS), utilizando apenas Docker e Docker Compose, sem dependências adicionais no servidor.
Passo a passo básico:
- Acesse a instância via SSH, utilizando o IP público:
ssh -i sua-chave.pem [email protected]- Instale Docker e Docker Compose (se ainda não estiverem instalados).
- Clone o repositório:
git clone https://github.com/Casmei/sync-vehicles.git
cd sync-vehicles- Ajuste permissões do Laravel para evitar erros de escrita em storage e bootstrap/cache:
- Suba os containers:
docker compose up -d- Configuração de domínio:
O Cloudflare foi configurado para apontar para o IP da instância, tornando o acesso mais simples.
💡 Nota: Essa configuração de deploy foi feita de forma simples, apenas para disponibilizar rapidamente a aplicação. Não sei se é a forma mais recomendada, pois a parte de infraestrutura ainda é um tema que estou estudando e buscando melhorar.
O teste foi iniciado em um domingo, quando a API oficial de exportação ainda não estava disponível. Para não atrasar o desenvolvimento, criei uma API mock em Nest.js com rate limiting (Throttler), que serviu como fonte de dados temporária.
🔗 Repositório da API mock: (https://github.com/Casmei/vehicle-export)
🌐 Deploy da API mock: (https://vxport.kontact.com.br/vehicles/export)
Estou totalmente disponível para esclarecer qualquer dúvida sobre essa decisão ou sobre a implementação.
