Aplikasi e-commerce berbasis Laravel 13 yang dibangun dengan stack modern: Filament v5 untuk panel admin, Livewire v4 untuk UI frontend yang reaktif, Midtrans sebagai payment gateway, serta sistem manajemen produk, transaksi, dan pembayaran yang modular.
- Fitur Utama
- Tech Stack
- Prasyarat
- Instalasi
- Instalasi via Docker
- Konfigurasi Environment
- Menjalankan Aplikasi
- Akun Default
- Struktur Modul
- Perintah Artisan Tambahan
- Storefront publik — homepage builder (mason blocks: banner, brand, produk unggulan, testimoni, dll.), halaman eksplorasi produk, detail produk.
- Keranjang & Checkout — cart management, checkout flow terintegrasi dengan transaksi.
- Pembayaran via Midtrans — mendukung berbagai metode pembayaran, webhook otomatis.
- Dashboard pelanggan — riwayat transaksi, riwayat pembayaran, pengaturan akun.
- Panel Admin (Filament) — manajemen produk, brand, kategori, varian, transaksi, pembayaran, role & permission, pengaturan situs.
- Homepage Builder — konfigurasi tampilan homepage langsung dari panel admin menggunakan Awcodes Mason.
- SEO otomatis — integrasi
ralphjsmit/laravel-seo+ sitemap generator. - Queue & Real-time — Laravel Horizon untuk queue, Laravel Reverb untuk WebSocket.
| Layer | Teknologi |
|---|---|
| Framework | Laravel 13 (PHP ^8.3) |
| Frontend | Livewire v4, Tailwind CSS v4, Vite |
| Admin Panel | Filament v5 |
| Payment Gateway | Midtrans (via codewithdiki/payment-module) |
| Queue | Laravel Horizon |
| WebSocket | Laravel Reverb |
| Permission | Spatie Laravel Permission v7 |
| Settings | Spatie Laravel Settings v3 |
| SEO | ralphjsmit/laravel-seo |
| Sitemap | Spatie Laravel Sitemap v8 |
| Database (dev) | SQLite (default) / MySQL |
Pastikan environment lokal kamu sudah memiliki:
- PHP >= 8.3 (dengan ekstensi:
pdo,pdo_sqliteataupdo_mysql,mbstring,openssl,tokenizer,xml,ctype,json,curl) - Composer >= 2
- Node.js >= 20 & npm >= 10
- SQLite (default) atau MySQL / PostgreSQL
- Redis (opsional, dipakai untuk cache & queue di production)
git clone <url-repositori> toko-online
cd toko-onlineProyek ini menggunakan package privat dari codewithdiki (payment-module, transaction-module, product-module) yang di-host di repository privat https://dikiakbarasyidiq.dev. Ikuti langkah berikut sebelum menjalankan composer install:
Daftar akun di https://dikiakbarasyidiq.dev/auth/register.
Setelah berhasil mendaftar, buka halaman Dashboard → Account untuk melihat license key kamu.
Salin license key kamu, lalu jalankan perintah berikut di terminal (ganti <license_key> dengan license key milikmu):
composer config bearer.dikiakbarasyidiq.dev <license_key>Perintah ini menyimpan token autentikasi ke file auth.json lokal Composer agar bisa mengakses repository privat.
Pastikan blok repositories berikut sudah ada di composer.json (jika belum, tambahkan):
{
"repositories": [
{
"type": "composer",
"url": "https://dikiakbarasyidiq.dev"
}
]
}Repository ini sudah tercantum secara default di file
composer.jsonproyek ini.
composer installnpm installcp .env.example .envphp artisan key:generateCara alternatif menjalankan aplikasi tanpa perlu menginstall PHP, Node.js, atau Redis secara lokal. Stack yang berjalan:
| Service | Keterangan |
|---|---|
app |
PHP-FPM — menjalankan aplikasi Laravel |
nginx |
Web server, melayani static files & proxy ke PHP-FPM |
horizon |
Laravel Horizon — queue worker |
reverb |
Laravel Reverb — WebSocket server |
redis |
Cache, sessions, dan queue backend |
- Docker Desktop >= 4.x (sudah termasuk BuildKit)
- Docker Compose v2
git clone <url-repositori> toko-online
cd toko-onlinePaket codewithdiki/* di-host di https://dikiakbarasyidiq.dev. Dapatkan license key dari https://dikiakbarasyidiq.dev/auth/register, lalu pilih salah satu metode berikut sesuai environment:
Cara paling aman untuk development lokal. Token tidak pernah masuk ke image layer karena dibaca via BuildKit secret.
composer config bearer.dikiakbarasyidiq.dev <license_key>Perintah tersebut akan membuat (atau mengupdate) file auth.json di root project seperti ini:
{
"bearer": {
"dikiakbarasyidiq.dev": "<license_key>"
}
}File ini sudah masuk
.gitignore— jangan pernah di-commit.
Untuk platform cloud seperti Helipod, Railway, Fly.io, atau CI pipeline yang tidak bisa menyediakan file auth.json secara fisik, gunakan environment variable COMPOSER_AUTH. Tambahkan baris berikut ke .env:
COMPOSER_AUTH='{"bearer":{"dikiakbarasyidiq.dev":"<license_key>"}}'Variable ini dibaca sebagai build arg saat docker compose build dan menjadi prioritas utama — auth.json tidak dibutuhkan sama sekali.
Urutan prioritas saat build:
COMPOSER_AUTHbuild arg (dari.envatau platform secrets) — tertinggiauth.jsonvia BuildKit secret (docker compose buildlokal)auth.jsondi build context (fallbackdocker buildbiasa)
cp .env.example .envLalu buka .env dan sesuaikan nilai berikut untuk Docker:
APP_KEY= # diisi di langkah berikutnya
APP_URL=http://localhost
# Redis — gunakan nama service, bukan 127.0.0.1
REDIS_HOST=redis
# Queue & cache — pakai Redis
QUEUE_CONNECTION=redis
CACHE_STORE=redis
SESSION_DRIVER=redis
# Broadcast via Reverb
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=1001
REVERB_APP_KEY=laravel-herd
REVERB_APP_SECRET=secret
# Reverb server (di dalam container)
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
# Reverb external — diakses browser lewat Nginx port 80
REVERB_HOST=localhost
REVERB_PORT=80
REVERB_SCHEME=http
# Midtrans
MIDTRANS_SERVER_KEY=your-server-key
MIDTRANS_CLIENT_KEY=your-client-key
MIDTRANS_IS_PRODUCTION=false
MIDTRANS_IS_SANITIZED=true
MIDTRANS_IS_3DS=falsedocker compose build
docker compose up -dSaat build, Composer akan mengautentikasi ke dikiakbarasyidiq.dev menggunakan kredensial dari salah satu metode di langkah 2. Token tidak pernah tersimpan di dalam image layer.
Kalau deploy ke domain tertentu (bukan
localhost), pastikanAPP_DOMAINsudah diset di.envsebelum build agar URL Reverb ikut terbake ke dalam aset JS:APP_DOMAIN=yourdomain.com
docker compose exec app php artisan key:generate# Jalankan migrasi
docker compose exec app php artisan migrate
# Seed role
docker compose exec app php artisan db:seed --class=RoleSeeder
# Seed data contoh
docker compose exec app php artisan db:seed --class=DatabaseSeederdocker compose exec app php artisan make:filament-userdocker compose exec app php artisan shield:setupAplikasi berjalan di http://localhost, panel admin di http://localhost/admin.
# Lihat status semua service
docker compose ps
# Tail log semua service
docker compose logs -f
# Tail log per service
docker compose logs -f horizon
docker compose logs -f reverb
# Restart service tertentu
docker compose restart horizon
# Masuk ke shell container app
docker compose exec app sh
# Hentikan semua service
docker compose down
# Hentikan dan hapus volume (reset database)
docker compose down -vNginx akan otomatis switch ke mode HTTPS jika sertifikat Let's Encrypt sudah tersedia. Sertifikat dikelola oleh service certbot yang sudah termasuk dalam docker-compose.yml.
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com
APP_DOMAIN=yourdomain.com
# Redis
REDIS_HOST=redis
QUEUE_CONNECTION=redis
CACHE_STORE=redis
SESSION_DRIVER=redis
# Reverb — browser konek lewat Nginx port 443
BROADCAST_CONNECTION=reverb
REVERB_HOST=yourdomain.com
REVERB_PORT=443
REVERB_SCHEME=https
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080Vite mem-bake URL Reverb ke dalam JS bundle pada saat build — pastikan APP_DOMAIN sudah diset di .env sebelum build:
docker compose build --no-cacheNginx akan start dalam mode HTTP terlebih dahulu untuk melayani ACME challenge dari Let's Encrypt:
docker compose up -ddocker compose --profile ssl run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d yourdomain.com \
--agree-tos \
--email admin@yourdomain.comPastikan DNS domain sudah mengarah ke IP server sebelum menjalankan perintah ini.
Setelah sertifikat berhasil di-issue, restart Nginx. Entrypoint-nya akan mendeteksi sertifikat secara otomatis dan mengaktifkan konfigurasi HTTPS:
docker compose restart nginxAplikasi sekarang berjalan di https://yourdomain.com.
Let's Encrypt sertifikat berlaku 90 hari. Tambahkan cron job di server untuk renew otomatis:
# Edit crontab
crontab -e
# Tambahkan baris berikut (renew tiap hari jam 03:00)
0 3 * * * cd /path/to/toko-online && docker compose --profile ssl run --rm certbot renew && docker compose restart nginxnginx start
└── /etc/letsencrypt/live/{domain}/fullchain.pem ada?
├── Ya → mode HTTPS (redirect HTTP → HTTPS, TLS 1.2/1.3)
└── Tidak → mode HTTP (melayani ACME challenge)
Buka file .env dan sesuaikan nilai berikut:
APP_NAME="CodeWithDiki Toko Online"
APP_URL=http://localhost:8000
APP_ENV=local
APP_DEBUG=trueSecara default aplikasi menggunakan SQLite. Tidak perlu konfigurasi tambahan.
DB_CONNECTION=sqliteJika ingin menggunakan MySQL, ubah menjadi:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=toko_online
DB_USERNAME=root
DB_PASSWORD=Daftar akun di https://midtrans.com, lalu isi:
MIDTRANS_SERVER_KEY=your-server-key
MIDTRANS_CLIENT_KEY=your-client-key
MIDTRANS_IS_PRODUCTION=false
MIDTRANS_IS_SANITIZED=true
MIDTRANS_IS_3DS=falseUntuk pengujian lokal, gunakan credential Sandbox dari dashboard Midtrans.
Default queue driver sudah menggunakan database, jadi tidak perlu Redis di lokal:
QUEUE_CONNECTION=database
BROADCAST_CONNECTION=logTAX_PERCENTAGE=0# Jalankan migrasi
php artisan migrate
# Seed role (super_admin, partner, customer)
php artisan db:seed --class=RoleSeeder
# Seed data contoh (user test@example.com)
php artisan db:seed --class=DatabaseSeederphp artisan make:filament-userIkuti prompt untuk memasukkan nama, email, dan password. Akun ini digunakan untuk login ke panel admin di /admin.
Setelah membuat akun super admin, jalankan perintah berikut untuk mengatur permission berbasis role di Filament:
php artisan shield:setupPerintah ini akan mendaftarkan semua policy dan permission yang dibutuhkan oleh Filament Shield. Jalankan sekali saat pertama kali setup.
Perintah berikut menjalankan development server, queue worker, log viewer, dan Vite dalam satu terminal:
composer devAplikasi akan berjalan di: http://localhost:8000
Perintah ini menggunakan
concurrentlyuntuk menjalankanphp artisan serve,php artisan queue:listen,php artisan pail, dannpm run devsecara bersamaan.
# Terminal 1 — PHP development server
php artisan serve
# Terminal 2 — Queue worker
php artisan queue:listen --tries=1 --timeout=0
# Terminal 3 — Vite (asset bundler)
npm run dev| Akun | Password | Keterangan | |
|---|---|---|---|
| Test User | test@example.com |
(diatur saat seed) | User biasa dari DatabaseSeeder |
| Super Admin | (diatur saat make:filament-user) |
(diatur manual) | Akses panel admin /admin |
Aplikasi ini menggunakan arsitektur modular via package internal codewithdiki/*:
| Package | Fungsi |
|---|---|
codewithdiki/product-module |
Manajemen produk, brand, kategori, varian, warna, ukuran, gambar, review |
codewithdiki/transaction-module |
Manajemen transaksi, item transaksi, diskon, log status, customer |
codewithdiki/payment-module |
Manajemen pembayaran, metode pembayaran, integrasi Midtrans webhook |
| Role | Deskripsi |
|---|---|
super_admin |
Akses penuh ke seluruh panel admin |
partner |
Akses terbatas (misalnya kelola produk) |
customer |
Pengguna frontend/toko |
| Perintah | Fungsi |
|---|---|
php artisan app:generate-sitemap |
Generate ulang public/sitemap.xml |
php artisan shield:generate --all |
Generate permission untuk semua resource Filament |
php artisan horizon |
Jalankan Laravel Horizon (queue dashboard) |
php artisan reverb:start |
Jalankan Laravel Reverb (WebSocket server) |
php artisan pail |
Tail log aplikasi secara real-time |
Jika ingin menjalankan semua langkah instalasi sekaligus, tersedia script setup di composer.json:
composer setupScript ini akan otomatis menjalankan:
composer install- Menyalin
.env.exampleke.env(jika belum ada) php artisan key:generatephp artisan migrate --forcenpm installnpm run build
Setelah selesai, tetap jalankan php artisan db:seed dan php artisan make:filament-user secara manual.
Panel admin tersedia di /admin dan dibangun dengan Filament v5. Fitur yang tersedia:
- Dashboard — statistik total penjualan, revenue, transaksi pending & failed.
- Kelola Situs — ubah nama situs, logo, deskripsi, info kontak, media sosial, SEO, dan builder homepage.
- Produk — brand, kategori, produk, varian, gambar, warna, ukuran, review.
- Transaksi — daftar transaksi, detail, update status, log perubahan.
- Pembayaran — metode pembayaran, grup metode, riwayat pembayaran.
- Pengguna & Role — manajemen user, role, dan permission (via Filament Shield).