Panduan Teknis Deploy Laravel dengan Docker sebagai Persiapan Deployment ke Kubernetes

Panduan Teknis Deploy Laravel dengan Docker sebagai Persiapan Deployment ke Kubernetes

Pendahuluan

Laravel merupakan salah satu framework PHP paling populer yang banyak digunakan untuk membangun aplikasi web maupun REST API modern. Dalam implementasi infrastruktur modern, aplikasi Laravel umumnya tidak lagi dijalankan langsung pada VPS tanpa isolasi, melainkan dikemas menggunakan Docker agar lebih portable, konsisten, dan mudah dideploy ke berbagai environment termasuk Kubernetes.

Pada artikel ini akan dibahas proses pembuatan REST API Laravel sederhana, konfigurasi koneksi MySQL external, pembuatan Docker image Laravel, push image ke Docker Hub, hingga persiapan deployment ke Kubernetes cluster.

Mengapa Laravel Menggunakan Docker?

Docker memberikan banyak keuntungan pada deployment Laravel, di antaranya:

  • Environment development dan production menjadi konsisten
  • Tidak perlu install dependency manual pada server
  • Mempermudah deployment dan rollback
  • Mendukung CI/CD modern
  • Mudah dipindahkan antar server
  • Menjadi standar deployment cloud native
  • Mempermudah scaling aplikasi menggunakan Kubernetes

Prasyarat

Disarankan menggunakan environment berikut:

  • Ubuntu 24.04 / RockyLinux 9
  • Docker Terinstall
  • Akun Docker Hub 
  • Laravel Terinstall
  • Composer Terinstall
  • MySQL Server / cPanel MySQL
  • Koneksi Internet
  • extension PHP Terinstall

Membuat Project Laravel

Langkah pertama sebelum melakukan containerization Laravel adalah membuat project Laravel baru.

  1. Buat Project Laravel

    Gunakan perintah berikut:

    composer create-project laravel/laravel laravel-app

    Fungsi:

    • Membuat project Laravel baru
    • Mengunduh seluruh dependency Laravel menggunakan Composer
    • Membuat struktur project Laravel secara otomatis

    Penjelasan:

    • laravel/laravel
      Package official Laravel.
    • laravel-app
      Nama folder project yang akan dibuat.

    Proses ini akan menginstall:

    • Framework Laravel
    • Composer dependency
    • File konfigurasi default Laravel
    Keterangan:
    Pastikan Composer dan PHP sudah terinstall sebelum menjalankan proses create-project.
  2. Masuk ke Folder Project

    Gunakan perintah berikut:

    cd laravel-app

    Fungsi:

    • Masuk ke directory project Laravel
    • Digunakan sebelum melakukan konfigurasi Docker dan Kubernetes

    Struktur project Laravel biasanya berisi folder:

    app/
    bootstrap/
    config/
    database/
    public/
    resources/
    routes/
    storage/
    Keterangan:
    Seluruh konfigurasi aplikasi Laravel nantinya dilakukan dari dalam folder project ini.

Konfigurasi Database Laravel

Setelah project Laravel berhasil dibuat, langkah berikutnya adalah mengatur koneksi database pada file environment Laravel.

  1. Edit File .env

    Gunakan perintah berikut:

    nano .env

    Fungsi:

    • Membuka file konfigurasi environment Laravel
    • Digunakan untuk konfigurasi database, APP_URL, cache, dan service lainnya
    • Setiap environment dapat memiliki konfigurasi berbeda
  2. Ubah Konfigurasi Database

    Sesuaikan konfigurasi database berikut:

    DB_CONNECTION=mysql
    DB_HOST=103.151.140.27
    DB_PORT=3306
    DB_DATABASE=laravel_db
    DB_USERNAME=laravel_user
    DB_PASSWORD=passwordku

    Penjelasan Konfigurasi:

    • DB_CONNECTION=mysql
      Menentukan database driver yang digunakan Laravel.
    • DB_HOST
      IP atau hostname server database.
    • DB_PORT=3306
      Port default MySQL.
    • DB_DATABASE
      Nama database yang digunakan aplikasi Laravel.
    • DB_USERNAME
      Username database.
    • DB_PASSWORD
      Password database.
    Keterangan:
    File .env digunakan Laravel untuk menyimpan konfigurasi sensitif dan environment aplikasi tanpa mengubah source code utama.

Membuat Database MySQL

Sebelum Laravel dapat terhubung ke database, terlebih dahulu buat database MySQL yang akan digunakan aplikasi.

  1. Login ke MySQL

    Gunakan perintah berikut:

    mysql -u root -p

    Fungsi:

    • Masuk ke console MySQL sebagai user root
    • Digunakan untuk administrasi database
    • Memungkinkan pembuatan database dan user MySQL

    Masukkan password root MySQL saat diminta.

  2. Buat Database Laravel

    Gunakan query berikut:

    CREATE DATABASE laravel_db;

    Fungsi:

    • Membuat database baru untuk aplikasi Laravel
    • Digunakan sebagai tempat penyimpanan data aplikasi
    • Nama database harus sesuai dengan konfigurasi pada file .env

    Untuk memastikan database berhasil dibuat:

    SHOW DATABASES;

    Biasanya akan muncul:

    laravel_db
    Keterangan:
    Database Laravel harus tersedia sebelum menjalankan migration agar tabel aplikasi dapat dibuat dengan normal.

Membuat Tabel Biodata

Setelah database Laravel berhasil dibuat, langkah berikutnya adalah membuat tabel biodata dan menambahkan data sample.

  1. Menggunakan Database Laravel

    Gunakan query berikut:

    USE laravel_db;

    Fungsi:

    • Memilih database aktif yang akan digunakan
    • Semua query berikutnya akan dijalankan pada database laravel_db
  2. Membuat Tabel Biodata

    Gunakan query berikut:

    CREATE TABLE biodata (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nama VARCHAR(100),
        gender VARCHAR(20),
        alamat TEXT,
        no_hp VARCHAR(20)
    );

    Penjelasan Struktur Tabel:

    • id
      Primary key otomatis bertambah.
    • nama
      Menyimpan nama lengkap.
    • gender
      Menyimpan jenis kelamin.
    • alamat
      Menyimpan alamat pengguna.
    • no_hp
      Menyimpan nomor handphone.

    Untuk memastikan tabel berhasil dibuat:

    SHOW TABLES;
    Keterangan:
    Tabel biodata digunakan sebagai contoh sederhana integrasi Laravel dengan database MySQL.
  3. Menambahkan Data Biodata

    Gunakan query berikut:

    INSERT INTO biodata (nama, gender, alamat, no_hp)
    VALUES
    ('Robert', 'Laki-laki', 'Yogyakarta', '08123456789'),
    ('Andi', 'Laki-laki', 'Jakarta', '08111111111'),
    ('Siti', 'Perempuan', 'Bandung', '08222222222');

    Fungsi:

    • Menambahkan data sample ke tabel biodata
    • Digunakan untuk testing aplikasi Laravel
    • Memastikan koneksi database berjalan normal

    Untuk melihat data yang berhasil masuk:

    SELECT * FROM biodata;

    Contoh hasil:

    1 | Robert | Laki-laki | Yogyakarta | 08123456789
    2 | Andi   | Laki-laki | Jakarta     | 08111111111
    3 | Siti   | Perempuan | Bandung     | 08222222222
    Keterangan:
    Data sample ini nantinya dapat ditampilkan melalui Laravel API atau halaman web aplikasi.

Membuat Model Laravel

Setelah tabel database berhasil dibuat, langkah berikutnya adalah membuat model Laravel untuk mengakses tabel biodata menggunakan Eloquent ORM.

  1. Buat Model Biodata

    Gunakan perintah berikut:

    php artisan make:model Biodata

    Fungsi:

    • Membuat model Laravel baru
    • Digunakan untuk interaksi database menggunakan Eloquent ORM
    • Merepresentasikan tabel database dalam bentuk object PHP

    File model akan otomatis dibuat pada:

    app/Models/Biodata.php
  2. Edit File Model

    Buka file berikut:

    app/Models/Biodata.php

    Isi dengan kode berikut:

    Penjelasan Konfigurasi:

    • protected $table = 'biodata';
      Menentukan nama tabel database yang digunakan model.
    • protected $fillable
      Menentukan field yang boleh diisi secara mass assignment.
    • Eloquent Model
      Digunakan Laravel untuk proses query database secara object oriented.

    Field yang digunakan:

    • nama
    • gender
    • alamat
    • no_hp
    Keterangan:
    Model Laravel mempermudah proses query database tanpa perlu menulis SQL manual secara langsung.

Membuat API Laravel

Setelah model Laravel berhasil dibuat, langkah berikutnya adalah membuat API endpoint untuk menampilkan data biodata dalam format JSON.

  1. Edit File API Route

    Buka file berikut:

    routes/api.php

    Fungsi:

    • Digunakan untuk mendefinisikan endpoint API Laravel
    • Semua route pada file ini otomatis menggunakan prefix /api
    • Cocok digunakan untuk REST API dan aplikasi backend
  2. Tambahkan Route API Biodata

    Tambahkan kode berikut:

    Penjelasan Kode:

    • use App\Models\Biodata;
      Menggunakan model Biodata untuk mengambil data database.
    • Route::get('/biodata')
      Membuat endpoint GET API dengan URL /api/biodata.
    • Biodata::all()
      Mengambil seluruh data dari tabel biodata.
    • response()->json()
      Mengubah hasil query menjadi format JSON.

    Endpoint API yang dihasilkan:

    http://IP_SERVER/api/biodata

    Contoh response JSON:

    [
      {
        "id": 1,
        "nama": "Robert",
        "gender": "Laki-laki",
        "alamat": "Yogyakarta",
        "no_hp": "08123456789"
      }
    ]
    Keterangan:
    Laravel API sangat cocok digunakan sebagai backend aplikasi mobile, frontend JavaScript, maupun microservice di Kubernetes.

Menjalankan Laravel

Setelah route API berhasil dibuat, langkah berikutnya adalah menjalankan Laravel dan melakukan testing endpoint API.

  1. Jalankan Laravel

    Gunakan perintah berikut:

    php artisan serve --host=0.0.0.0 --port=8000

    Penjelasan Parameter:

    • --host=0.0.0.0
      Mengizinkan Laravel diakses dari luar server.
    • --port=8000
      Menentukan port aplikasi Laravel.

    Fungsi:

    • Menjalankan development server Laravel
    • Membuka akses aplikasi melalui jaringan
    • Digunakan untuk testing API sebelum deployment Docker atau Kubernetes
    Keterangan:
    Jika hanya menggunakan localhost atau 127.0.0.1, aplikasi tidak dapat diakses dari luar server.
  2. Testing API Laravel

    Akses endpoint API melalui browser:

    http://IP_SERVER:8000/api/biodata

    Atau menggunakan curl:

    curl http://IP_SERVER:8000/api/biodata

    Fungsi:

    • Memastikan Laravel berhasil berjalan
    • Memastikan koneksi database berhasil
    • Memastikan endpoint API dapat diakses
  3. Contoh Output JSON

    Jika berhasil, API akan menampilkan data JSON seperti berikut:

    [
      {
        "id": 1,
        "nama": "Robert",
        "gender": "Laki-laki",
        "alamat": "Yogyakarta",
        "no_hp": "08123456789"
      },
      {
        "id": 2,
        "nama": "Andi",
        "gender": "Laki-laki",
        "alamat": "Jakarta",
        "no_hp": "08111111111"
      }
    ]

    Penjelasan:

    • Data berhasil diambil dari database MySQL
    • Laravel mengubah data menjadi format JSON otomatis
    • API siap digunakan aplikasi frontend atau mobile
    Keterangan:
    Jika output JSON berhasil muncul, berarti integrasi Laravel, MySQL, dan API endpoint sudah berjalan normal.

Membuat Dockerfile Laravel

Setelah aplikasi Laravel berhasil dibuat, langkah berikutnya adalah membuat Dockerfile untuk proses containerization aplikasi.

  1. Buat atau Edit Dockerfile

    Gunakan perintah berikut:

    nano Dockerfile

    Fungsi:

    • Membuat file konfigurasi Docker image
    • Digunakan Docker untuk build container aplikasi
    • Menentukan environment aplikasi Laravel di container
  2. Isi Konfigurasi Dockerfile

    Isi file dengan konfigurasi berikut:

    FROM webdevops/php-nginx:8.3
    
    ENV WEB_DOCUMENT_ROOT=/app/public
    
    WORKDIR /app
    
    COPY . /app
    
    RUN composer install --no-dev --optimize-autoloader
    
    EXPOSE 80

    Penjelasan Dockerfile:

    • FROM webdevops/php-nginx:8.3
      Menggunakan base image PHP dan Nginx berbasis PHP 8.3.
    • WORKDIR /app
      Menentukan folder kerja aplikasi di dalam container.
    • COPY . /app
      Menyalin seluruh source code Laravel ke container.
    • RUN composer install --no-dev --optimize-autoloader
      Menginstall dependency Laravel production dan mengoptimalkan autoloader.
    • EXPOSE 80
      Membuka port 80 untuk akses aplikasi web.
    Keterangan:
    Dockerfile ini digunakan untuk membangun Docker image Laravel yang nantinya dapat dijalankan di Docker maupun Kubernetes.

Generate APP_KEY Laravel

Sebelum build Docker image, pastikan Laravel sudah memiliki APP_KEY.

  1. Generate APP_KEY Laravel

    Gunakan perintah berikut:

    php artisan key:generate

    Fungsi:

    • Membuat APP_KEY otomatis untuk Laravel
    • Menyimpan key ke file .env
    • Digunakan untuk keamanan aplikasi Laravel

    Jika berhasil biasanya muncul:

    Application key set successfully.
    Keterangan:
    APP_KEY wajib tersedia sebelum aplikasi Laravel dijalankan agar fitur security Laravel dapat bekerja dengan normal.
  2. Fungsi APP_KEY

    APP_KEY digunakan oleh Laravel untuk beberapa fitur keamanan penting:

    • Session Laravel
      Mengamankan data session user.
    • Encryption
      Digunakan untuk proses enkripsi dan dekripsi data.
    • Authentication
      Mendukung keamanan proses login dan autentikasi.
    • Cookie
      Mengamankan cookie aplikasi.
    • CSRF Protection
      Mendukung proteksi CSRF token pada form Laravel.
    Keterangan:
    Jika APP_KEY kosong, Laravel dapat menampilkan error seperti “No application encryption key has been specified.”

Build Docker Image

Setelah Dockerfile selesai dibuat, langkah berikutnya adalah melakukan build Docker image Laravel.

  1. Build Docker Image

    Gunakan perintah berikut:

    docker build -t laravel-app:v1 .

    Penjelasan:

    • docker build
      Digunakan untuk membuat Docker image.
    • -t laravel-app:v1
      Memberikan nama dan tag image.
    • .
      Menggunakan Dockerfile pada directory saat ini.

    Fungsi:

    • Membuat image aplikasi Laravel
    • Menggabungkan source code dan environment PHP ke dalam container
    • Mempersiapkan aplikasi untuk deployment

    Jika berhasil biasanya muncul:

    Successfully built
    Successfully tagged laravel-app:v1
    Keterangan:
    Proses build dapat memerlukan waktu beberapa menit tergantung ukuran dependency Laravel dan koneksi internet.
  2. Tag Docker Image

    Jika build berhasil, lanjut lakukan tag image:

    docker tag laravel-app:v1 pwh21/laravel-app:v1

    Fungsi:

    • Memberikan nama repository Docker Hub pada image
    • Mempersiapkan image sebelum proses push
    • pwh21 merupakan username Docker Hub

    Penjelasan:

    • laravel-app:v1
      Image lokal hasil build.
    • pwh21/laravel-app:v1
      Nama image tujuan di Docker Hub.
    Keterangan:
    Tag image wajib dilakukan agar Docker Hub mengetahui repository tujuan upload image.

Push ke Docker Hub

Setelah Docker image berhasil dibuat dan ditag, langkah berikutnya adalah upload image ke Docker Hub dan melakukan testing container Laravel.

  1. Push Image ke Docker Hub

    Gunakan perintah berikut:

    docker push pwh21/laravel-app:v1

    Fungsi:

    • Mengupload Docker image ke Docker Hub
    • Membuat image dapat diakses Kubernetes
    • Digunakan untuk deployment multi node

    Penjelasan:

    • pwh21
      Username Docker Hub.
    • laravel-app:v1
      Nama repository dan tag image.

    Jika berhasil biasanya muncul proses upload layer image.

    Keterangan:
    Pastikan sudah login menggunakan docker login sebelum melakukan push image.
  2. Testing Container Laravel

    Jalankan container menggunakan perintah berikut:

    docker run -d -p 8000:80 --name laravel-app laravel-app:v1

    Penjelasan Parameter:

    • -d
      Menjalankan container di background.
    • -p 8000:80
      Mapping port host 8000 ke port container 80.
    • --name laravel-app
      Memberikan nama container.
    • laravel-app:v1
      Image yang digunakan untuk menjalankan container.

    Fungsi:

    • Menjalankan aplikasi Laravel dalam container Docker
    • Melakukan testing sebelum deployment Kubernetes
    • Memastikan image berjalan normal
  3. Cek Container

    Gunakan perintah berikut:

    docker ps

    Fungsi:

    • Melihat container yang sedang berjalan
    • Memastikan container Laravel aktif
    • Melihat mapping port container

    Contoh output:

    CONTAINER ID   IMAGE             PORTS
    xxxxx          laravel-app:v1   0.0.0.0:8000->80/tcp
    Keterangan:
    Jika container berjalan normal, aplikasi Laravel dapat diakses melalui browser menggunakan IP server dan port 8000.

Testing API Laravel

Setelah container Laravel berhasil berjalan, langkah berikutnya adalah melakukan testing endpoint API dari dalam browser maupun command line.

  1. Testing API Menggunakan Browser

    Akses endpoint berikut melalui browser:

    http://IP_SERVER:8000/api/biodata

    Fungsi:

    • Memastikan container Laravel dapat diakses
    • Memastikan API endpoint berjalan normal
    • Memastikan koneksi database berhasil

    Jika berhasil, browser akan menampilkan output JSON data biodata.

  2. Testing API Menggunakan Curl

    Gunakan perintah berikut:

    curl http://127.0.0.1:8000/api/biodata

    Fungsi:

    • Melakukan testing API melalui terminal
    • Memastikan aplikasi merespon request HTTP
    • Digunakan untuk troubleshooting API dan container

    Contoh output:

    [
      {
        "id":1,
        "nama":"Robert",
        "gender":"Laki-laki",
        "alamat":"Yogyakarta",
        "no_hp":"08123456789"
      }
    ]
    Keterangan:
    Jika output JSON berhasil muncul, berarti Docker container Laravel, API route, dan koneksi database sudah berjalan dengan normal.

Kesimpulan

Laravel dapat dikemas menggunakan Docker untuk menghasilkan aplikasi yang portable, konsisten, dan siap dideploy ke Kubernetes. Dengan menggunakan image PHP-Nginx dan konfigurasi document root yang sesuai, Laravel dapat berjalan normal di dalam container serta tetap terhubung ke database MySQL external. Setelah image berhasil di-push ke Docker Hub dan container berhasil dijalankan, aplikasi Laravel siap digunakan sebagai backend API modern dan siap dilanjutkan ke tahap deployment Kubernetes menggunakan Deployment, Service, Ingress, dan Horizontal Pod Autoscaler (HPA).


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Finance : +6285191239466