Docker Compose FrankenPHP, MySQL, dan PhpMyAdmin: Panduan Lengkap untuk PHP Modern (Update 2026)
FrankenPHP menjadi salah satu web server PHP modern yang semakin populer karena menggabungkan PHP dan Caddy dalam satu aplikasi yang cepat, ringan, dan mudah dikonfigurasi. Dibandingkan kombinasi Nginx + PHP-FPM atau Apache + PHP, FrankenPHP menawarkan performa tinggi dengan konfigurasi yang lebih sederhana.
Pada artikel ini kita akan membuat lingkungan pengembangan menggunakan Docker Compose yang terdiri dari:
- FrankenPHP sebagai web server dan runtime PHP.
- MySQL sebagai database.
- PhpMyAdmin sebagai alat administrasi database.
Konfigurasi ini cocok digunakan untuk CodeIgniter 3, CodeIgniter 4, Laravel, Symfony, WordPress, maupun aplikasi PHP kustom.
Mengapa Menggunakan FrankenPHP?
FrankenPHP menawarkan beberapa keunggulan dibandingkan stack PHP tradisional:
- Performa tinggi berbasis Caddy.
- Mendukung HTTP/2 dan HTTP/3 secara bawaan.
- Mudah digunakan bersama Docker.
- Mendukung mode worker untuk performa lebih tinggi.
- Cocok untuk aplikasi PHP modern.
- Konfigurasi lebih sederhana dibandingkan Nginx + PHP-FPM.
Prasyarat
Sebelum memulai, pastikan sistem Anda telah memiliki:
- Docker Engine terbaru.
- Docker Compose V2.
- Git (opsional).
- Terminal Linux, macOS, atau Windows.
Pastikan instalasi berhasil dengan menjalankan:
docker --version
docker compose version
Struktur Direktori
Buat struktur proyek sebagai berikut:
project-folder/
│
├── docker-compose.yml
├── .env
│
├── app/
│ └── index.php
│
└── mysql/
Membuat File .env
Simpan konfigurasi database ke dalam file .env agar lebih aman dan mudah dikelola.
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=frankenphp_db
MYSQL_USER=frankenphp_user
MYSQL_PASSWORD=userpassword
File Docker Compose
Buat file docker-compose.yml berikut:
services:
frankenphp:
image: dunglas/frankenphp
container_name: frankenphp
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./app:/app/public
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:8.4
container_name: mysql
restart: unless-stopped
env_file:
- .env
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD","mysqladmin","ping","-h","localhost"]
interval: 10s
timeout: 5s
retries: 5
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8081:80"
environment:
PMA_HOST: mysql
depends_on:
mysql:
condition: service_healthy
volumes:
mysql_data:
Membuat File PHP
Untuk memastikan FrankenPHP berjalan dengan baik, buat file:
app/index.php
Isi dengan kode berikut:
<?php
phpinfo();
Menjalankan Docker Compose
Masuk ke direktori proyek lalu jalankan:
docker compose up -d
Docker akan mengunduh image yang diperlukan dan menjalankan seluruh container secara otomatis.
Memeriksa Status Container
Gunakan perintah berikut:
docker compose ps
Semua service seharusnya berada pada status running atau healthy.
Mengakses Layanan
FrankenPHP
Buka browser:
http://localhost:8080
Jika berhasil, halaman phpinfo() akan muncul.
PhpMyAdmin
Buka:
http://localhost:8081
Gunakan kredensial:
- Server: mysql
- Username: frankenphp_user
- Password: userpassword
Menghubungkan PHP ke MySQL
Di dalam container FrankenPHP, host database adalah nama service Docker yaitu:
mysql
Contoh koneksi PDO:
$pdo = new PDO(
"mysql:host=mysql;dbname=frankenphp_db",
"frankenphp_user",
"userpassword"
);
Menggunakan CodeIgniter 3 atau CodeIgniter 4
Jika Anda menggunakan CodeIgniter:
- Copy source code ke folder app.
- Atur konfigurasi database menggunakan host mysql.
- Pastikan ekstensi PHP yang dibutuhkan tersedia.
Contoh konfigurasi database:
hostname = mysql
database = frankenphp_db
username = frankenphp_user
password = userpassword
Menggunakan Laravel
Untuk Laravel, konfigurasi pada file .env:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=frankenphp_db
DB_USERNAME=frankenphp_user
DB_PASSWORD=userpassword
Melihat Log Container
Saat terjadi masalah, gunakan:
docker compose logs
docker compose logs frankenphp
docker compose logs mysql
Backup Database MySQL
Membuat backup:
docker exec mysql \
mysqldump -u root -p frankenphp_db > backup.sql
Restore database:
docker exec -i mysql \
mysql -u root -p frankenphp_db < backup.sql
Menghentikan Container
Untuk menghentikan seluruh layanan:
docker compose down
Untuk menghentikan sekaligus menghapus volume:
docker compose down -v
Troubleshooting Umum
Port 3306 Sudah Digunakan
Biasanya terjadi karena MySQL lokal sudah berjalan.
Solusi:
- Matikan MySQL lokal.
- Ubah port menjadi 3307:3306.
PhpMyAdmin Tidak Bisa Login
Pastikan:
- Container MySQL sehat (healthy).
- Password sesuai file .env.
- Database berhasil dibuat.
Container Restart Terus
Periksa log menggunakan:
docker compose logs
Biasanya disebabkan konfigurasi environment yang salah atau volume yang korup.
Kesimpulan
Docker Compose memudahkan pengelolaan lingkungan pengembangan PHP modern. Dengan menggabungkan FrankenPHP, MySQL, dan PhpMyAdmin dalam satu konfigurasi, Anda dapat membangun lingkungan pengembangan yang cepat, konsisten, dan mudah dipindahkan ke berbagai server.
Stack ini sangat cocok untuk pengembangan aplikasi CodeIgniter 3, CodeIgniter 4, Laravel, WordPress, maupun aplikasi PHP berskala besar yang membutuhkan kemudahan deployment menggunakan Docker.





Responses
No responses yet. Be the first to share your thoughts.