Aplikasinya udah jadi di laptop. Semua fitur jalan, tampilannya oke, database-nya rapi. Rasanya tinggal "pindahin ke server", beres. Ternyata, di sinilah bagian yang jarang diceritain orang baru dimulai.
Karena satu hal yang saya pelajari berkali-kali: "jalan di laptop" dan "jalan di server" itu dua dunia yang beda. Dan yang bikin nyangkut biasanya bukan kode yang keren-keren, tapi hal-hal remeh yang nggak keliatan.
Setup-nya: satu server biasa, nggak neko-neko
Sesuai rencana dari awal, smart_sppg saya taruh di satu VPS biasa — bukan cloud mahal. Susunannya kira-kira begini: backend jalan sebagai proses yang dijaga (biar kalau mati, otomatis nyala lagi), lalu di depannya ada nginx yang tugasnya dua — nyajiin tampilan ke pengunjung, dan nerusin panggilan API ke backend.
Database-nya saya kasih user khusus yang aksesnya dibatasi — cuma boleh ngutak-atik database smart_sppg, nggak lebih. Ini kebiasaan kecil tapi penting: kalau suatu hari ada yang bobol, kerusakannya nggak nyebar ke mana-mana.
Terus dikasih subdomain sendiri plus HTTPS. Di atas kertas, harusnya langsung jalan. Kenyataannya... nggak semulus itu.
Masalah 1: file pengaturan yang "hilang"
Begitu dinyalain di server, backend-nya ngambek. Nggak bisa konek ke database. Padahal di laptop mulus-mulus aja.
Setelah diubek-ubek, ketemu biang keroknya — dan ini yang bikin saya senyum kecut. Aplikasinya nyari file pengaturannya (yang isinya alamat database, kunci rahasia, dan lain-lain) di folder yang salah.
Ceritanya, si penjaga proses tadi ngejalanin aplikasinya dari folder induk, bukan dari folder tempat file pengaturannya berada. Jadi aplikasinya nengok ke kiri, padahal filenya ada di kanan. Ya nggak ketemu.
Solusinya sederhana begitu tahu masalahnya: saya kasih tahu si penjaga proses, "jalankan aplikasinya dari folder ini, ya." Langsung ketemu, langsung konek.
Pelajarannya: di server, tempat aplikasimu "berdiri" itu ngaruh. Hal sepele kayak "lagi di folder mana" bisa bikin aplikasi yang sempurna jadi mati total.
Masalah 2: teman opsional bernama Redis
Masalah kedua: aplikasinya pengen pakai Redis buat cache (biar lebih kenceng), tapi Redis-nya belum kepasang di server.
Untungnya, ini udah saya antisipasi dari awal. Cache-nya saya bikin opsional — ada sakelarnya. Jadi pas Redis belum ada, tinggal matiin sakelarnya, dan aplikasinya tetap jalan normal. Cuma sedikit lebih lambat, tapi nggak sampai ngeblok peluncuran.
Setelah semuanya beres dan stabil, baru saya pasang Redis-nya dan nyalain lagi sakelarnya buat dapetin performa penuh.
Pelajarannya: bikin hal-hal yang nggak wajib jadi opsional. Jangan sampai satu komponen kecil yang belum siap bikin seluruh peluncuran tertahan.
Satu keputusan kecil yang nyelametin
Ada satu hal yang saya syukuri pas deploy: frontend-nya ngobrol ke backend pakai alamat relatif — cukup nulis "/v1", bukan alamat web lengkap yang dipatok mati.
Kenapa ini penting? Karena jadinya frontend nggak peduli lagi dia lagi di domain apa. Mau di laptop, mau di link uji coba, mau di domain asli — sama aja, nggak perlu di-build ulang. Kelihatannya sepele, tapi ini nyelametin saya dari kerepotan yang lumayan.
(Jujur, saya belajar ini justru dari proyek lain yang alamatnya kepatok mati, dan bikin repot banget pas pindah server. Sekali kena, langsung kapok.)
Penutup: dari Excel ke sistem yang hidup
Kalau ditarik ke belakang, perjalanannya lumayan jauh. Dari satu dapur yang operasionalnya masih penuh Excel dan catatan kertas, sampai jadi sistem yang bisa mantau semuanya secara langsung — dan sekarang bisa dicoba siapa aja lewat internet.
Yang paling saya suka dari proyek ini bukan bagian canggihnya, tapi justru bagian yang "membumi": ngerti masalah nyata orang, terus nyari cara paling masuk akal buat nyelesainnya. Kadang jawabannya teknologi keren, kadang cuma sakelar on/off yang ditaruh di tempat yang tepat.
Makasih udah nemenin sampai chapter terakhir. Kalau kamu lagi mikir buat bikin sistem serupa, semoga cerita ini ada gunanya.
Terakhir, silakan main-main ke demo smart_sppg — login pakai akun demo yang tertera, dan lihat sendiri hasil dari semua cerita di seri ini.