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.
- Buat Project Laravel
Gunakan perintah berikut:
composer create-project laravel/laravel laravel-appFungsi:
- 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. - Masuk ke Folder Project
Gunakan perintah berikut:
cd laravel-appFungsi:
- 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.
- Edit File .env
Gunakan perintah berikut:
nano .envFungsi:
- Membuka file konfigurasi environment Laravel
- Digunakan untuk konfigurasi database, APP_URL, cache, dan service lainnya
- Setiap environment dapat memiliki konfigurasi berbeda
- 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=passwordkuPenjelasan 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. - DB_CONNECTION=mysql
Membuat Database MySQL
Sebelum Laravel dapat terhubung ke database, terlebih dahulu buat database MySQL yang akan digunakan aplikasi.
- Login ke MySQL
Gunakan perintah berikut:
mysql -u root -pFungsi:
- Masuk ke console MySQL sebagai user root
- Digunakan untuk administrasi database
- Memungkinkan pembuatan database dan user MySQL
Masukkan password root MySQL saat diminta.
- 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_dbKeterangan:
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.
- 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
- 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. - id
- 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 | 08222222222Keterangan:
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.
- Buat Model Biodata
Gunakan perintah berikut:
php artisan make:model BiodataFungsi:
- 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 - Edit File Model
Buka file berikut:
app/Models/Biodata.phpIsi 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. - protected $table = 'biodata';
Membuat API Laravel
Setelah model Laravel berhasil dibuat, langkah berikutnya adalah membuat API endpoint untuk menampilkan data biodata dalam format JSON.
- Edit File API Route
Buka file berikut:
routes/api.phpFungsi:
- Digunakan untuk mendefinisikan endpoint API Laravel
- Semua route pada file ini otomatis menggunakan prefix /api
- Cocok digunakan untuk REST API dan aplikasi backend
- 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/biodataContoh 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. - use App\Models\Biodata;
Menjalankan Laravel
Setelah route API berhasil dibuat, langkah berikutnya adalah menjalankan Laravel dan melakukan testing endpoint API.
- Jalankan Laravel
Gunakan perintah berikut:
php artisan serve --host=0.0.0.0 --port=8000Penjelasan 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. - --host=0.0.0.0
- Testing API Laravel
Akses endpoint API melalui browser:
http://IP_SERVER:8000/api/biodataAtau menggunakan curl:
curl http://IP_SERVER:8000/api/biodataFungsi:
- Memastikan Laravel berhasil berjalan
- Memastikan koneksi database berhasil
- Memastikan endpoint API dapat diakses
- 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.
- Buat atau Edit Dockerfile
Gunakan perintah berikut:
nano DockerfileFungsi:
- Membuat file konfigurasi Docker image
- Digunakan Docker untuk build container aplikasi
- Menentukan environment aplikasi Laravel di container
- 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 80Penjelasan 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. - FROM webdevops/php-nginx:8.3
Generate APP_KEY Laravel
Sebelum build Docker image, pastikan Laravel sudah memiliki APP_KEY.
- Generate APP_KEY Laravel
Gunakan perintah berikut:
php artisan key:generateFungsi:
- 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. - 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.” - Session Laravel
Build Docker Image
Setelah Dockerfile selesai dibuat, langkah berikutnya adalah melakukan build Docker image Laravel.
- 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:v1Keterangan:
Proses build dapat memerlukan waktu beberapa menit tergantung ukuran dependency Laravel dan koneksi internet. - docker build
- Tag Docker Image
Jika build berhasil, lanjut lakukan tag image:
docker tag laravel-app:v1 pwh21/laravel-app:v1Fungsi:
- 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.
- Push Image ke Docker Hub
Gunakan perintah berikut:
docker push pwh21/laravel-app:v1Fungsi:
- 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. - Testing Container Laravel
Jalankan container menggunakan perintah berikut:
docker run -d -p 8000:80 --name laravel-app laravel-app:v1Penjelasan 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
- -d
- Cek Container
Gunakan perintah berikut:
docker psFungsi:
- 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/tcpKeterangan:
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.
- Testing API Menggunakan Browser
Akses endpoint berikut melalui browser:
http://IP_SERVER:8000/api/biodataFungsi:
- Memastikan container Laravel dapat diakses
- Memastikan API endpoint berjalan normal
- Memastikan koneksi database berhasil
Jika berhasil, browser akan menampilkan output JSON data biodata.
- Testing API Menggunakan Curl
Gunakan perintah berikut:
curl http://127.0.0.1:8000/api/biodataFungsi:
- 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).


