Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

VPN dengan Wireguard Bagian VI : Setup VPN Server dengan wg-easy

Setup VPN Server dengan easy-wg

Beberapa waktu yang lalu, saya sudah pernah menulis tentang aplikasi VPN bernama Wireguard secara komprehensif. Total ada 5 artikel, yaitu :

Seiring dengan perkembangan zaman, saat ini setup Wireguard semakin mudah. Setidaknya untuk skenario seperti di artikel nomor 2 di atas, sudah banyak aplikasi yang memudahkan. Salah satu yang cukup mudah digunakan adalah wg-easy. Dia menggunakan pendekatan Docker, sehingga kita tidak perlu repot melakukan setting server. Tinggal run saja docker imagenya.

Berikut adalah cara setup untuk menjalankan wg-easy yang dilengkapi dengan Nginx Front Proxy dengan sertifikat SSL dari Letsencrypt.

Lanjut membaca ...


Optimasi Docker Image Spring Boot

Pada artikel terdahulu, kita sudah membahas pembuatan docker image untuk aplikasi berbasis Spring Boot. Kita membuat docker image dengan empat baris perintah dalam file Dockerfile seperti ini

FROM openjdk:latest
ADD target/belajar-ci.jar /opt/app.jar
RUN bash -c 'touch /opt/app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/opt/app.jar"]

Walaupun sederhana dan mudah, ada beberapa kekurangan dari Dockerfile tersebut, yaitu:

Lanjut membaca ...


Kartu Nama Digital

Pada jaman sekarang, penggunaan kertas sudah semakin ditinggalkan. Untuk dokumen-dokumen yang butuh tandatangan, bahkan sudah bisa kita gunakan tanda tangan digital. Sehingga tidak perlu diprint, pasang meterai, tanda tangan, stempel, dan scan lagi.

Akan tetapi, masih sering kita menemui pertukaran kartu nama. Saya sendiri sebetulnya termasuk orang yang paling malas pakai kartu nama. Pernah cetak satu box, sudah belasan tahun masih belum habis.

Untuk itu, saya mencari cara untuk membuat kartu nama digital. Jadi kita desain yang keren, kemudian kita berikan QR code yang apabila discan, akan langsung bisa disimpan ke contact / address book di handphone.

Berikut cara membuatnya

Lanjut membaca ...


Enkripsi Data dalam Aplikasi

Tahun lalu, kita sudah membahas cara enkripsi data di aplikasi menggunakan Vault. Enkripsi data menggunakan Vault lebih aman, dan saat ini bahkan sudah diterima untuk mengajukan sertifikasi PCI-DSS. Walaupun demikian, untuk aplikasi kecil, yang dijalankan oleh perusahaan yang tidak memiliki personel IT operation yang memadai, agak sulit untuk mengelola instalasi Vault server.

Oleh karena itu, pada artikel ini, kita akan membahas metode enkripsi data yang lebih mudah dikelola di production. Akan tetapi, perlu saya tekankan sebelumnya bahwa keamanan enkripsi terutama terletak pada kerahasiaan kunci enkripsi. Dengan Vault, kunci enkripsi disimpan dengan aman. Dengan metode ini, kunci enkripsi disimpan tertulis secara plaintext di server aplikasi. Walaupun kita set permission agar cuma bisa diakses oleh user root, tetap ini adalah resiko security yang besar. Anyway, setidaknya data sensitif user aplikasi tidak tersimpan dalam format plain text.

Kita akan menggunakan algoritma AES untuk mengenkripsi data dan file milik user. Konsep dasar dan contoh kode programnya sudah pernah kita bahas di artikel terdahulu. Di artikel ini, kita akan mengaplikasikan artikel tersebut ke dalam aplikasi Spring Boot.

Lanjut membaca ...


External Services dengan Docker Compose

Di jaman sekarang, aplikasi yang saya buat umumnya sudah mengadopsi arsitektur Cloud Native, yaitu aplikasi yang bisa berjalan dengan baik di environment cloud. Penjelasan detail tentang aplikasi Cloud Native ini sudah pernah saya jelaskan di Youtube.

Singkatnya, aplikasi cloud native biasanya menggunakan beberapa external services, misalnya:

  • Database relasional (MySQL, PostgreSQL, dsb)
  • Message Broker (Kafka, dsb)
  • Database non-relasional / NoSQL (Redis, Elasticsearch, dsb)

External service ini harus bisa diganti dengan implementasi lain, misalnya dari local ke cloud, dari cloud ke on-premise, dan berbagai skenario lainnya.

Agar kita bisa develop aplikasi dengan external service tersebut, maka development environment kita (misalnya PC atau laptop) harus menyediakan service yang dibutuhkan. Kebutuhan ini berbeda-beda antar project. Misal di project A saya menggunakan MySQL. Project B menggunakan PostgreSQL. Project C menggunakan PostgreSQL dan Kafka. Project D menggunakan MySQL dan Redis. Project E menggunakan ElasticSearch dan MongoDB. Dan seterusnya.

Apabila kita harus menginstal semua service tersebut, dan jalan pada waktu booting, waduh berapa RAM yang harus kita sediakan. Belum lagi nanti kita harus membuatkan database instance untuk masing-masing aplikasi. Bisa-bisa kita instal MySQL yang isinya belasan database sesuai dengan project yang pernah kita tangani.

Ini juga menjadi lebih sulit buat para team leader atau arsitek yang harus melakukan supervisi ke banyak project sekaligus. Oleh karena itu, kita perlu membuat sistem kerja yang baik agar tidak kusut.

Solusi yang biasa saya gunakan, terdiri dari 3 aspek:

  1. Project harus portable
  2. Project harus self-contained
  3. External service yang dibutuhkan, harus dideklarasikan dengan konsep Infrastructure as a Code

Mari kita elaborasi …

Lanjut membaca ...