Um skeleton (template) de projeto PHP moderno usando Symfony 7.3 com Docker, ferramentas de qualidade de código e ambiente de desenvolvimento completo.
Este projeto é um template base para desenvolvimento de aplicações web usando Symfony Framework. Inclui configuração completa de ambiente de desenvolvimento com Docker, ferramentas de análise de código, testes automatizados e estrutura organizacional otimizada.
- PHP 8.2+ - Linguagem principal
- Symfony 7.3 - Framework web
- MySQL 8.0 - Banco de dados
- Redis - Cache e filas
- Nginx - Servidor web
- Docker & Docker Compose - Containerização
- Doctrine ORM - Mapeamento objeto-relacional
- Twig - Template engine
- Symfony Security - Autenticação e autorização
- Symfony Mailer - Envio de emails
- Symfony Messenger - Sistema de filas
- Monolog - Sistema de logs
- PHPUnit - Testes unitários
- PHPStan - Análise estática de código
- PHP-CS-Fixer - Formatação de código
- PHPMD - Detector de bagunça de código
- Doctrine Fixtures - Dados de teste
- Symfony Web Profiler - Debug e profiling
- Docker e Docker Compose
- Make (opcional, mas recomendado)
- Git
git clone <repository-url>
cd skeleton# Instala arquivo de ambiente e hooks do git
make setupEste comando irá:
- Copiar
.env.distpara.env - Instalar hooks do git para pre-commit
- Subir os containers Docker
- Instalar dependências do Composer
- Executar migrações do banco
- Configurar permissões
- Adicionar entrada no
/etc/hosts
Após a instalação, a aplicação estará disponível em:
- Web: http://skeleton.test:8080 ou http://localhost:8080
- MySQL: localhost:3310
- Redis: localhost:6379
O projeto utiliza os seguintes serviços Docker:
- Container principal da aplicação PHP-FPM
- Base: PHP 8.2-FPM com extensões necessárias
- Container para processamento de filas/workers
- Executa jobs assíncronos via Symfony Messenger
- Servidor web
- Proxy reverso para a aplicação PHP
- Banco de dados MySQL 8.0
- Dados persistidos em volume Docker
- Cache e sistema de filas
- Usado pelo Symfony Lock e Messenger
skeleton/
├── src/
│ ├── App/ # Código da aplicação principal
│ └── Skeleton/ # Módulos/domínios específicos
├── config/ # Configurações do Symfony
├── templates/ # Templates Twig
├── tests/ # Testes automatizados
├── migrations/ # Migrações do banco de dados
├── public/ # Assets públicos
├── devops/ # Configurações Docker
├── bin/ # Scripts executáveis
└── cli/ # Scripts CLI customizados
make setup # Configuração inicial completa
make up # Iniciar ambiente de desenvolvimento
make docker-up # Apenas subir containers
make composer-install # Instalar dependências PHP
make fix-permissions # Corrigir permissões de arquivosmake migrate # Executar migrações
make doctrine-diff # Gerar migração baseada em mudanças nas entidades
make empty-migration # Criar migração vazia
make migrations-check # Verificar status das migraçõesmake check # Executar todas as verificações
make phpstan # Análise estática com PHPStan
make phpmd # Detecção de problemas com PHPMD
make php-cs-fixer # Corrigir formatação do código
make php-cs-fixer-check # Verificar formatação sem corrigir
make auto-fix # Corrigir problemas automaticamentemake tests # Executar todos os testesO projeto inclui vários scripts personalizados na pasta cli/:
cli/console- Wrapper para comandos Symfonycli/composer- Wrapper para Composercli/tests- Executar testescli/phpstan- Análise estáticacli/phpmd- Detector de problemascli/php-cs-fixer- Formatação de códigocli/run-at-container- Executar comandos dentro do container
O projeto inclui um hook de pre-commit que executa:
- Verificação de sintaxe PHP
- PHPStan (análise estática)
- PHPMD (detecção de problemas)
- PHP-CS-Fixer (formatação)
- phpstan.neon - Configuração do PHPStan
- phpmd.xml - Regras do PHPMD
- phpunit.dist.xml - Configuração dos testes
- .php-cs-fixer.dist.php - Regras de formatação
As principais variáveis estão no arquivo .env:
APP_ENV=dev # Ambiente (dev/prod)
APP_SECRET=<secret> # Chave secreta do Symfony
APP_DOMAIN=skeleton.test # Domínio da aplicação
APP_PORT=8080 # Porta da aplicação
DATABASE_URL=mysql://... # URL do banco de dados
REDIS_URL=redis://redis # URL do Redis
MAILER_DSN=null://null # Configuração do mailer# Iniciar workers supervisor (executar como root)
make start-crons- Configurar
APP_ENV=prod - Definir
APP_SECRETseguro - Configurar
MAILER_DSNapropriado - Configurar volumes persistentes para uploads
- Configurar backup do banco de dados
- Configurar monitoramento e logs
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
- Seguir PSR-12 para formatação
- Utilizar PHPStan nível máximo
- Manter cobertura de testes
- Documentar classes e métodos públicos
Erro de permissões:
make fix-permissionsContainers não sobem:
docker compose down
docker compose up -d --remove-orphansBanco de dados não conecta:
- Verificar se o MySQL está healthy:
docker compose ps - Verificar logs:
docker compose logs mysql
Site não carrega:
- Verificar se foi adicionado ao
/etc/hosts:127.0.0.1 skeleton.test - Verificar se a porta 8080 está livre
# Ver logs dos containers
docker compose logs -f
# Executar bash no container da aplicação
docker compose exec app bash
# Ver status dos serviços
docker compose ps
# Limpar cache do Symfony
cli/console cache:clear