Solusi Mengakses Database Lokal (IP Private) Secara Online
Salah satu tantangan bagi software developer untuk aplikasi bisnis berbasis desktop adalah ketika klien meminta untuk mengonlinekan database mereka. Karena memang rata-rata aplikasi desktop hanya digunakan untuk keperluan internal kantor/perusahaan.
Biasanya ada beberapa solusi yang bisa kita tawarkan, ketika klien menginginkan database lokal mereka (ip private) bisa diakses secara online, seperti:
- Upgrade paket internet, jika klien kita berlangganan paket internet indihome bisa upgrade ke paket enterprise, tapi klo berat dibiaya bisa langganan IP Dynamic Indihome. Apakah masalah sudah selesai sampai di sini? Engga juga sih, kita masih harus menyeting portforwarding dan setting-lainnya lainya.
- Menggunakan software VPN seperti Hamachi, ZeroTier, atau SoftEther VPN, tapi cara kedua ini akan mengurangi koneksi internet kita karena harus menyediakan jalur untuk koneksi VPNnya.
- Menyewa layanan
Shared Hosting
, biaya langganannya juga lumayan murah, sekitar 100 ribuan pertahun. Dengan menyewa layananShared Hosting
berarti kita harus membuat copyan database lokal untuk ditempatkan diShared Hosting
agar bisa diakses secara online. Tantangannya adalah kita harus membuat aplikasi kecil yang bertugas menyinkronkan database lokal dan database yang ada diShared Hosting
. - Membuat sendiri service yang berfungsi sebagai gateway yang bertugas menjembatani antara aplikasi klien dan database. Untuk cara yang terakhir ini kita membutuhkan sebuah server dengan ip public, contoh disini saya menyewa VPS dengan OS Linux (Ubuntu) di digitalocean.
Nah dipostingan ini kita akan membahas solusi terakhir. Idenya adalah kita ingin memberikan kemudahan kepada klien/customer dalam menggunakan aplikasi yang kita buat, jadi dengan konfigurasi yang sangat minim sekali, aplikasi client bisa langsung konek ke database. Keuntungan lainnya adalah dengan cara ini bisa dijadikan lahan bisnis untuk layanan sewa server, jadi klo klien ingin databasenya bisa diakses secara online ya harus sewa server dulu hehehe
Karena postingan kali ini adalah hasil dari riset komersil yang saya kerjakan, jadi saya hanya akan membahas tentang arsitektur
dan teknologi
yang digunakan, tanpa kode ya… .
Arsitektur Aplikasi
Untuk arsitektur aplikasi yang digunakan seperti gambar berikut:
Keterangan gambar:
- Database yang diinstall di jaringan lokal, bisa database PostgreSql, FirebirdSql, SQL Server, MySQL, dan lain-lain. Tergantung database yang Anda gunakan.
-
WebSocketService – Aplikasi ini bisa diinstall secara terpisah atau satu mesin dengan database. Jadi aplikasi inilah yang terkoneksi langsung dengan database via jaringan lokal (LAN). Aplikasi ini dibuat menggunakan WinForm atau bisa juga berbasis windows service, intinya disesuaikan dengan kebutuhan Anda. Karena aplikasi ini menggunakan library SignalR Core untuk berkomunikasi dengan aplikasi WebSocketGateway yang ada di VPS, maka untuk menjalankan aplikasi ini minimal windows yang dibutuhkan adalah Windows 7 SP1 (.NET Framework 4.6.x).
-
WebSocketGateway – Aplikasi ini berfungsi sebagai WebSocket server, dibuat menggunakan ASP.NET Core. Selain bertugas untuk menghandle komunikasi via websocket (signalR), juga bertugas untuk menghandle komunikasi via http (web api). WebSocketGateway ini nantinya akan di deploy ke VPS dengan bantuan Docker.
-
Aplikasi klien, bisa berupa desktop, web dan mobile. Aplikasi ini akan berkomunikasi dengan WebSocketGateway via web api (web service)
Teknologi yang digunakan:
- ASP.NET Core, teknologi ini saya gunakan karena VPS yang disewa berbasis linux (Ubuntu)
- Websocket menggunakan SignalR
- Docker digunakan untuk mempermudah proses deploy aplikasi ASP.NET Corenya
Apa itu ASP.NET Core?
ASP.NET Core adalah sebuah framework yang bisa digunakan untuk membangun sebuah layanan Web API berbasis teknologi .NET. Framework ini adalah versi open-source dari ASP.NET, yang bisa berjalan di berbagai platform seperti macOS, Linux, dan Windows.
Untuk informasi lebih lanjut mengenai ASP.NET Core bisa Anda baca di sini.
Apa itu SignalR?
SignalR adalah library yang memudahkan kita untuk menambahkan fungsi komunikasi real-time pada aplikasi yang kita kembangkan. Fungsi real-time di sini adalah kemampuan server melakukan pengiriman (push) konten atau data kepada client yang sudah terkoneksi ke server, sehingga server tidak perlu menunggu client untuk melakukan permintaan (request) data terbaru.
SignalR selain digunakan untuk pengembangan aplikasi web, juga bisa digunakan untuk platform lainnya seperti desktop (console dan windows form) ataupun mobile (windows phone, android dan iOS).
SignalR menyediakan API yang memungkinkan server memanggil fungsi/method yang dimiliki oleh client atau pun sebaliknya. Proses memanggil method secara remote ini dikenal dengan istilah remote procedure call (RPC).
Komunikasi antara client dan server SignalR dibangun di atas koneksi WebSocket.
Beberapa waktu lalu saya pernah menulis implementasi SignalR untuk aplikasi berbasis windows yang bisa Anda baca disini.
Apa itu Docker?
Docker adalah teknologi container yang memudahkan kita untuk melakukan proses deployment
aplikasi ke berbagai platform (macOS, Linux, dan Windows). Untuk informasi lebih lanjut tentang Docker, bisa Anda baca disini.
Demo Aplikasi
Cara menghubungan aplikasi klien (desktop atau mobile) dengan WebSocketService sangat mudah, cukup menginputkan app id yang ditampilkan aplikasi WebSocketService pada tab Pengaturan. Setelah itu aplikasi klien Anda langsung terhubung ke database lokal.
Jika Anda juga penasaran dengan cara kerja aplikasi ini, dan ingin mencoba langsung, bisa Anda download demonya di sini.
Selamat mencoba
Comments