Ir para o conteúdo principal
Página inicial
Github

Caddy & FrankenPHP

Aprenda a configurar os servidores Caddy e FrankenPHP.

Configuring Caddy

Assim como os servidores web Apache e Nginx se integram ao PHP, o Caddy também se integra ao PHP utilizando o recurso de proxy reverso FastCGI. A ideia básica é que, quando o Caddy recebe uma solicitação que deve ser processada com PHP (por exemplo, uma requisição para um arquivo com a extensão .php), essa solicitação é enviada ao PHP-FPM — onde a aplicação PHP é executada — e a resposta é devolvida ao Caddy para ser entregue ao usuário. Em sua forma mais simples, o exemplo a seguir apresenta uma definição de site funcional no Caddy:

localhost { # Set the project root root ./ # Enable compression (optional) encode zstd br gzip # Configures multiple PHP-related settings php_fastcgi unix//run/php/php-fpm.sock # Remove Server: header header -Server # Redirect SAPI to errors.php handle_errors { rewrite /errors.php file_server } # Execute PHP files from the public/ directory and serve assets php_server { root ./ try_files public/{path} index.php } }

Para configurações sob demanda, o servidor pode ser controlado com o comando caddy:

Comando Serviço equivalente Descrição
caddy start systemctl start caddy Inicia o servidor
caddy stop systemctl stop caddy Para o servidor
caddy reload systemctl reload caddy Recarrega o servidor
caddy stop && caddy start systemctl restart caddy Reinicia o servidor

Configuring FrankenPHP

Crie um arquivo ./Caddyfile na raiz do projeto (caso ele ainda não exista) contendo:

# Domain name of server localhost { # Set the project root root ./ # Enable compression (optional) encode zstd br gzip # Remove Server: header header -Server # Redirect SAPI to errors.php handle_errors { rewrite /errors.php file_server } # Execute PHP files from the public/ directory and serve assets php_server { root ./ try_files public/{path} index.php } }

Adicione APP_SKIP_ENV_FILE=1 ao arquivo .env, pois o próprio FrankenPHP carregará o arquivo .env, ignorando o processamento do framework.

Na pasta do projeto, execute o comando para iniciar o servidor de aplicativos FrankenPHP:

frankenphp run

Também é possivel configurar o servidor para melhor otimização e configurar a diretivas do php diretamente no Caddyfile, como no exemplo:

{ frankenphp { php_ini memory_limit 256M php_ini max_execution_time 30 } } localhost { # Set the project root root ./ # Enable compression (optional) encode zstd br gzip # Remove Server: header header -Server # Redirect SAPI to errors.php handle_errors { rewrite /errors.php file_server } # Execute PHP files from the public/ directory and serve assets php_server { root ./ try_files public/{path} index.php } }

Você pode configurá-lo explicitamente usando a configuração global frankenphp { ... }:

{ frankenphp { # Define o número de threads PHP a serem iniciadas. Padrão: 2x o número de CPUs disponíveis. num_threads <num_threads> # Limita o número de threads PHP adicionais que podem ser iniciadas em tempo de execução. Padrão: num_threads. Pode ser definido como 'auto'. max_threads <num_threads> # Define o tempo máximo que uma requisição pode aguardar por uma thread PHP livre antes de expirar (timeout). Padrão: desativado. max_wait_time <duration> # Define o tempo máximo que uma thread de escalonamento automático (autoscaling) pode ficar ociosa antes de ser desativada. Padrão: 5s. max_idle_time <duration> # (experimental) Define o número máximo de requisições que uma thread PHP processará antes de ser reiniciada; útil para mitigar vazamentos de memória. Aplica-se tanto a threads regulares quanto a threads worker. Padrão: 0 (ilimitado). max_requests <num> # Define uma diretiva do php.ini. Pode ser usado várias vezes para definir múltiplas diretivas. php_ini <key> <value> worker { # Define o caminho para o script worker. file <path> # Define o número de threads PHP a serem iniciadas; o padrão é 2x o número de CPUs disponíveis. num <num> # Define uma variável de ambiente extra com o valor fornecido. Pode ser especificado mais de uma vez para múltiplas variáveis de ambiente. env <key> <value> # Define o caminho a ser monitorado quanto a alterações de arquivos. Pode ser especificado mais de uma vez para múltiplos caminhos. watch <path> # Define o nome do worker, utilizado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. name <name> # Define o número máximo de falhas consecutivas antes que o worker seja considerado inoperante (unhealthy); -1 significa que o worker sempre será reiniciado. Padrão: 6. max_consecutive_failures <num> } } }