Proyek ini telah dimodifikasi untuk menggunakan FrankenPHP sebagai pengganti Apache untuk performa yang lebih optimal.
- ⚡ FrankenPHP - Modern PHP application server
- 🐳 Docker Compose - Container orchestration
- 🗄️ MySQL 8 - Database server
- 🔴 Redis - Caching & session storage
- 👷 Supervisor - Process management
- 🔄 Laravel Reverb - Real-time WebSocket
- 🎨 Inertia.js + Vue 3 - Modern SPA experience
- 🎯 Vite - Lightning fast build tool
- 🎨 Tailwind CSS - Utility-first CSS framework
- 🛠️ Filament 3 - Modern admin panel
- 📊 phpMyAdmin - Database management
- 🔄 Hot Reload - Development friendly
- 🛡️ Security Headers - Built-in security
- Docker & Docker Compose V2 (gunakan
docker compose
bukandocker-compose
) - Git
💡 Note: Docker Compose V2 sudah jadi plugin resmi Docker. Command
docker-compose
sudah deprecated.
-
Clone & Navigate
git clone <repository-url> cd laravel-docker-main
-
Build & Run
docker compose up --build
-
Access Applications
- Laravel App: http://localhost:8000
- Filament Admin: http://localhost:8000/admin
- Vite Dev Server: http://localhost:5173
- phpMyAdmin: http://localhost:8001
- WebSocket (Reverb): ws://localhost:8080
- Redis: localhost:6379
- Base Image:
dunglas/frankenphp:latest-php8.4
- Laravel Version: 11.x (LTS)
- Worker Mode: Enabled untuk performa optimal
- HTTP/2 & HTTP/3: Ready
- Host: mysql (internal)
- Port: 3307 (external)
- Database: laravel_db
- Username: laravel
- Password: secret
- Host: redis (internal)
- Port: 6379
- Used for: Cache, Sessions, Queues
- Host: 0.0.0.0
- Port: 8080
- App ID: laravel-app
- Scheme: http
- URL: http://localhost:8000/admin
- Version: 3.x (Latest)
- Auto-installed: Yes
- Default User: Create via
php artisan make:filament-user
laravel-docker-main/
├── docker-compose.yml # Container orchestration
├── docker/
│ ├── php/
│ │ ├── Dockerfile # FrankenPHP container
│ │ ├── Caddyfile # FrankenPHP configuration
│ │ ├── init.sh # Startup script
│ │ ├── setup-inertia.sh # Inertia.js setup script
│ │ └── apache.conf # Legacy (tidak digunakan)
│ ├── supervisor/
│ │ ├── Dockerfile # Supervisor container
│ │ ├── supervisord.conf # Supervisor configuration
│ │ └── start-supervisor.sh # Supervisor startup script
│ └── node/
│ └── Dockerfile # Node.js + Vite container
├── laravel_app/ # Laravel application (auto-created)
│ ├── resources/js/ # Vue.js components & pages
│ ├── resources/css/ # Tailwind CSS styles
│ ├── package.json # Node.js dependencies
│ ├── vite.config.js # Vite configuration
│ └── tailwind.config.js # Tailwind configuration
├── mysql_data/ # Database persistence
├── redis_data/ # Redis persistence
└── README.md # Documentation
-
Performance Superior
- FrankenPHP dengan HTTP/2 & HTTP/3
- Redis caching untuk response cepat
- Worker mode untuk request handling
- Memory usage lebih efisien
-
Real-time Capabilities
- Laravel Reverb untuk WebSocket
- Queue processing dengan Supervisor
- Background job management
- Live notifications & updates
-
Development Experience
- Hot reload otomatis
- Better error handling
- Integrated development server
- Process monitoring
-
Production Ready
- Security headers built-in
- Optimized for Laravel
- Scalable architecture
- Fault-tolerant services
Separation of Concerns:
- 🐘 PHP Container: FrankenPHP + Laravel + Redis extension
- 🟢 Node Container: Pure Node.js + Vite untuk frontend
- 👷 Supervisor Container: Process management + background jobs
- 🗄️ MySQL Container: Database server
- 🔴 Redis Container: Caching & session storage
Keuntungan Multi-Container:
- ⚡ Faster builds - hanya rebuild service yang berubah
- 🔧 Easier maintenance - isolasi dependencies
- 📦 Smaller images - tidak ada bloat dependencies
- 🚀 Better scaling - bisa scale service terpisah
- 🛡️ Security - isolasi process dan network
- 🔄 Independent updates - update service tanpa affect yang lain
Alternative Single Dockerfile:
- ✅ Lebih simple untuk development kecil
- ❌ Image besar (PHP + Node.js + Supervisor)
- ❌ Rebuild semua saat ada perubahan kecil
- ❌ Sulit untuk production scaling
# Build ulang semua container
docker compose build --no-cache
# Lihat logs semua services
docker compose logs -f
# Lihat logs specific service
docker compose logs -f app
docker compose logs -f supervisor
docker compose logs -f node
docker compose logs -f redis
# Masuk ke container
docker compose exec app bash
docker compose exec supervisor bash
docker compose exec node sh
# Monitor queue workers
docker compose exec supervisor supervisorctl status
# Restart queue workers
docker compose exec supervisor supervisorctl restart laravel-worker:*
# Test Redis connection
docker compose exec redis redis-cli ping
# Frontend development commands
docker compose exec node npm run dev
docker compose exec node npm run build
docker compose exec node npm install
# Filament admin commands
docker compose exec app php artisan make:filament-user
docker compose exec app php artisan filament:make-resource
docker compose exec app php artisan filament:make-page
# Stop semua services
docker compose down
# Reset semua data
docker compose down -v
# Cek port yang digunakan
netstat -tulpn | grep :8000
# Ubah port di docker-compose.yml
ports:
- "8080:80" # Ganti 8000 ke 8080
# Lihat logs detail
docker compose logs app
# Rebuild dari scratch
docker compose down
docker compose build --no-cache
docker compose up
Happy Coding! 🎉