Halo developer Fedora! 👋 Di tutorial sebelumnya, kamu sudah bisa jalanin PHP 8.4 + Apache pakai Podman. Sekarang, saatnya naik level:
💡 Jalankan PHP dan MySQL dalam dua container terpisah — tapi tetap jalan bareng!
Caranya? Pakai Podman Compose — pengganti docker-compose yang 100% kompatibel, tapi jalan native di Fedora tanpa root dan tanpa daemon!
Mari kita bangun lingkungan development PHP + MySQL yang bersih, aman, dan siap production.
Prasyarat
Sistem operasi: Fedora (36+)
Tools terinstall:
podman,podman-composePHP project sederhana (misal: Laravel, CodeIgniter, atau kustom)
Jika belum punya podman-compose:
sudo dnf install -y podman-compose✅
podman-composeadalah drop-in replacement untukdocker-compose— syntax YAML-nya sama persis!
📁 Struktur Proyek Akhir
my-php-app/
├── docker-compose.yml ← konfigurasi multi-container
├── Dockerfile ← build image PHP sendiri
├── src/ ← kode PHP kamu
└── .env ← (opsional) konfigurasi database
1. Buat Dockerfile (sama seperti sebelumnya)
FROM php:8.4-apache
RUN a2enmod rewrite
RUN docker-php-ext-install mysqli pdo pdo_mysql
COPY src/ /var/www/html/
RUN chown -R www-data:www-data /var/www/htmlTidak ada perubahan! Podman tetap bisa baca ini.
2. Buat docker-compose.yml
Buat file docker-compose.yml di root proyek:
version'3.8'
services
app
build.
ports
"8080:80"
volumes
./src:/var/www/html:Z
depends_on
db
networks
appnet
db
imagemysql8.0
environment
MYSQL_ROOT_PASSWORDrootpass
MYSQL_DATABASEmyapp
MYSQL_USERuser
MYSQL_PASSWORDpass123
ports
"3306:3306"
volumes
dbdata:/var/lib/mysql:Z
networks
appnet
volumes
dbdata
networks
appnet
driverbridgePenjelasan Penting:
:Z→ wajib di Fedora karena SELinux. Ini memberi label keamanan pada volume.depends_on→ pastikan MySQL jalan dulu sebelum PHP app.volumes→ data MySQL tetap aman meski container dihapus.Port
3306dibuka → biar kamu bisa akses DB lewat DBeaver/MySQL Workbench.
3. Update Kode PHP untuk Coba Koneksi ke MySQL
Edit src/index.php:
<?php
echo "<h1>✅ PHP + MySQL di Podman Compose!</h1>";
try {
$pdo = new PDO(
'mysql:host=db;dbname=myapp',
'user',
'pass123',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo "<p style='color:green;'>🟢 Berhasil terhubung ke MySQL!</p>";
echo "<p>Host: db (nama service di compose)</p>";
} catch (Exception $e) {
echo "<p style='color:red;'>🔴 Gagal: " . $e->getMessage() . "</p>";
}⚠️ Perhatikan: host-nya
db, bukanlocalhost! Karenadbadalah nama service didocker-compose.yml.
4. Jalankan Semua dengan Podman Compose
Dari folder proyek, jalankan:
podman-compose up -dTunggu beberapa detik. Podman akan:
Build image PHP dari
DockerfileDownload image
mysql:8.0Buat jaringan & volume otomatis
Jalankan kedua container
5. Akses Aplikasi
Buka browser: 👉
Jika muncul "Berhasil terhubung ke MySQL!" — selamat! Kamu baru saja menjalankan stack PHP + MySQL multi-container di Fedora tanpa Docker dan tanpa root!
Perintah Harian yang Berguna
| Aksi | Perintah |
|---|---|
| Lihat log | podman-compose logs -f |
| Hentikan semua | podman-compose down |
| Hapus volume (hapus data DB) | podman-compose down -v |
| Build ulang setelah ubah Dockerfile | podman-compose build |
Keamanan Tambahan (Fedora + SELinux)
Tanda
:Zdi volume wajib — agar Podman bisa baca/tulis file di bawah SELinux.Tidak perlu
sudo— Podman jalan sebagai user biasa.Isolasi sempurna: PHP dan MySQL di container terpisah.
Tips Pro
Untuk Laravel/CI: cukup ubah
.env:DB_HOST=db
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=user
DB_PASSWORD=pass123Jika ingin MySQL tidak expose port 3306 ke host (lebih aman), hapus baris
portsdi servicedb. PHP tetap bisa akses via jaringan internal.
Penutup
Dengan Podman Compose, kamu dapat: ✅ Lingkungan development yang mirip production ✅ Isolasi sempurna antara app & database ✅ Workflow cepat, aman, dan native di Fedora
Dan yang terpenting: tidak perlu Docker sama sekali!
