Panduan Instalasi & Migrasi
Halaman ini memandu proses instalasi paket robyajo/laravel-security-monitor ke dalam aplikasi Laravel Anda.
🌟 Nol Ketergantungan NPM (Zero NPM): Paket ini murni PHP Composer library standar seperti paket Spatie. Anda tidak perlu menginstal dependensi npm atau menjalankan build tools frontend.
1. Persyaratan Sistem
Bagian berjudul “1. Persyaratan Sistem”Pastikan lingkungan server Anda memenuhi spesifikasi minimum berikut:
- PHP:
^8.2,^8.3,^8.4, atau^8.5 - Laravel:
^10.0,^11.0,^12.0, atau^13.0 - Ekstensi PHP:
pdo,mbstring,json,filter,openssl.
2. Pemasangan via Composer
Bagian berjudul “2. Pemasangan via Composer”Menggunakan Packagist (Publik)
Bagian berjudul “Menggunakan Packagist (Publik)”Jika paket sudah diterbitkan di Packagist:
composer require robyajo/laravel-security-monitorMenggunakan Repositori Lokal / Private Git (Monorepo atau Path)
Bagian berjudul “Menggunakan Repositori Lokal / Private Git (Monorepo atau Path)”Jika Anda menggunakan paket ini secara internal sebelum publikasi ke Packagist, tambahkan konfigurasi repositori pada berkas composer.json proyek Laravel Anda:
"repositories": [ { "type": "path", "url": "../laravel-security-monitor", "options": { "symlink": true } }]Kemudian pasang paket:
composer require robyajo/laravel-security-monitor:@dev3. Publikasi Aset Otomatis (security:install)
Bagian berjudul “3. Publikasi Aset Otomatis (security:install)”Paket menyediakan perintah Artisan interaktif satu langkah untuk mempublikasikan seluruh berkas konfigurasi, migrasi, template Nginx, serta menerapkan aturan Hardening Apache .htaccess:
php artisan security:installPerintah ini akan secara otomatis:
- Mempublikasikan berkas konfigurasi
config/security.php. - Mempublikasikan berkas migrasi database ke
database/migrations/. - Mempublikasikan template virtual host
nginx.confdi root proyek. - Memperbarui berkas
public/.htaccess:- Jika berkas belum ada: membuat
public/.htaccessbaru dengan aturan rewrite standar Laravel + blok hardening keamanan. - Jika berkas sudah ada: membuat cadangan otomatis
public/.htaccess.backup-YYYYMMDD_HHMMSSdan menyisipkan blok hardening keamanan di bagian bawah berkas tanpa merusak aturan rewrite kustom Anda. - Jika sudah memiliki aturan hardening: mendeteksi dan mempertahankan berkas yang sudah terlindungi.
- Jika berkas belum ada: membuat
- Menyematkan Variabel Lingkungan ke
.env&.env.example:- Menambahkan blok konfigurasi lengkap (
SECURITY_*) disertai dokumentasi penjelasan fungsi berbahasa Indonesia langsung di bagian bawah berkas.envdan.env.example. - Menggunakan deteksi cerdas agar tidak terjadi duplikasi jika variabel sudah pernah ditambahkan sebelumnya.
- Menambahkan blok konfigurasi lengkap (
- Menyematkan Trait
HasSecurityRelationske Model User:- Secara otomatis mendeteksi model
User(app/Models/User.php) dan menambahkan importuse Internal\SecurityMonitor\Concerns\HasSecurityRelations;serta menyematkan traitHasSecurityRelations. - Idempotent: tidak akan menduplikasi jika trait sudah ada.
- Secara otomatis mendeteksi model
- Mendaftarkan Middleware WAF ke Aplikasi Host:
- Otomatis mendaftarkan
BlockIpAddressdanDetectSecurityThreatske dalambootstrap/app.php(Laravel 11 & 12) atauapp/Http/Kernel.php(Laravel 10). - Idempotent: memeriksa keberadaan middleware terlebih dahulu sebelum mendaftarkan.
- Otomatis mendaftarkan
- Menyiapkan Dukungan API & Berkas Rute Kustom (
routes/):- Memeriksa apakah berkas
routes/api.phpsudah tersedia. Jika belum (pada Laravel 11+), otomatis menjalankanphp artisan install:apiagar dukungan API aktif. - Menghasilkan berkas
routes/security-api.phpuntuk endpoint headless REST API dan menyertakannya diroutes/api.php(require __DIR__.'/security-api.php';). - Menghasilkan berkas
routes/security.phpuntuk rute web dashboard yang langsung me-render ke view dan menyertakannya diroutes/web.php(require __DIR__.'/security.php';). - Memberikan kebebasan penuh kepada developer untuk mengkustomisasi prefix URL, middleware, otorisasi, dan tampilan tanpa terkunci pada rute internal paket.
- Memeriksa apakah berkas
Opsi Perintah:
Bagian berjudul “Opsi Perintah:”| Opsi | Fungsi |
|---|---|
--force |
Menimpa seluruh berkas konfigurasi, migrasi, nginx.conf, dan public/.htaccess dengan template bawaan paket. |
--with-blade |
Mempublikasikan tampilan dashboard monitoring Blade (Livewire Starter Kit — Pure Vanilla CSS). |
--with-tsx |
Mempublikasikan tampilan dashboard monitoring TSX (Inertia + React Starter Kit — Pure Vanilla CSS). |
--with-both |
Mempublikasikan kedua tampilan dashboard monitoring sekaligus (Blade & TSX). |
--stack=... |
Menentukan stack dashboard yang ingin dipublikasikan (blade, tsx, both, none). |
--without-user-trait |
Melewatkan penyematan otomatis trait HasSecurityRelations ke model User. |
--without-middleware |
Melewatkan pendaftaran otomatis middleware WAF di bootstrap/app.php / Kernel.php. |
--without-routes |
Melewatkan pembuatan berkas rute routes/security.php dan routes/security-api.php. |
--without-api |
Melewatkan pemeriksaan dan instalasi rute API (install:api). |
--without-nginx |
Melewatkan publikasi berkas nginx.conf jika server Anda tidak menggunakan web server Nginx. |
--without-htaccess |
Melewatkan pembaruan berkas public/.htaccess jika Anda menggunakan Nginx murni dan tidak memerlukan Apache .htaccess. |
--with-htaccess |
Memaksa pembaruan berkas public/.htaccess dengan aturan hardening keamanan paket. |
--without-env |
Melewatkan penyematan variabel konfigurasi ke berkas .env dan .env.example. |
4. Publikasi Aset Manual via Vendor Publish
Bagian berjudul “4. Publikasi Aset Manual via Vendor Publish”Jika Anda ingin mempublikasikan aset secara bertahap atau terpisah:
1. Publikasikan Konfigurasi Saja
Bagian berjudul “1. Publikasikan Konfigurasi Saja”php artisan vendor:publish --tag=security-configBerkas akan ditempatkan di: config/security.php.
2. Publikasikan Migrasi Saja
Bagian berjudul “2. Publikasikan Migrasi Saja”php artisan vendor:publish --tag=security-migrationsBerkas migrasi akan disalin ke folder database/migrations/.
3. Publikasikan Berkas Rute Kustom
Bagian berjudul “3. Publikasikan Berkas Rute Kustom”# Publikasikan rute web dan API sekaligus:php artisan vendor:publish --tag=security-routes
# Atau publikasikan terpisah:php artisan vendor:publish --tag=security-routes-webphp artisan vendor:publish --tag=security-routes-apiBerkas akan ditempatkan di:
routes/security.php(rute web dashboard yang langsung me-render view).routes/security-api.php(rute headless REST API).
4. Publikasikan Template Nginx WAF Hardened Saja
Bagian berjudul “4. Publikasikan Template Nginx WAF Hardened Saja”php artisan vendor:publish --tag=security-nginxBerkas akan ditempatkan di root proyek: nginx.conf.
4. Publikasikan Template Apache .htaccess Hardened Saja
Bagian berjudul “4. Publikasikan Template Apache .htaccess Hardened Saja”php artisan vendor:publish --tag=security-htaccess --forceBerkas akan ditempatkan di: public/.htaccess.
5. Publikasikan Seluruh Aset Sekaligus
Bagian berjudul “5. Publikasikan Seluruh Aset Sekaligus”php artisan vendor:publish --tag=security-all --force6. Publikasikan Dashboard Monitoring Starter Kit
Bagian berjudul “6. Publikasikan Dashboard Monitoring Starter Kit”# Blade Starter Kit (Livewire + Flux UI)php artisan vendor:publish --tag=starterkit-blade
# React / TSX Starter Kit (Inertia + React + shadcn/ui)php artisan vendor:publish --tag=starterkit-tsx
# Keduanya (Blade & TSX)php artisan vendor:publish --tag=starterkit-allPerintah Blade menyalin enam halaman Livewire (single-file component) ke resources/views/pages/security/. Perintah TSX menyalin enam halaman Inertia/React ke resources/js/pages/security/ beserta komponen pendukung di resources/js/components/security/. Keduanya juga menyertakan konfigurasi dashboard pada config/security.php. Dashboard diakses di prefix /security dan wajib login (lihat bagian Dashboard Monitoring Starter Kit).
5. Menjalankan Migrasi Database
Bagian berjudul “5. Menjalankan Migrasi Database”Jalankan perintah migrasi Laravel untuk membuat tabel-tabel pendukung paket:
php artisan migrateTabel-tabel yang dibuat secara default:
blocked_ips: Menyimpan daftar karantina IP dan perangkat aktif/kedaluwarsa beserta hit counter.security_logs: Log audit ancaman keamanan, pola yang terdeteksi, bukti payload, dan aksi mitigasi.login_attempts: Pelacakan kegagalan login bertingkat (stepped lockout) per kombinasi email & IP.ip_unblock_requests: Tiket banding pembukaan blokir yang diajukan oleh pengguna publik.user_logins: Rekam jejak riwayat login pengguna, detail perangkat/browser, sesi aktif, dan waktu aktivitas terakhir.trusted_ips: Daftar alamat IP terpercaya per pengguna untuk otorisasi akses khusus.
6. Mendaftarkan Trait ke Model User (Standar Spatie)
Bagian berjudul “6. Mendaftarkan Trait ke Model User (Standar Spatie)”Buka model pengguna aplikasi Anda (biasanya app/Models/User.php) dan sertakan trait HasSecurityRelations:
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;use Internal\SecurityMonitor\Concerns\HasSecurityRelations;
class User extends Authenticatable{ use HasSecurityRelations;
// ... sisa model Anda}Metode relasi Eloquent yang otomatis tersedia:
$user->logins(): Mengambil seluruh riwayat login (HasManykeUserLogin).$user->trustedIps(): Mengambil daftar IP terpercaya milik pengguna (HasManykeTrustedIp).$user->securityLogs(): Mengambil audit ancaman yang diasosiasikan dengan akun ini (HasManykeSecurityLog).$user->blockedIps(): Mengambil daftar entri blokir yang dieksekusi oleh user admin ini (HasManykeBlockedIp).$user->resolvedTickets(): Mengambil daftar tiket banding yang diselesaikan oleh user admin ini (HasManykeIpUnblockRequest).
7. Mendaftarkan Middleware Keamanan ke Core Laravel
Bagian berjudul “7. Mendaftarkan Middleware Keamanan ke Core Laravel”Paket menyediakan 4 middleware terisolasi:
| Alias | Kelas Middleware | Peran |
|---|---|---|
security.block |
Internal\SecurityMonitor\Http\Middleware\BlockIpAddress |
Menolak request dari IP/perangkat yang sedang terblokir aktif (HTTP 403). |
security.detect |
Internal\SecurityMonitor\Http\Middleware\DetectSecurityThreats |
Menginspeksi payload request terhadap tanda-tanda serangan siber dan mengaktifkan auto-block/instant block. |
security.admin |
Internal\SecurityMonitor\Http\Middleware\EnsureSecurityAdmin |
Memastikan hanya user dengan wewenang admin yang dapat mengakses REST API admin. |
security.activity |
Internal\SecurityMonitor\Http\Middleware\TrackUserActivity |
Memperbarui heartbeat aktivitas login pengguna di database (ter-throttle 45 detik). |
Pendaftaran pada Laravel 11 / 12 / 13 (bootstrap/app.php)
Bagian berjudul “Pendaftaran pada Laravel 11 / 12 / 13 (bootstrap/app.php)”use Illuminate\Foundation\Application;use Illuminate\Foundation\Configuration\Middleware;use Internal\SecurityMonitor\Http\Middleware\BlockIpAddress;use Internal\SecurityMonitor\Http\Middleware\DetectSecurityThreats;use Internal\SecurityMonitor\Http\Middleware\TrackUserActivity;
return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // Pasang di lapisan global $middleware->append(BlockIpAddress::class); $middleware->append(DetectSecurityThreats::class);
// Pasang di grup web untuk pelacakan aktivitas user login $middleware->web(append: [ TrackUserActivity::class, ]); }) ->create();Pendaftaran pada Laravel 10 (app/Http/Kernel.php)
Bagian berjudul “Pendaftaran pada Laravel 10 (app/Http/Kernel.php)”Buka app/Http/Kernel.php dan tambahkan ke array $middleware:
protected $middleware = [ // ... \Internal\SecurityMonitor\Http\Middleware\BlockIpAddress::class, \Internal\SecurityMonitor\Http\Middleware\DetectSecurityThreats::class,];Tips Opsi Otomatis (Zero-Touch): Jika Anda mengatur
SECURITY_AUTO_REGISTER_MIDDLEWARE=truedi berkas.env, paket akan otomatis menyuntikkanBlockIpAddressdanDetectSecurityThreatske Kernel HTTP aplikasi secara otomatis saat booting.
8. Dashboard Monitoring Starter Kit (Opsional)
Bagian berjudul “8. Dashboard Monitoring Starter Kit (Opsional)”Paket tetap 100% headless secara default. Bila aplikasi host menggunakan starter kit resmi Laravel, Anda dapat mengaktifkan panel monitoring siap pakai. Pilih salah satu stack.
A. Livewire Starter Kit (Flux UI)
Bagian berjudul “A. Livewire Starter Kit (Flux UI)”php artisan vendor:publish --tag=starterkit-livewireB. React Starter Kit (Inertia + React + shadcn/ui)
Bagian berjudul “B. React Starter Kit (Inertia + React + shadcn/ui)”php artisan vendor:publish --tag=starterkit-react
# Setelah publikasi tampilan React, bangun ulang aset frontendnpm run buildℹ️ Halaman React di-render server-side melalui controller Inertia bawaan paket (tidak melalui REST API
/api/*), sehingga cookie sesi Laravel langsung bekerja.
Mengaktifkan
Bagian berjudul “Mengaktifkan”# Aktifkan di .env# SECURITY_DASHBOARD_ENABLED=true# SECURITY_DASHBOARD_DRIVER=livewire # atau "react"# SECURITY_DASHBOARD_PREFIX=security
# Bersihkan cachephp artisan optimize:clearPanel tersedia di /security dan berisi enam modul: Overview, Security Logs, Blocked IPs, Server Audit, User Sessions, dan Unblock Appeals.
Keamanan & Kontrol Akses
Bagian berjudul “Keamanan & Kontrol Akses”- Rute hanya didaftarkan ketika
security.dashboard.enabled=truedan stack frontend yang sesuai (driver) terpasang (Livewire atau Inertia). - Seluruh rute memakai middleware
web+auth(wajib login) dan, secara bawaan,security.admin(Gatemanage-security-monitor). - Kustomisasi melalui
config/security.php:'dashboard' => ['enabled' => (bool) env('SECURITY_DASHBOARD_ENABLED', false),'driver' => env('SECURITY_DASHBOARD_DRIVER', 'livewire'),'prefix' => env('SECURITY_DASHBOARD_PREFIX', 'security'),'middleware' => ['web', 'auth'],'admin_middleware' => ['Internal\\SecurityMonitor\\Http\\Middleware\\EnsureSecurityAdmin'],],