- PHP 앱을 별도 PHP-FPM 없이 띄우려는 배포 흐름에서, FrankenPHP는 Caddy에 공식 PHP 실행기를 내장한 Go 기반 앱 서버로 PHP 웹 앱과 CLI 스크립트를 한 명령으로 실행하게 함
- HTTP/1.1·HTTP/2·HTTP/3, 자동 HTTPS 인증서, Brotli/Zstandard/Gzip 압축, 구조화 로깅, Prometheus 메트릭을 기본 기능으로 묶어 서버 구성을 줄임
- Worker mode는 앱을 한 번 부팅해 메모리에 유지하며, API Platform 앱 자체 벤치마크에서 FPM보다 3.5배 빠른 결과를 냈다고 설명함
- PHP 8.2+, 대부분의 PHP 확장, Caddy 모듈과 호환되고 OPcache·XDebug 같은 인기 확장도 네이티브로 지원함
- Docker 이미지, Kubernetes, 클라우드 플랫폼, 독립 실행형 정적 바이너리 배포를 지원해 PHP 앱 배포 단위를 단순하게 만들 수 있음
실행 방식과 기본 사용 흐름
- FrankenPHP는 Go로 작성된 현대적인 PHP 앱 서버를 지향하며, PHP 앱 서버 설치와 실행을 한 명령 중심으로 구성함
- 설치 예시는 운영체제별로 나뉨
- Linux/macOS:
curl https://frankenphp.dev/install.sh | sh - Windows PowerShell:
irm https://frankenphp.dev/install.ps1 | iex
- Linux/macOS:
- 로컬 실행은 웹 서버와 CLI 양쪽을 모두 다룸
frankenphp php-server -r public/:public/디렉터리 서빙frankenphp php-cli script.php: 명령줄 PHP 스크립트 실행
- Docker 실행도 같은 이미지로 처리함
dunglas/frankenphp이미지로public/디렉터리를 서빙- 같은 이미지에서
php script.php같은 CLI 스크립트 실행 가능
- 설정은 Caddy 기반이며, 예시 구성은
localhost블록 안에서 압축을 켜고php_server로 현재 디렉터리의 PHP 파일과 정적 자산을 처리함
서버 기능과 PHP 호환성
-
웹 서버 기능
- 공식 PHP 실행기를 Caddy에 내장함
- HTTP/1.1, HTTP/2, HTTP/3를 네이티브 지원함
- Let’s Encrypt 또는 ZeroSSL을 통한 HTTPS 인증서 생성·갱신·폐기를 자동화함
- Brotli, Zstandard, Gzip 압축을 기본 지원함
- 구조화 로깅과 Prometheus 지원을 포함함
-
PHP 실행 환경
- PHP 8.2+, 대부분의 PHP 확장, 모든 Caddy 모듈과 호환됨
- OPcache와 XDebug를 포함한 인기 PHP 확장을 네이티브로 지원함
- PHP-FPM이 필요 없고, Go 웹 서버용으로 만든 자체 SAPI를 사용함
Worker mode와 성능 지향 기능
- Worker mode는 애플리케이션을 한 번 부팅한 뒤 메모리에 유지해, 요청을 몇 밀리초 안에 처리할 준비 상태로 둠
- Symfony, API Platform, Laravel에서 네이티브로 지원됨
- PSR-7 없이 기존 PHP 슈퍼글로벌을 사용함
- 앱이 Worker mode와 호환되지 않아도 그대로 서빙할 수 있음
- 코드 변경 시 워커를 자동 재시작하는 watcher를 제공함
- API Platform 앱 기준 자체 벤치마크에서 FPM보다 3.5배 빠른 성능을 보였다고 소개함
배포와 패키징
- Docker 이미지로 클라우드 네이티브 앱을 배포할 수 있음
- Kubernetes와 현대적 클라우드 플랫폼과 호환됨
- PHP 웹 애플리케이션과 명령줄 도구를 독립 실행형 정적 바이너리로 패키징할 수 있음
- 하나의 서비스와 하나의 바이너리로 실행되며 외부 서비스가 필요 없다고 설명함
추가 웹 플랫폼 기능
- 103 Early Hints를 지원하며, Cloudflare 글을 근거로 웹사이트 로드 시간을 30% 개선할 수 있는 기능으로 소개함
- 내장 Mercure 허브를 통해 PHP 앱에서 연결된 브라우저로 이벤트를 보내고, 브라우저가 JavaScript 이벤트로 페이로드를 즉시 받을 수 있음
- Graceful reload로 무중단 배포를 지원함