A portable request lifecycle.
PHP-FPM hosting and locally exercised, bounded worker adapters.
PHP-FPM / cPanel
The live site runs on PHP 8.4 behind Apache/PHP-FPM. Only index.php, static assets and the sanitized source download are public. Application releases and storage live outside the document root. The deployment uses an atomic current symlink and retains the previous release for rollback. TLS is issued through hosting AutoSSL.
FrankenPHP
docker build -f deploy/Dockerfile -t icom-framework .
docker run --rm -p 8080:8080 --env-file .env \
-v icom-storage:/app/storage icom-frameworkWorker behavior
deploy/frankenphp-worker.php boots once, creates a new request scope per request and exits after MAX_REQUESTS (default 500). Global/static state and arbitrary external services remain the application author’s responsibility. FrankenPHP and Swoole are not installed on this cPanel host. Local runtime concurrency and account-isolation results are recorded in the release status chapter. Production worker rollouts, long-duration soak tests and connection-recovery exercises remain unverified.
Swoole
# Requires the Swoole extension on a separately managed server.
php deploy/swoole.phpCloud deployment
deploy/kubernetes.yaml includes readiness/liveness probes, resource limits and security context. Supply an application key through a Kubernetes Secret. The example uses one replica because default SQLite data and file cache/rate limiting are node-local. For scale-out, use a tested shared SQL service plus Redis or a gateway and coordinate migrations separately. Redis alone does not make SQLite a cluster database. The container and Kubernetes examples must be exercised in your own runtime before rollout.
Health and readiness
GET /health # liveness; no sensitive diagnostics
GET /ready # SQL + migration status + cache roundtrip + required storage
GET /api/status # preview version and SAPI