tutoriais

FrankenPHP parte 2 - Usando o Caddyfile

No post anterior, vimos como subir uma aplicação usando o FrankenPHP sem nenhuma configuração, de modo simples e rápido. Nesse artigo, vamos evoluir um pouco mais e começar a explorar configurações com o Caddyfile e habilitar a funcionalidade de métricas para o prometheus.

#Criando o Caddyfile

na pasta raiz do projeto Laravel vamos criar um arquivo Caddyfile com o seguinte conteúdo:

{
	frankenphp
	metrics
    admin 0.0.0.0:2019
    log {
        output stdout
        format console
    }
}

localhost {
	root * /app/public/
	encode zstd br gzip
	php_server {
		try_files {path} index.php
	}
}

Nessa configuração, estamos deixando querendo:

  • Habilitar o módulo do frankenphp no caddy
  • Habilitar as métricas, que podem ser consultadas acessando localhost:2019/metrics
  • Permitir o acesso externo a métricas com a linha admin 0.0.0.0:2019
  • Configurar um log mais bonito
  • Definir as configurações pro host localhost, dizendo onde está o arquivo inicial do php, permitindo encode de zstd, br e gzip, e dizendo para usar o php_server passando as rotas pro index.php do public/

#Utilizando o Caddyfile

Agora temos uma outra mudança, vamos precisar trocar o comando frankenphp php-server por franken-php run. O comando php-server serve como um atalho para rodar o básico sem se preocupar com nenhuma configuração, mas como vamos começar a explorar as configurações disponíveis precisamos mudar para o comando run que lê um arquivo Caddyfile, que no caso vai estar no mesmo diretório em que o comando é executado na nossa imagem docker. No arquivo Dockerfile troque CMD ["frankenphp", "php-server", "-r", "public/"] por CMD ["frankenphp", "run"]. E também adicione as portas 443 pro https e a 2019 pro metrics no docker-compose.yaml.

#Testando tudo

Rode o comando docker compose up e acesse o localhost, deve aparecer algo com certificado suspeito no navegador, inclua na exceção. E para ver os dados de métricas, é só acessar localhost:2019/metrics e verá um texto com várias linhas sendo comentários e o padrão parâmetro e valor.

Deixei essas mudanças publicadas no repositório de exemplo na tag 1.0.1, pode ver clicando aqui.

Bons códigos e até a próxima!