Day 28 — Konfigurasi Storage & Verifikasi Fitur di Production
Fase: 3 — Deployment | Minggu: 6 | Hari: Rabu
🎯 Tujuan Hari Ini
- Memastikan fitur upload file berfungsi penuh di environment production.
- Memahami tantangan storage di cloud/PaaS dan solusinya.
- Melakukan verifikasi end-to-end semua fitur SIMAS di URL production.
- Mengisi database production dengan data demo yang realistis.
- Pengenalan dasar custom domain (opsional).
📖 Penjelasan: Tantangan Storage di Cloud
Di development (laptop), kamu menyimpan file upload di storage/app/public/ — folder lokal di komputermu. Di cloud Production seperti Railway, ada satu masalah besar:
Setiap kali aplikasi di-redeploy, semua file yang tersimpan di server AKAN TERHAPUS.
Ini karena platform PaaS menggunakan ephemeral filesystem — artinya disk tidak permanen antar deployment.
Solusi: Object Storage
Untuk production yang sesungguhnya, file harus disimpan di layanan object storage yang terpisah dari server aplikasi:
| Layanan | Harga | Cocok untuk |
|---|---|---|
| AWS S3 | Bayar per GB/request | Production enterprise |
| Cloudflare R2 | Gratis s.d. 10GB/bulan | Proyek kecil-menengah |
| Supabase Storage | Gratis s.d. 1GB | Proyek pembelajaran |
| MinIO (self-host) | Server sendiri | Lab/on-premise |
NOTE
Untuk keperluan demo & presentasi magang, menyimpan di local disk production sudah cukup. File akan hilang setelah redeploy, tapi selama tidak ada redeploy saat demo, fitur akan berjalan. Untuk aplikasi nyata, gunakan Cloudflare R2 atau AWS S3.
🔧 Step-by-Step: Konfigurasi Storage di Production
Opsi A: Local Storage (Cukup untuk Demo Magang)
Tidak perlu perubahan kode. Cukup pastikan php artisan storage:link dijalankan saat startup (sudah ada di railway.json dari Day 27).
Opsi B: Cloudflare R2 sebagai Permanent Cloud Storage
Jika ingin file tersimpan permanen, ikuti langkah ini:
Step 1: Buat akun Cloudflare R2
- Daftar di cloudflare.com → masuk ke R2 Object Storage
- Buat bucket baru, misal:
simas-assets - Buat API Token dengan akses Read & Write ke bucket tersebut
- Catat:
Account ID,Access Key ID,Secret Access Key,Endpoint URL
Step 2: Install AWS SDK (R2 compatible dengan S3 API)
composer require league/flysystem-aws-s3-v3Step 3: Konfigurasi config/filesystems.php
Tambahkan disk baru:
// config/filesystems.php
'disks' => [
// ... disk lainnya ...
'r2' => [
'driver' => 's3',
'key' => env('CLOUDFLARE_R2_ACCESS_KEY'),
'secret' => env('CLOUDFLARE_R2_SECRET_KEY'),
'region' => 'auto',
'bucket' => env('CLOUDFLARE_R2_BUCKET'),
'url' => env('CLOUDFLARE_R2_URL'),
'endpoint' => env('CLOUDFLARE_R2_ENDPOINT'),
'use_path_style_endpoint' => true,
],
],Step 4: Tambahkan ke .env production (Railway Variables)
CLOUDFLARE_R2_ACCESS_KEY=your_access_key
CLOUDFLARE_R2_SECRET_KEY=your_secret_key
CLOUDFLARE_R2_BUCKET=simas-assets
CLOUDFLARE_R2_ENDPOINT=https://account_id.r2.cloudflarestorage.com
CLOUDFLARE_R2_URL=https://pub-xxx.r2.dev # URL publik bucket
FILESYSTEM_DISK=r2 # Ganti ke disk r2✅ Verifikasi End-to-End di Production
Sekarang buka URL production Railway-mu dan lakukan pengujian berikut secara urut:
Checklist Verifikasi Fitur
1. CRUD Category
- [ ] Buat kategori baru → berhasil tersimpan
- [ ] Edit kategori → berhasil diperbarui
- [ ] Validasi nama duplikat → muncul pesan error
2. CRUD Asset + Upload Foto
- [ ] Buat aset baru dengan foto → foto berhasil ter-upload
- [ ] Foto tampil di halaman daftar dan detail
- [ ] Edit aset dengan ganti foto → foto lama terganti
- [ ] Hapus aset → tidak ada error 500
3. Modul Peminjaman
- [ ] Catat peminjaman baru → stok berkurang
- [ ] Proses pengembalian → stok bertambah
- [ ] Validasi stok tidak cukup → muncul pesan error
4. Export Excel & PDF
- [ ] Tombol Export Excel di
/assets→ file ter-download - [ ] Tombol Export Excel di
/loans→ file ter-download - [ ] Tombol Export PDF di
/loans→ file ter-download - [ ] Isi file export sesuai data yang ada di database
5. Dashboard
- [ ] Widget statistik menampilkan angka yang akurat
🌐 Custom Domain (Opsional — Bonus)
Jika kamu memiliki domain sendiri (bisa beli seharga Rp 15rb/tahun di Niagahoster), kamu bisa menghubungkannya ke Railway:
- Di Railway → service aplikasi → tab "Settings" → bagian "Domains"
- Klik "Add Custom Domain" → masukkan domain, misal
simas.domainku.id - Railway akan memberikan CNAME record yang perlu ditambahkan di pengaturan DNS domain
- Tambahkan CNAME record tersebut di panel DNS provider domain kamu
- Tunggu 5-30 menit untuk propagasi DNS
- Railway akan otomatis menerbitkan SSL certificate (HTTPS) gratis via Let's Encrypt
📝 Laporan Progress Deployment Hari Ini
Setiap peserta mengisi form berikut:
Nama : [Nama]
URL Aplikasi : https://...
Status Deployment : ✅ Online / ❌ Gagal
Fitur yang berfungsi di production:
[x] CRUD Category
[x] CRUD Asset + Upload
[x] Peminjaman & Pengembalian
[x] Export Excel
[x] Export PDF
[x] Dashboard
Kendala yang ditemukan:
[Tuliskan kendala jika ada]
Cara mengatasi kendala:
[Tuliskan solusi yang ditemukan]TIP
Screenshot URL production yang menampilkan SIMAS dan simpan sebagai bukti deployment untuk portfolio. Tambahkan screenshot ini ke README.md di GitHub!