Skip to content

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:

LayananHargaCocok untuk
AWS S3Bayar per GB/requestProduction enterprise
Cloudflare R2Gratis s.d. 10GB/bulanProyek kecil-menengah
Supabase StorageGratis s.d. 1GBProyek pembelajaran
MinIO (self-host)Server sendiriLab/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

  1. Daftar di cloudflare.com → masuk ke R2 Object Storage
  2. Buat bucket baru, misal: simas-assets
  3. Buat API Token dengan akses Read & Write ke bucket tersebut
  4. Catat: Account ID, Access Key ID, Secret Access Key, Endpoint URL

Step 2: Install AWS SDK (R2 compatible dengan S3 API)

bash
composer require league/flysystem-aws-s3-v3

Step 3: Konfigurasi config/filesystems.php

Tambahkan disk baru:

php
// 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:

  1. Di Railway → service aplikasi → tab "Settings" → bagian "Domains"
  2. Klik "Add Custom Domain" → masukkan domain, misal simas.domainku.id
  3. Railway akan memberikan CNAME record yang perlu ditambahkan di pengaturan DNS domain
  4. Tambahkan CNAME record tersebut di panel DNS provider domain kamu
  5. Tunggu 5-30 menit untuk propagasi DNS
  6. 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!

Program Magang SMK RPL — Rekayasa Perangkat Lunak (2 Bulan)