Production-ready FrankenPHP: custom Caddy build, 51 PHP extensions, Composer, WP-CLI, Node.js
4.0K
Published by easydigital · GitHub
Enterprise-ready FrankenPHP images with a custom Caddy build, 51 PHP extensions, and production tooling. Same image as morsalin1342/frankenphp — published here for organizational use.
| Feature | Official image | This image |
|---|---|---|
| Caddy modules | Minimal | ✅ 16 — WAF, rate limiting, Brotli, Souin, 6 DNS |
| Web application firewall | ❌ | ✅ OWASP Coraza, Core Rule Set compiled in |
| PHP extensions | Few built in | ✅ 51 pre-installed |
| Composer / WP-CLI | ❌ | ✅ Both |
| Node.js | ❌ | ✅ v24, configurable |
| MariaDB client | ❌ | ✅ mariadb tools, also as mysql, mysqldump |
| Debian release | One | ✅ trixie (Debian 13) |
The full list of extensions, Caddy modules and tools, with versions and known issues, is in EXTENSIONS.md.
morsalin1342/frankenphp# production.yml
services:
app:
image: easydigital/frankenphp:8.4-trixie
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./public:/app
- ./Caddyfile:/etc/caddy/Caddyfile
- app_data:/data
environment:
SERVER_NAME: example.com
volumes:
app_data:
example.com {
root * /app/public
encode zstd gzip
php_server
file_server
header Strict-Transport-Security "max-age=63072000"
}
8.5, 8.5-trixie, 8.4, 8.4-trixie, 8.3, 8.3-trixie, 8.2, 8.2-trixie, latest → 8.5
Only trixie is built; -trixie tags are aliases of the unsuffixed ones. Old -bookworm tags are no longer updated.
Q: Can I add extensions?
A: Yes — RUN install-php-extensions <name> in a layer on top; the installer is already in the image.
Q: How do I run queue workers?
A: Run them as separate containers from the same image with their own command; supervisor and cron are not included.
Q: Is there a bookworm image?
A: No. Only trixie is built now. Older -bookworm tags stay on Docker Hub but are no longer updated.
| Image / Tool | Description |
|---|---|
| easydigital/caddy | Standalone Caddy with WAF, rate limiting & caching |
| easydigital/php | Traditional PHP-FPM & CLI images |
| easydigital/nginx | nginx with ModSecurity 3, Brotli, zstd & GeoIP2 |
| easydigital/apache | Apache as a static server or php-fpm application server, no PHP inside |
| morsalin1342/frankenphp | Same image, personal namespace |
⭐ If this image helps you, consider giving it a star on GitHub!
Content type
Image
Digest
sha256:fd2f14629…
Size
559.4 MB
Last updated
3 days ago
docker pull easydigital/frankenphp