Saat pertama kali mencoba FrankenPHP, penulis sangat terkesan dengan performanya. Ringan, cepat, modern, dan benar-benar membawa angin segar untuk ekosistem PHP. Namun penulis menemukan satu masalah, Docker image bawaan FrankenPHP tidak bisa langsung digunakan untuk Laravel.
Laravel membutuhkan beberapa ekstensi tambahan, penyesuaian direktori, dan optimasi tertentu agar berjalan dengan baik. Beberapa ekstensi penting seperti pdo_mysql, intl, hingga zip tidak tersedia secara default. Sehingga, saat mencoba menjalankan proyek Laravel, penulis diminta untuk memasang ekstensi PHP yang dibutuhkan.
Agar tidak terus membangun secara manual setiap kali memulai proyek baru, akhirnya penulis memutuskan membuat Docker image untuk FrankenPHP yang sudah siap pakai dan mendukung penuh Laravel. Berangkat dari tujuannya sederhana:
“Docker image yang cukup dibanguun sekali, dan proyek Laravel bisa langsung jalan tanpa konfigurasi tambahan.”
Dari situlah lahir image arifnd/frala, sebuah FrankenPHP image yang telah dikustomisasi, dioptimalkan, dan siap digunakan untuk Laravel versi 11+ maupun Laravel Octane.
Fitur Utama
Sudah terpasang Composer
Mendukung PHP
8.2,8.3,8.4, dan8.5Optimasi penuh untuk Laravel 11+
Dukungan lengkap untuk Laravel Octane
Performa tinggi karena menggunakan FrankenPHP berbasis Caddy
Sudah terpasang Ekstensi PHP wajib untuk Laravel:
intl
pcntl
pdo_mysql
pdo_pgsql
redis
zip
Image ini penulis buat agar Laravel bisa langsung berjalan tanpa patching, tanpa compile ulang, tanpa repot uji coba.
Cara Menggunakan
Menggunakan docker run
Install Dependensi Composer
Menggunakan image Composer:
docker run --rm -it -v $PWD:/app composer:latest install
Atau langsung melalui image ini:
docker run --rm -it -v $PWD:/app arifnd/frala composer install
Jika sudah memiliki Composer lokal:
composer install
Menjalankan Proyek
docker run -p 8000:80 \
-v $(pwd):/app \
arifnd/frala
Menggunakan Dockerfile
Contoh Dockerfile untuk Proyek Laravel
FROM arifnd/frala
ENV SERVER_NAME=:80
WORKDIR /app
COPY . .
RUN composer install \
--prefer-dist \
--no-progress \
--no-interaction \
--no-dev \
--optimize-autoloader \
&& php artisan optimize \
&& chown -R www-data:www-data /app \
&& chmod -R 755 /app/storage /app/bootstrap/cache
Lalu Build dan Jalankan Image
docker build -t my-laravel-app .
docker run -p 8000:80 my-laravel-app
Menggunakan docker compose
Contoh compose.yaml untuk Laravel
services:
app:
image: arifnd/frala
ports:
- "8000:80"
volumes:
- .:/app
environment:
- APP_ENV=local
- APP_DEBUG=true
- SERVER_NAME=:80
Menggunakan Laravel Octane
Jika ingin performa maksimal, bisa menjalankan Laravel menggunakan Octane dengan FrankenPHP:
services:
frankenphp:
image: arifnd/frala
entrypoint: php artisan octane:frankenphp --workers=1 --max-requests=1
ports:
- "8000:8000"
environment:
- APP_ENV=local
- APP_DEBUG=true
- SERVER_NAME=:80
volumes:
- .:/app
Dengan konfigurasi ini, Laravel berjalan cepat dan efisien, cocok untuk API atau aplikasi heavy load.
Dokumentasi lengkap untuk FrankenPHP via Docker.
Membangun Image Sendiri
Bagi yang ingin membuat versi kustom lainnya, berikut berkas Dockerfile dasar yang dipakai:
FROM dunglas/frankenphp
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
RUN install-php-extensions \
@composer \
intl \
pcntl \
pdo_mysql \
pdo_pgsql \
redis \
zip
Kesimpulan
Penulis membuat image ini karena Docker image bawaan FrankenPHP belum bisa langsung dipakai untuk Laravel, terutama bagi developer yang ingin proses cepat, minim konfigurasi, namun memiliki performa tinggi. Dengan image arifnd/frala, Anda bisa langsung menjalankan Laravel tanpa mengkhawatirkan ekstensi, permission, atau konfigurasi server. Jika Anda sedang membangun aplikasi Laravel modern, terlebih yang membutuhkan performa tinggi dengan Octane, image ini bisa menjadi alternatif untuk dicoba.