Menjalankan Laravel 8 dengan Docker

Untuk menjalankan Laravel 8, kita membutuhkan beberapa layanan (service) yang saling berinteraksi:

  1. Database service menggunakan image mariadb:latest
    – Bertujuan untuk menyimpan data
  2. Application service menggunakan image php:8-fpm-alpine
    – Bertujuan untuk mengolah file php
  3. Web service menggunakan image nginx:latest
    – Bertujuan untuk menerima dan merespon permintaan dari klien

Database service

Menyiapkan container

# Download image yang dibutuhkan
docker pull mariadb

# Buat dan jalankan container
docker run \
  --name=db \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=laravel \
  -d \
mariadb

Application service

Menyiapkan container

# Download image yang dibutuhkan
docker pull php:8-fpm-alpine

# Buat dan jalankan container
docker run \
  --name app \
  -p 9000:9000 \
  -d \
php:8-fpm-alpine

Mengkonfigurasi container

# Masuk ke dalam container
docker exec -it app sh

# Update package manager
apk update

# Install program yang dibutuhkan
apk install git

# Kita perlu menambahkan PHP esktensi: PDO dan PDO_MYSQL
docker-php-ext-install pdo pdo_mysql

# Clone repository ke folder /app
git clone https://github.com/laravel/laravel /app

# Download dan install composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php --install-dir=/usr/bin --filename=composer

php -r "unlink('composer-setup.php');"

# Masuk ke directory /app
cd /app

# Install paket composer
composer install

# Copy .env file
cp .env.example .env
# Edit .env file
...
DB_CONNECTION=mysql
DB_HOST=172.17.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secret
...
# Generate key
php artisan key:generate

# Pastikan Laravel sudah terkoneksi ke database
php artisan migrate:fresh

Jika anda mengalami masalah dengan Mysql driver yang belum terinstall, anda dapat mengetikan perintah kill -USR2 1 atau 1. Keluar dari container, 2. Menghentikan container, lalu 3. Memulainya kembali.

Web service

Menyiapkan container

# Download image yang dibutuhkan
docker pull nginx

# Buat dan jalankan container
docker run \
  --name web \
  -p 8000:80 \
  -d
nginx

Mengkonfigurasi container

# Masuk ke dalam container
docker exec -it web bash

# Update package manager
apt update

# Install program yang dibutuhkan
apt install vim
# Edit Nginx config file di /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    root /app/public/;
    index index.php;

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

    location ~ \.php$ {
        fastcgi_pass   172.17.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
# Berdasarkan konfigurasi di atas,
# Nginx akan mencari file index.php di dalam folder /app/public,
# maka kita harus menyiapkan file tersebut
mkdir -p /app/public
touch /app/public/index.php

# Reload configurasi Nginx
nginx -s reload

Buka browser anda dan arahkan ke http://localhost:8000. Anda akan mendapatkan halaman awal dari Laravel jika semua telah terkonfigurasi dengan baik.

Selamat mencoba!


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *