Menjalankan Laravel dengan Docker, Nginx, MySQL, dan PHP 8.2

Dalam tutorial ini, kita akan memandu Anda langkah demi langkah untuk membuat dan menjalankan aplikasi Laravel menggunakan Docker, Nginx, MySQL, dan PHP versi 8.2. Docker memungkinkan Anda untuk mengisolasi dan menjalankan aplikasi di lingkungan yang terkendali, sementara Nginx berfungsi sebagai server web, MySQL sebagai database, dan PHP sebagai interpreter skrip.

Langkah 1: Persiapkan Proyek Laravel Anda

Pastikan Anda sudah memiliki proyek Laravel atau buat satu dengan perintah:

composer create-project --prefer-dist laravel/laravel nama-proyek

Pindah ke direktori proyek:

cd nama-proyek

Langkah 2: Buat Dockerfile

Buat file bernama Dockerfile di direktori proyek Anda dan masukkan konten berikut:

# Gunakan gambar resmi PHP versi 8.2 sebagai dasar
FROM php:8.2-fpm

# Instal ekstensi yang diperlukan
RUN apt-get update && apt-get install -y \
    libzip-dev \
    unzip \
    git \
    && docker-php-ext-install pdo_mysql zip

# Instal Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Setel pekerjaan direktori ke /var/www
WORKDIR /var/www

# Salin file composer dan file Laravel
COPY composer.json ./
COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader

# Salin sumber daya proyek Laravel
COPY . .

# Lakukan instalasi lengkap Laravel
RUN composer dump-autoload
RUN php artisan clear-compiled
RUN php artisan optimize

# Atur izin file
RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache

# Expose port 9000 dan jalankan PHP-FPM
EXPOSE 9000
CMD ["php-fpm"]

Langkah 3: Buat docker-compose.yml

Buat file docker-compose.yml di direktori yang sama dengan konten berikut:

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: laravel-app
    container_name: laravel-app
    restart: unless-stopped
    working_dir: /var/www
    volumes:
      - .:/var/www
    networks:
      - laravel-network

  nginx:
    image: nginx:latest
    container_name: laravel-nginx
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
    networks:
      - laravel-network

  mysql:
    image: mysql:latest
    container_name: laravel-mysql
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: root_password
    ports:
      - "3306:3306"
    networks:
      - laravel-network

networks:
  laravel-network:
    driver: bridge

Langkah 4: Buat File Konfigurasi Nginx

Buat file konfigurasi Nginx, misalnya nginx.conf, di direktori proyek Anda:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass app:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Langkah 5: Bangun dan Jalankan Kontainer

Buka terminal dan jalankan perintah berikut untuk membangun dan menjalankan kontainer:

docker-compose up -d

Aplikasi Laravel Anda sekarang harus dapat diakses melalui http://localhost:8000. Pastikan untuk menyesuaikan port dan konfigurasi sesuai kebutuhan proyek Anda.

Selamat! Anda sekarang memiliki lingkungan pengembangan Laravel yang dapat dijalankan dengan mudah menggunakan Docker.