Skip to content

Repository ini dibuat untuk keperluan Praktikum POPL dengan fokus pada implementasi Laravel menggunakan Docker. Tujuannya adalah mempermudah proses setup lingkungan pengembangan (development environment) agar lebih konsisten, portabel, dan mudah dijalankan di berbagai platform tanpa perlu konfigurasi manual yang rumit.

Notifications You must be signed in to change notification settings

Hidayattt24/Laravel-docker

Repository files navigation

Tutorial Docker untuk Laravel

Tutorial ini akan memandu Anda dalam menggunakan Docker untuk menjalankan aplikasi Laravel menggunakan Docker Desktop.

Prerequisites

Pastikan Anda sudah menginstall:

Struktur Project

Project ini adalah aplikasi Laravel standar dengan penambahan konfigurasi Docker:

  • dockerfile - Konfigurasi untuk membuat Docker image
  • .dockerignore - File untuk mengecualikan file/folder yang tidak diperlukan saat build
  • README.md - Dokumentasi ini

Penjelasan Dockerfile

Dockerfile ini dirancang khusus untuk aplikasi Laravel dengan konfigurasi berikut:

Base Image

FROM php:8.2-apache
  • Menggunakan PHP versi 8.2 dengan web server Apache
  • Image ini sudah include PHP dan Apache yang siap pakai

System Dependencies

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    nodejs \
    npm
  • Install paket-paket yang diperlukan Laravel
  • Termasuk Node.js dan NPM untuk asset compilation

PHP Extensions

RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
  • Install ekstensi PHP yang dibutuhkan Laravel:
    • pdo_mysql: Untuk koneksi database MySQL
    • mbstring: Untuk manipulasi string multibyte
    • exif: Untuk membaca metadata gambar
    • pcntl: Untuk process control
    • bcmath: Untuk operasi matematika presisi tinggi
    • gd: Untuk manipulasi gambar

Composer

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
  • Menginstall Composer untuk dependency management PHP

Working Directory & File Copy

WORKDIR /var/www
COPY . /var/www
COPY --chown=www-data:www-data . /var/www
  • Set direktori kerja ke /var/www
  • Copy semua file project ke container
  • Set ownership ke user www-data (user Apache)

Dependencies Installation

RUN composer install --optimize-autoloader --no-dev
RUN npm install && npm run build
  • Install dependencies PHP melalui Composer
  • Install dan build asset frontend dengan NPM

Apache Configuration

RUN a2enmod rewrite
  • Enable Apache rewrite module untuk URL rewriting Laravel

Virtual Host Setup

  • Konfigurasi Apache untuk mengarahkan document root ke folder public
  • Enable .htaccess dengan AllowOverride All

Permissions

RUN chown -R www-data:www-data /var/www \
    && chmod -R 755 /var/www/storage \
    && chmod -R 755 /var/www/bootstrap/cache
  • Set permission yang tepat untuk folder storage dan cache

Penjelasan .dockerignore

File .dockerignore berfungsi untuk mengecualikan file dan folder yang tidak diperlukan saat proses build Docker image. Ini akan mempercepat proses build dan mengurangi ukuran image.

File/Folder yang Diabaikan:

Development Dependencies

node_modules/          # Dependencies Node.js (akan diinstall ulang)
/vendor/              # Dependencies Composer (akan diinstall ulang)

Environment & Configuration Files

.env                  # File environment (security)
.env.*               # Semua variant file environment
.vscode/             # VS Code settings
.idea/               # PhpStorm/IntelliJ settings

Build Artifacts & Cache

/storage/app/*        # File upload user
/storage/framework/*  # Cache Laravel
/bootstrap/cache/*    # Bootstrap cache
/public/build/        # Compiled assets

Git & Documentation

.git/                # Git repository data
README.md            # Documentation (tidak diperlukan di production)
docs/                # Documentation folder

Log & Database Files

*.log                # Log files
*.sqlite             # SQLite database files

Keuntungan Menggunakan .dockerignore:

  1. πŸš€ Build Lebih Cepat: Mengurangi file yang di-copy ke Docker context
  2. πŸ“¦ Image Lebih Kecil: Hanya include file yang benar-benar diperlukan
  3. πŸ”’ Keamanan: Mencegah file sensitif (.env) masuk ke image
  4. πŸ’Ύ Efisiensi: Mengurangi penggunaan disk space dan bandwidth

Cara Menggunakan

1. Download Base Images (Penting!)

Sebelum build Docker image, kita perlu download base images terlebih dahulu untuk menghindari timeout error:

docker pull php:8.2-apache
docker pull composer:latest

Penjelasan:

  • docker pull: Command untuk download image dari Docker Hub
  • php:8.2-apache: Base image PHP 8.2 dengan Apache web server
  • composer:latest: Image Composer untuk dependency management PHP

Mengapa perlu pull terlebih dahulu?

  • βœ… Menghindari timeout error saat build
  • βœ… Memastikan koneksi ke Docker registry stabil
  • βœ… Download sekali pakai, bisa digunakan untuk build berkali-kali
  • βœ… Mempercepat proses build selanjutnya

2. Build Docker Image

Setelah base images berhasil di-download, baru jalankan build:

docker build -t tutorial-docker-laravel .

Penjelasan:

  • docker build: Command untuk membuild Docker image
  • -t tutorial-docker-laravel: Memberikan tag/nama "tutorial-docker-laravel" pada image
  • .: Menggunakan Dockerfile di direktori saat ini

Tips:

  • Pastikan Anda berada di folder project yang berisi dockerfile
  • Proses build akan memakan waktu 3-5 menit untuk pertama kali
  • Jika ada error, cek kembali langkah 1 (pull base images)

3. Jalankan Container

Setelah build berhasil, jalankan container:

docker run -d -p 8080:80 --name laravel-container tutorial-docker-laravel

Penjelasan:

  • docker run: Command untuk menjalankan container
  • -d: Detached mode (berjalan di background)
  • -p 8080:80: Port mapping - port 8080 di host diarahkan ke port 80 di container
  • --name laravel-container: Memberikan nama "laravel-container" pada container
  • tutorial-docker-laravel: Nama image yang akan dijalankan (sesuai dengan langkah 2)

4. Akses Aplikasi

Buka browser dan akses: http://localhost:8080

Jika berhasil, Anda akan melihat halaman welcome Laravel! πŸŽ‰

5. Perintah Docker Berguna

Melihat container yang berjalan:

docker ps

Melihat semua container (termasuk yang berhenti):

docker ps -a

Menghentikan container:

docker stop laravel-container

Menjalankan ulang container:

docker start laravel-container

Masuk ke dalam container (untuk debugging):

docker exec -it laravel-container bash

Melihat logs container:

docker logs laravel-container

Menghapus container:

docker rm laravel-container

Menghapus image:

docker rmi tutorial-docker-laravel

Troubleshooting

Issue: Permission Denied

Jika mengalami permission error, pastikan folder storage dan bootstrap/cache memiliki permission yang tepat:

docker exec -it laravel-container bash
chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache
chmod -R 775 /var/www/storage /var/www/bootstrap/cache

Issue: Port Already in Use

Jika port 8080 sudah digunakan, ubah ke port lain:

docker run -d -p 8081:80 --name laravel-container tutorial-docker-laravel

Issue: Build Error

Pastikan Docker Desktop berjalan dan tidak ada typo di Dockerfile.

Issue: Timeout Error saat Build

Jika mengalami error seperti:

ERROR: failed to resolve source metadata for docker.io/library/php:8.2-apache:
failed to do request: Head "https://registry-1.docker.io/v2/library/php/manifests/8.2-apache":
net/http: TLS handshake timeout

Solusi:

  1. Pull base images terlebih dahulu (seperti dijelaskan di langkah 1):

    docker pull php:8.2-apache
    docker pull composer:latest
  2. Restart Docker Desktop jika masih error

  3. Cek koneksi internet - pastikan koneksi stabil

  4. Disable VPN sementara jika menggunakan VPN

  5. Cek proxy settings di Docker Desktop Settings > Resources > Proxies

Docker Compose (Opsional)

Untuk penggunaan yang lebih advanced, Anda bisa menggunakan Docker Compose. Buat file docker-compose.yml:

version: "3.8"

services:
    app:
        build: .
        ports:
            - "8080:80"
        environment:
            - APP_ENV=production
            - APP_DEBUG=false
        volumes:
            - ./storage:/var/www/storage

Jalankan dengan:

docker-compose up -d

Tips & Best Practices

  1. Rebuild Image Setelah Perubahan Code: Setiap kali mengubah code, Anda perlu rebuild image:

    docker build -t tutorial-docker-laravel .
    docker stop laravel-container
    docker rm laravel-container
    docker run -d -p 8080:80 --name laravel-container tutorial-docker-laravel
  2. Environment Variables: Gunakan file .env atau Docker environment variables untuk konfigurasi

  3. Database: Untuk database, sebaiknya gunakan container terpisah (MySQL, PostgreSQL, dll.)

  4. Development vs Production: Dockerfile ini cocok untuk production. Untuk development, pertimbangkan menggunakan volume mounting.

Kesimpulan

Docker memungkinkan Anda untuk:

  • βœ… Menjalankan aplikasi Laravel tanpa install PHP/Apache lokal
  • βœ… Konsistensi environment antar developer
  • βœ… Easy deployment ke berbagai platform
  • βœ… Isolasi aplikasi dari sistem host
  • βœ… Scalability dan portability

Selamat mencoba! 🐳

About

Repository ini dibuat untuk keperluan Praktikum POPL dengan fokus pada implementasi Laravel menggunakan Docker. Tujuannya adalah mempermudah proses setup lingkungan pengembangan (development environment) agar lebih konsisten, portabel, dan mudah dijalankan di berbagai platform tanpa perlu konfigurasi manual yang rumit.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages