Sistem Informasi Sekolah Terintegrasi

Setup aplikasi laravel menjadi Dockerize

Laravel   2025-05-05  

1. Struktur Direktori

Pastikan proyek Laravel kamu sudah ada, misalnya:

my-laravel-app/
├── app/
├── bootstrap/
├── public/
├── ...

2. Buat File Dockerfile

Buat file Dockerfile di root proyek Laravel:

# Gunakan image resmi PHP dengan Apache
FROM php:8.2-apache

# Install dependencies dan ekstensi PHP yang dibutuhkan Laravel
RUN apt-get update && apt-get install -y \
    git curl zip unzip libpng-dev libonig-dev libxml2-dev libzip-dev \
    && docker-php-ext-install pdo pdo_mysql mbstring zip exif pcntl bcmath gd

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Buat direktori storage dan cache terlebih dahulu
RUN mkdir -p /var/www/html/storage/framework/{sessions,views,cache} \
    && mkdir -p /var/www/html/bootstrap/cache

# Copy source code
COPY . /var/www/html

# Set permission
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 775 /var/www/html/storage \
    && chmod -R 775 /var/www/html/bootstrap/cache

# Ubah document root
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN sed -ri -e 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/html!/var/www/html/public!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Aktifkan modul Apache
RUN a2enmod rewrite

# Install dependencies Laravel
RUN if [ -f "composer.json" ]; then composer install --no-dev --optimize-autoloader; fi

# Expose port 80
EXPOSE 80

3. Buat File docker-compose.yml

version: '3.8'

services:
  app:
    container_name: apps-ptia
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
      - /var/www/html/vendor
      - /var/www/html/storage
    environment:
      - APACHE_RUN_USER=www-data
      - APACHE_RUN_GROUP=www-data
    depends_on:
      - db
    restart: unless-stopped

  db:
    container_name: db-ptia
    image: mysql:8
    restart: always
    ports:
      - "3308:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root  # Password root diubah
      MYSQL_DATABASE: db_ptia
      MYSQL_USER: db_ptia
      MYSQL_PASSWORD: db_ptia
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
      interval: 5s
      timeout: 10s
      retries: 10

  phpmyadmin:
    container_name: pma-ptia
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - "8081:80"  # Port diubah dari 8080 ke 8081
    environment:
      PMA_HOST: db-ptia
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: root  # Password disesuaikan
      UPLOAD_LIMIT: 128M
    depends_on:
      db:
        condition: service_healthy

volumes:
  db_data:

4. Konfigurasi .env Laravel

DB_CONNECTION=mysql
DB_HOST=db-ptia  # Nama service database di docker-compose
DB_PORT=3306     # Port internal container MySQL
DB_DATABASE=db_ptia
DB_USERNAME=db_ptia
DB_PASSWORD=db_ptia

5. Jalankan Docker

docker-compose up --build -d

 

6. Instal Laravel & Key

docker exec -it apps-ptia bash
composer install
php artisan key:generate
php artisan migrate

Jika ada error permission

docker exec -it apps-ptia bash
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache