Skip to content

Panduan Komprehensif Setup Laravel di Container Debian Server via Incus

Yhotie
Published date:
Edit this post

Menggunakan Incus dengan image Debian Server adalah kombinasi yang sangat solid untuk development environment maupun kebutuhan production. Sebagai system container (fork dari LXD), Incus memungkinkan kita mengelola service menggunakan systemctl secara penuh layaknya di server VPS fisik, namun dengan performa yang super ringan dan efisien.

Jika kamu ingin membangun infrastruktur Laravel yang terisolasi tanpa membebani resource laptop, kamu berada di tempat yang tepat. Yuk, kita bahas cara setup-nya dari nol hingga siap diakses!


1. Masuk ke Shell Container & Update Sistem

Langkah pertama, buka terminal di komputer host kamu dan masuk ke dalam shell dari container Debian yang sudah kamu buat:

# Ganti 'laravel-debian' dengan nama container Incus kamu
incus exec laravel-debian -- /bin/bash

Setelah berada di dalam container, pastikan seluruh daftar indeks paket dan sistem operasi kamu berada dalam kondisi paling mutakhir:

apt update && apt upgrade -y
apt install -y curl wget git unzip lsb-release ca-certificates gnupg2 software-properties-common

2. Instalasi PHP 8.3 (via Repositori SURY)

Secara default, lumbung paket (repositori) Debian stabil biasanya menyediakan versi PHP yang sedikit lebih lama. Agar project Laravel kamu bisa berjalan di versi PHP 8.3 terbaru, kita akan menambahkan repositori tepercaya dari Ondřej Surý:

# Tambahkan GPG key repositori
wget -O /etc/apt/trusted.gpg.d/php.gpg [https://packages.sury.org/php/apt.gpg](https://packages.sury.org/php/apt.gpg)

# Daftarkan repositori ke dalam sistem Debian
echo "deb [https://packages.sury.org/php/](https://packages.sury.org/php/) $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

# Perbarui database paket dan install PHP beserta ekstensinya
apt update
apt install -y php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-bcmath php8.3-intl php8.3-readline php8.3-sqlite3

Kamu bisa memastikan instalasi berhasil dengan memeriksa versi CLI-nya: php -v.


3. Instalasi dan Konfigurasi MariaDB

Laravel membutuhkan database store untuk mengelola data. Kita akan mengandalkan MariaDB Server di dalam container ini.

# Install dan jalankan service MariaDB
apt install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb

Membuat Database dan User Baru

Masuk ke prompt MariaDB sebagai root (secara default instalasi baru di Debian belum memiliki password root):

mysql -u root

Jalankan kueri berikut untuk menyiapkan database khusus Laravel. Di sini kita membuat user khusus bernama laravel_lxc:

CREATE DATABASE IF NOT EXISTS `laravel-app`;
GRANT ALL PRIVILEGES ON `laravel-app`.* TO 'laravel_lxc'@'%' IDENTIFIED BY 'PasswordRahasia123';
FLUSH PRIVILEGES;
EXIT;

(Catatan: Penggunaan tanda % mengizinkan user laravel_lxc untuk mengakses database ini dari luar container jika nantinya dibutuhkan).


4. Pasang Composer & Jalankan Project Laravel

Composer adalah alat wajib untuk mengunduh framework Laravel beserta pustaka (dependencies) pendukungnya.

# Unduh dan pasang Composer secara global
curl -sS [https://getcomposer.org/installer](https://getcomposer.org/installer) | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

Sekarang, berpindah ke direktori web standar /var/www/ dan ciptakan project Laravel barumu:

cd /var/www
composer create-project laravel/laravel laravel-app

Mengatur Hak Akses (Permissions) Folder

Di ekosistem Debian, web server Nginx dan PHP-FPM berjalan di bawah kendali user www-data. Supaya Laravel tidak memunculkan error Permission Denied saat menulis log atau cache, ubah kepemilikan foldernya:

chown -R www-data:www-data /var/www/laravel-app
chmod -R 775 /var/www/laravel-app/storage
chmod -R 775 /var/www/laravel-app/bootstrap/cache

Konfigurasi .env dan Migrasi

Buka file konfigurasi environment Laravel kamu:

nano /var/www/laravel-app/.env

Sesuaikan bagian database agar mengarah ke MariaDB yang telah kita buat sebelumnya:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-app
DB_USERNAME=laravel_lxc
DB_PASSWORD=PasswordRahasia123

Simpan file, lalu jalankan perintah migrasi awal database:

cd /var/www/laravel-app
php artisan migrate

5. Konfigurasi Web Server Nginx

Langkah terakhir di dalam container adalah mengonfigurasi Nginx agar mengarah ke folder eksternal /public milik Laravel.

# Install Nginx
apt install -y nginx

# Bersihkan konfigurasi default dan buat berkas virtual host baru
rm /etc/nginx/sites-enabled/default
nano /etc/nginx/sites-available/laravel.conf

Tempelkan blok konfigurasi server Nginx berikut ini:

server {
    listen 80;
    listen [::]:80;
    server_name _; # Mengizinkan akses langsung menggunakan IP Container
    root /var/www/laravel-app/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php index.html;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        # Menghubungkan Nginx ke unix socket PHP 8.3 FPM bawaan Debian
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Aktifkan konfigurasi tersebut dan lakukan muat ulang (reload) pada service:

# Membuat symlink tanda aktif
ln -s /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-enabled/

# Uji ketepatan sintaks nginx
nginx -t

# Restart dan aktifkan service saat boot otomatis
systemctl restart nginx php8.3-fpm
systemctl enable nginx php8.3-fpm

6. Cara Mengakses dari Komputer Host

Karena Incus mengisolasi jaringan di dalam virtual bridge, container kamu akan mendapatkan IP internal tersendiri.

Jalankan perintah ini di terminal komputer Host kamu untuk mengetahui IP-nya:

incus list

Cari nama container kamu dan lihat pada kolom IPV4 (misalnya: 10.135.210.45). Sekarang, buka web browser di komputer host kamu dan ketik alamat IP tersebut: http://10.135.210.45. Halaman selamat datang Laravel kamu kini sudah tampil menawan!


Kesimpulan

Melakukan deploy aplikasi web development seperti Laravel di dalam Incus memberikan lingkungan kerja yang sangat bersih, terisolasi, dan menyerupai server produksi asli. Debian Server yang stabil berpadu dengan performa PHP 8.3 yang gegas memastikan proses pengodeanmu berjalan tanpa hambatan.

Mengalami kendala saat mengikuti langkah-langkah di atas? Jangan ragu untuk mendiskusikan error yang kamu temui di kolom komentar ya!


FAQ (Frequently Asked Questions)

1. Bagaimana jika saya ingin mengelola beberapa versi PHP sekaligus di satu container?

Kamu bisa memasang versi lain dari repo SURY (misalnya php8.1-fpm dan php8.2-fpm). Tiap versi akan melahirkan unix socket independen di direktori /var/run/php/. Kamu hanya perlu memisahkan blok server di Nginx dan mengarahkan fastcgi_pass ke berkas .sock versi PHP yang dituju oleh masing-masing project Laravel.

2. Bagaimana caranya agar database MariaDB di dalam container bisa di-remote dari host?

Pertama, ubah pengaturan bind-address = 0.0.0.0 pada berkas /etc/mysql/mariadb.conf.d/50-server.cnf agar mendengarkan jaringan luar. Kedua, pastikan user database kamu di-set menggunakan host % (seperti user laravel_lxc di panduan ini). Terakhir, jalankan perintah proxy di host jika ingin memetakan port-nya:

incus config device add nama-container port3306 proxy listen=tcp:0.0.0.0:3306 connect=tcp:127.0.0.1:3306.

3. Di mana letak penyimpanan data volume Incus secara default?

Tergantung jenis storage pool yang kamu pilih saat inisialisasi awal (incus admin init). Jika kamu memilih tipe directory, semua berkas root file system dari container Debian kamu tersimpan rapi di /var/lib/incus/storage-pools/ pada komputer host.

Next
Tutorial Laravel 13 + Livewire 4+ Flux UI: Panduan Lengkap CRUD Book