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>
}
}
}