1 · Menyiapkan lingkungan kerja
Tujuan: memastikan mesin ini sanggup menjalankan panel — sebelum memasang apa pun — dan tahu baris mana yang harus diperbaiki kalau ternyata tidak.
Tidak ada tebak-tebakan di sini. Semua batasan di bawah dideklarasikan di composer.json dan package.json milik paketnya sendiri, artinya composer menegakkannya saat instalasi, bukan membiarkannya muncul sebagai error runtime tiga langkah kemudian.
Lakukan ini
Jalankan keempatnya. Masing-masing menjawab pertanyaan yang nanti akan ditanyakan installer.
php -v # 8.2 atau lebih baru
php -m | grep -E '^(json|zip)$' # keduanya harus muncul
composer -V # 2.2 atau lebih baru
node -v # 20.19 atau lebih baru2
3
4
Untuk apa masing-masing
| Kebutuhan | Batasan | Kenapa paket ini memerlukannya |
|---|---|---|
php | ^8.2 | PHP 8.2 didukung sampai Laravel 12, versi Laravel terbaru yang masih jalan di atasnya |
ext-json | bebas | Metadata menyeberang ke Vue sebagai JSON, dan .panel-assets.json dibaca serta ditulis sebagai JSON |
ext-zip | bebas | Impor dan ekspor XLSX — berkas .xlsx sebetulnya arsip zip |
composer-runtime-api | ^2.2 | Melaporkan versi plugin yang benar-benar terpasang, bukan string yang ditulis tangan |
laravel/framework | ^12.0 || ^13.0 | Laravel 11 tidak didukung dan memang tidak bisa |
inertiajs/inertia-laravel | ^3.0 | Setiap layar panel adalah respons Inertia; versi 2 tidak didukung |
laravel/fortify | ^1.37.2 | Login, registrasi, reset password, dua faktor, dan passkey |
| Node | 20.19+ | Batas bawah Vite 7, yang membangun komponen Vue milik panel |
PHP 8.2 dengan Laravel 13 itu tidak ada
Laravel 13 membutuhkan PHP 8.3. Di PHP 8.2 Anda mendapat Laravel 12, dan kombinasi itu diuji sebagai job CI tersendiri — bukan sekadar diasumsikan jalan.
ext-zip tetap wajib meski Anda tidak pernah ekspor spreadsheet
Ekstensi itu dideklarasikan di require, bukan di suggest, jadi composer menolak memasang paket tanpanya. Di Debian dan Ubuntu: sudo apt install php8.3-zip. Pada PHP dari Homebrew, ekstensi ini sudah ikut terkompilasi.
Database
Tidak ada bagian paket ini yang terikat pada satu engine — query-nya Eloquent biasa, dan test suite-nya berjalan di SQLite. Database apa pun yang didukung Laravel bisa dipakai, termasuk berkas database/database.sqlite yang otomatis dibuat aplikasi Laravel baru.
Yang dibutuhkan paket ini adalah skemanya sendiri, berupa empat migrasi yang berjalan dari dalam paket secara default. Anda tidak perlu mem-publish, dan tidak perlu menyalinnya:
| Migrasi | Yang dibuat |
|---|---|
create_notifications_table | Tabel notifications milik Laravel, dibaca pada setiap request panel |
add_email_two_factor_to_users_table | Kolom two_factor_email_confirmed_at di tabel users |
create_panel_integrations_table | Tabel panel_integrations |
add_history_and_signing_to_panel_integrations | Tabel panel_integration_deliveries dan kolom secret |
Masing-masing melewati dirinya sendiri kalau tabel atau kolomnya sudah ada, jadi aman dijalankan di aplikasi yang sudah punya tabel notifications.
Jangan mem-publish migrasi "supaya aman"
Mem-publish salinan sementara load_migrations masih true berarti Anda punya salinan paket dan salinan Anda — skema yang sama dijalankan dua kali. Publish hanya kalau Anda memang ingin memilikinya, dan setel load_migrations ke false pada commit yang sama.
Yang diharapkan panel dari aplikasi Anda
Ada tiga hal yang harus benar di sisi frontend, dan tak satu pun bisa dikerjakan paket ini untuk Anda. Langkah 2 memberi ketiganya sekaligus; tabel ini agar Anda mengenalinya saat installer menyebut salah satunya.
| Apa | Letaknya | |
|---|---|---|
| 1 | Root view Inertia, dan middleware Inertia | resources/views/app.blade.php, app/Http/Middleware/HandleInertiaRequests.php |
| 2 | Konfigurasi Vite | vite.config.ts atau vite.config.js |
| 3 | Paket npm yang diimpor komponen, dan modul @/… milik aplikasi Anda | package.json, resources/js/ |
Dan satu hal dari model User — meski hari ini baru dua yang penting:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
class User extends Authenticatable
{
use Notifiable; // untuk pusat notifikasi
use TwoFactorAuthenticatable; // untuk halaman pengaturan keamanan
}2
3
4
5
6
7
8
9
Aplikasi Laravel Vue starter kit sudah membawa kedua trait itu.
Pastikan berhasil
Anda siap kalau keempat perintah tadi menampilkan versi yang masuk rentang, dan baik json maupun zip tidak ada yang hilang. Catat hasil php -v — kalau composer require menolak di langkah 3, angka itulah yang pertama kali perlu dibandingkan.
Kalau gagal
| Gejala | Penyebab | Perbaikan |
|---|---|---|
php -m tidak menampilkan zip | Ekstensinya belum terpasang | apt install php8.3-zip, atau aktifkan extension=zip di php.ini |
node -v menampilkan 18.x atau 20.10 | Di bawah batas bawah Vite 7 | Pasang Node 20.19+ atau 22 LTS — nvm install 22 |
composer -V menampilkan 1.x | Terlalu lama untuk composer-runtime-api ^2.2 | composer self-update --2 |
| Ada dua versi PHP di mesin | PHP CLI bukan PHP yang dipakai web server | Bandingkan php -v dengan halaman phpinfo() sebelum men-debug apa pun |
Berikutnya
Semua di atas adalah properti mesin. Langkah berikutnya adalah properti proyek.
Baca juga
- Requirements — daftar yang sama, lengkap dengan alasannya
- Compatibility matrix — yang diuji CI, dan yang sengaja tidak didukung
- Frontend requirements — setiap paket npm dan modul host