Skip to content

aslamProject18/laravel-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Laravel Docker dengan FrankenPHP 🚀

Proyek ini telah dimodifikasi untuk menggunakan FrankenPHP sebagai pengganti Apache untuk performa yang lebih optimal.

🎯 Fitur Utama

  • 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

📋 Prerequisites

  • Docker & Docker Compose V2 (gunakan docker compose bukan docker-compose)
  • Git

💡 Note: Docker Compose V2 sudah jadi plugin resmi Docker. Command docker-compose sudah deprecated.

⚡ Quick Start

  1. Clone & Navigate

    git clone <repository-url>
    cd laravel-docker-main
  2. Build & Run

    docker compose up --build
  3. Access Applications

🔧 Konfigurasi

FrankenPHP Settings

  • Base Image: dunglas/frankenphp:latest-php8.4
  • Laravel Version: 11.x (LTS)
  • Worker Mode: Enabled untuk performa optimal
  • HTTP/2 & HTTP/3: Ready

Database Settings

  • Host: mysql (internal)
  • Port: 3307 (external)
  • Database: laravel_db
  • Username: laravel
  • Password: secret

Redis Settings

  • Host: redis (internal)
  • Port: 6379
  • Used for: Cache, Sessions, Queues

Reverb WebSocket Settings

  • Host: 0.0.0.0
  • Port: 8080
  • App ID: laravel-app
  • Scheme: http

Filament Admin Panel

📁 Struktur Project

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

🚀 Keuntungan Stack Ini

  1. Performance Superior

    • FrankenPHP dengan HTTP/2 & HTTP/3
    • Redis caching untuk response cepat
    • Worker mode untuk request handling
    • Memory usage lebih efisien
  2. Real-time Capabilities

    • Laravel Reverb untuk WebSocket
    • Queue processing dengan Supervisor
    • Background job management
    • Live notifications & updates
  3. Development Experience

    • Hot reload otomatis
    • Better error handling
    • Integrated development server
    • Process monitoring
  4. Production Ready

    • Security headers built-in
    • Optimized for Laravel
    • Scalable architecture
    • Fault-tolerant services

🏗️ Arsitektur Multi-Container

🤔 Mengapa Tidak 1 Dockerfile?

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

🛠️ Development Commands

# 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

🔍 Troubleshooting

Port sudah digunakan

# Cek port yang digunakan
netstat -tulpn | grep :8000

# Ubah port di docker-compose.yml
ports:
  - "8080:80"  # Ganti 8000 ke 8080

Container tidak start

# Lihat logs detail
docker compose logs app

# Rebuild dari scratch
docker compose down
docker compose build --no-cache
docker compose up

📚 Referensi


Happy Coding! 🎉

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published