Primeiros Passos
O Leakless é distribuído em dois pacotes complementares:
themattosdev/leakless(Pacote de Runtime): O motor de produção leve e com zero dependências externas para monitoramento de workers, proteção de transações PDO e restauração de estado.themattosdev/leakless-dev(Pacote de Desenvolvimento): Ferramentas de desenvolvimento contendo o CLI de análise estática (vendor/bin/leakless analyze), asserções customizadas para o Pest, macros de teste do Laravel e regras de AST do PHPStan.
Instalação
Instale o pacote de runtime nas suas dependências de produção:
bash
composer require themattosdev/leaklessInstale as ferramentas de desenvolvimento nas dependências de desenvolvimento:
bash
composer require --dev themattosdev/leakless-devRequisitos do Sistema
- Versão do PHP:
^8.2ou superior - Extensões:
ext-posixeext-pcntl(padrão em imagens Linux e Docker do FrankenPHP) - Runtimes Suportados:
- FrankenPHP Worker Mode (
frankenphp_handle_request) - Laravel Octane (via driver FrankenPHP; drivers para RoadRunner e Swoole planejados no roadmap)
- Loops de eventos persistentes customizados
- FrankenPHP Worker Mode (
Configuração Rápida por Ambiente
Laravel Octane
Se você utiliza o Laravel Octane, o Leakless não requer nenhuma alteração de código:
- Instale o pacote via Composer.
- O Leakless registra automaticamente o
LeaklessServiceProvidere intercepta os eventosRequestReceivedeRequestTerminateddo Octane. - Configure os limites no seu arquivo
.env:
ini
LEAKLESS_ENABLED=true
LEAKLESS_MAX_RSS_MB=256
LEAKLESS_MAX_REQUESTS=1000
LEAKLESS_CHECK_TRANSACTIONS=true
LEAKLESS_LOG_VIOLATIONS=trueConsulte o Guia do Laravel Octane para configurações avançadas.
PHP Vanilla & FrankenPHP Worker Mode
Para scripts de workers persistentes personalizados, envolva seu handler de requisição com o FrankenPhp::run():
php
<?php
declare(strict_types=1);
use TheMattos\Leakless\Config;
use TheMattos\Leakless\Integrations\FrankenPhp\FrankenPhp;
require_once __DIR__ . '/vendor/autoload.php';
$config = new Config(
maxRssMb: 256,
maxRequests: 1000,
checkTransactions: true,
logViolations: true,
);
FrankenPhp::run(function () {
// Processamento da requisição HTTP
echo json_encode(['status' => 'sucesso', 'timestamp' => microtime(true)]);
}, $config);Consulte o Guia de FrankenPHP Vanilla para detalhes de integração em loops manuais.
Próximos Passos
- Aprenda como Migrar do PHP-FPM sem risco de downtime.
- Entenda como funciona a Memória Real do Kernel (RSS) no Linux.
- Conheça as Regras de AST do PHPStan para análise estática.
- Execute análises estáticas no seu CI/CD com o CLI do Leakless.