
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
.env
LaravelDB_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