Linux Minipc untuk Remote Development
Tulisan ini adalah cerita bagaimana saya membuat Linux Ryzen Minipc sebagai alat bantu Development Jarak Jauh (Remote dev) saya menggunakan Laptop Windows sebagai mesin utama, namun hanya sebagai thin client yang mana terkoneksi dengan Minipc secara local dan global melalui jaringan VPN Tailscale.
#Sedikit Konteks
Ada beberapa masalah utama, kenapa saya perlu sebuah mesin Linux tambahan dalam cara kerja ngoding sehari-hari.
-
Terlibat dalam sebuah proyek yang melibatkan beberapa web service yang saling berkomunikasi. Bisa menjalankan semua services yang kita kembangkan di local machine adalah sebuah kewajiban buat saya, agar lebih produktif, karena bisa melakukan Inner Loop 1 dahulu, sebelum dilanjut Outer Loop tim (di test QA, lanjut fix oleh Developer).
-
Komponen web services sangat bervariasi dari proyek legacy PHP, golang, database Mysql, Redis dan Elasticsearch. Jika menjalankan semua komponen tersebut, lebih nyaman lewat docker atau podman, dan tentunya Perlu RAM yang cukup, saat itu saya hanya bermodalkan Macbook Air 2017 dengan RAM 8GB (T_T).
-
Kadang kala ngoprek juga perlu melalui Virtual Machine. Kenapa ? agar bisa replikasi infrastruktur semirip mungkin dengan kondisi lingkungan production, atau ingin uji coba sebuah ide tanpa mengotori host machine. Dalam kasus ini saya menggunakan Multipass, yang mana perlu tambahan RAM lagi dong.
Remote workstations are actually pretty awesome! Combined with wireguard.
— Ajey Gore (@AjeyGore) March 26, 2024
I think it’s just mental block that code must live on local machine.
#Persiapan Hardware
Biaya yang saya keluarkan sekitar 8jt Rupiah, berikut adalah rincian-nya
Tentu kamu bisa menghemat lagi, saya memilih mini pc karena penasaran akan performa Ryzen 7 dengan 8 core 16 thread-nya, bentuk-nya mungil tidak makan banyak tempat (^_^), untuk spesifikasi yang lebih budget contek dari tweet dibawah.
was curious so set up a build list
— Garindra Prahandono (@garindrapp) March 22, 2024
Ryzen 5600 + 2x8GB DDR4 + ASRock a520m + PNY nvme 512GB + Enlight matx case-PSU-combo
total's IDR 3.8 million or $240 for a box that's more powerful than Apple M1 (1.5x multicore passmark)
+ a crap $8 GPU from 2012 for initial setup
#Persiapan Software
#Tailscale
Singkat-nya dua mesin yang terpisah jaringan, dapat saling berhubungan asalkan sama-sama terkoneksi dengan Tailscale.
Minipc saya lokasi-nya di Bali, dengan Internet Biznet Home, sedangkan saya saat ini tinggal di Jakarta, dan memungkinkan terkoneksi dengan Minipc di Bali, dengan mengakses ip address yang didapat dari Tailscale.
Jika belum pernah coba Tailscale, saya sangat rekomendasikan untuk dicoba, karena dalam hal ini, komponen inilah yang paling penting.
#Setup SSH config
Kamu bisa buat ssh config di Windows sama hal-nya dengan di linux, ini bakal memudahkan connect ke remote host lewat Vscode.
File ini perlu di-simpan di ~/.ssh/config
atau C:\Users\<username>\.ssh\config
kalau di Windows, contoh-nya seperti ini.
1Host ser42 HostName 192.168.x.x3 User jimbo
maka selanjutnya jika perlu ssh ke minipc bisa dengan perintah ssh ser4
. Kamu mungkin perlu setup ssh-keygen terlebih dahulu dan ssh-copy-id untuk menghindari memasukan password setiap waktu.
#Vscode
- Install Remote SSH Extension
- Ctrl + Shift + P pilih Remote-SSH: Connect to Host
- Pilih nama Host sesuai ssh config
- Buka folder project dan terminal
- Jalankan services
- Port Forward
- Profit
#Mutagen.io
For https://t.co/3DDoYsiK4q I'm working exclusively on Linux VMs for a variety of reasons, using https://t.co/1dr6IctCfH (automatic rsync) to sync source files from my machine immediately.
— Simon Eskildsen (@Sirupsen) October 31, 2023
I've worked like this for 5 months now and had 0 problems
Ini hanya alternatif vscode remote ssh & port forward, kalau lagi pengen pakai Neovim, mutagen juga punya fitur manajemen port forwarding dan sync file antara remote dan local. Berikut contoh-nya, lebih lengkap-nya bisa cek di dokumentasi-nya.
1# Sync file remote ke local directory2mutagen sync create \3 --name=myproject ./project \4 ser4:~/clones/project --ignore-vcs5 6# Port forward7mutagen forward create \8 --name=ollama tcp:localhost:11434 \9 ser4:tcp:localhost:11434
#Tilt
Nah Tilt, adalah semacam perekat yang menyambungkan beberapa komponen pendukung development diatas.
- source code
- tasks seperti proses compile atau build container image
- service database yang jalan di docker compose
- deploy ke local Kubernetes cluster (untuk kasus saya)
dan webui-nya, menurut saya sungguh membantu untuk menampilkan log saat perlu debugging.
#Pengalaman Sejauh ini
Sangat puas!
- Bisa install service macam-macam tanpa khawatir kekurangan RAM, Docker atau Podman, MySQL, Elasticsearch, Ollama, Local kubernetes dengan Kind, atau Microk8s semua di dalam Minipc dengan RAM 64GB tentu-nya (〜 ̄▽ ̄)〜
- Inner loop untuk early feedback lebih sering, menambah rasa percaya diri, sebelum melempar kerjaan ke Outer loop
- Hemat baterai laptop, karena beban development lebih banyak ditanggung oleh Minipc