faultable home server 2021
5 min read

faultable home server 2021

Jika melihat ke riwayat transaksi di akun Tokopedia gue, sudah 6 bulan gue menjalankan server dari rumah dan totally sudah tidak bergantung dengan IaaS untuk menyewa sebuah VM.

Sebelumnya gue menggunakan Raspberry Pi 4 yang menjalankan distro Ubuntu sebagai home server gue. Overall lumayan oke, tantangannya hanyalah arsitektur CPU yang digunakan (ARM) dan somehow lebih sering gue gunakan untuk eksperimen (seperti membuat router) karena portabilitasnya hahaha.

Per tahun 2021, home server yang gue gunakan ada 2 yang basically hanyalah sebuah komputer bertipe "Mini PC" yang penampakannya adalah seperti berikut:

Intel NUC x Beelink

Spesifikasinya tidak high-end tapi surprisingly dapat memenuhi kebutuhan gue dan sejauh ini belum pernah crash. Spesifikasi singkatnya adalah seperti berikut:

  • Intel NUC KIT NUC7CJYH2 (CPU: Intel Celeron J4005 gen 7, RAM: 8GB, SSD: 120GB (internal), 500GB (external), OS: TrueNAS Core/FreeBSD)
  • Beelink GK35 (CPU: Intel Quad J3455 gen 8, RAM: 8GB, SSD: 120GB, OS: Ubuntu Server)

Untuk Router gue menggunakan EdgeRouter X nya Ubiquiti dan kalau untuk Switch gue menggunakan TL-SG105E nya TP-Link.

Strateginya, gue menggunakan si NUC untuk menyimpan data utama & data backup serta untuk menjalankan aplikasi-aplikasi yang berurusan dengan data seperti Postgresql, MariaDB, Redis, Metabase, dsb yang nanti akan gue bahas detailnya.

Dan kalau si Beelink, ini untuk menjalankan aplikasi-aplikasi yang tidak berkaitan dengan data secara langsung.

Sejauh ini ada 13 jails yang berjalan di si NUC dan ada 22 docker containers yang berjalan di si Beelink.

Agar server rumah gue dapat dijangkau oleh pengguna internet, gue menggunakan layanannya, ehm, Cloudflare daripada menggunakan Dynamic DNS karena gue males ribet hahaha.

Ilustrasinya adalah seperti ini:

Dari gambar diatas "routing match" nya ditentukan oleh Nginx (daripada dari cloudflared) karena gue ingin access log nya centralized ke goaccess gue dan selain itu karena males ribet juga hahaha. Si nginx (dan cloudflared) ini berjalan di beelink gue jadi setiap ada request, pasti lewat si beelink dulu dan latensi dari beelink ke nuc rata-rata ~0.7ms yang gue rasa bukanlah masalah besar.

Firewall

Khusus untuk server-server gue, gue cuma mengizinkan port 80 dan 443 yang masuk. Untuk devices gue yang lain terhubung ke router yang berbeda (tapi upstream nya tetap si edgerouter).

Firewall gue setting di edgerouter dan rules yang lumayan fleksibel dikhususkan untuk interface tailscale0 yang berjalan di router gue juga. Selebihnya (seperti WAN_IN) lumayan strict karena, ya, internet is wild.

Untuk non-wired devices (laptop, hp, tablet, dll) jika ingin mengakses server-server gue tersebut harus melalui Tailscale dan plus gue menggunakan fitur Subnet Router biar gak terlalu ribet.

VPN

Setiap server (alias setiap devices gue) pasti terpasang Tailscale agar gue bisa mengakses server gue darimana saja.

Kebutuhan sehari-harinya adalah untuk handle DNS query, mengakses NAS via SMB, SSH, sync direktori via Syncthing, dan masih banyak lagi untuk services yang hanya bisa diakses di jaringan lokal.

Gue memilih Tailscale karena konfigurasinya yang... hampir zero effort. Bahkan orang non IT seperti Karina pun bisa menggunakan mengkonfigurasi VPN tanpa pernah bertanya apa itu public/private key.

Tailscale dibuat diatas Wireguard, dan sepengalaman gue, jika menggunakan Wireguard secara langsung akan menjadi ribet jika alamat IP yang digunakan oleh perangkat kita bersifat dinamis. Selain itu, gue ingin agar antar perangkat gue dapat berkomunikasi secara peer-to-peer secara "automagically" meskipun di kasus langka terkadang traffic gue melalui DERP nya Tailscale yang menambah ~50-100ms latensi jika somehow tidak berhasil membuat komunikasi peer-to-peer.

Dan yeah, it just works.

Tailscale adalah "Mesh VPN" yang berarti tidak bergantung dengan "satu server" yang biasa disebut sebagai "VPN Gateway".

Terkadang gue menggunakan fitur Exit Nodes ketika sedang diluar jaringan rumah gue ketika mengakses layanan yang berkaitan dengan uang untuk menghindari "verifikasi ulang" ataupun karena dianggap terdapat aktivitas anomal.

Tailscale kurang cocok untuk "privacy-minded people" yang membutuhkan "VPN komersil" untuk "menyembunyikan" aktivitas mereka di internet (yang biasanya dari mata ISP). Hmm, sorry jika banyak tanda kutip di paragraf ini. Anyway, jika membutuhkan VPN komersil gue recommend menggunakan Mullvad atau jika memang benar-benar sangat ingin memproteksi aktivitas di internet, gue rekomendasi menggunakan Tor.

Data & Backup

Data utama disimpan di si NUC dan menggunakan File System ZFS daripda BTRFS sebagaimana yang digunakan di sistem operasi GNU/Linux.

Untuk sinkronisasi gue menggunakan Syncthing dan di si beelink gue hanya meng-sinkronisasi direktori /var/lib/docker/volumes.

Gue tidak mem-backup semua yang ada di NUC gue ke cloud ataupun kemanapun karena technically mesin tersebut adalah mesin backup. Tapi suatu saat—jika memang harus banget—akan gue pertimbangkan untuk backup ke cloud dengan catatan data yang diunggah harus ter-enkripsi.

Dan juga gue sudah tidak menggunakan NextCloud karena gue rasa sedikit overkill dan lumayan memakan memori.

Bagian yang paling ekstrimnya adalah external SSD gue mount via USB daripada via SATA ataupun PCIe karena... YOLO. Oke, karena gue tidak memiliki budget sebanyak itu, dan overall S.M.A.R.T status untuk external SSD yang gue gunakan (Seagate Ultra Touch) masih oke dengan error 0.

I/O throughput nya dapat ditoleransi karena gue rasa ~2GB/s cukup dan begitupula untuk network throughput nya yang mencapai ~1GiB/s ketika gue tes menggunakan iperf di jaringan lokal.

Kalau punya budget lebih gue recommend menggunakan NVMe jika melihat performa dari laptop yang gue gunakan sekarang.

Layanan

Intel NUC (FreeBSD, jails)

  1. Wordpress
  2. Wordpress
  3. Syncthing
  4. Gitea
  5. Redis
  6. Postgresql
  7. MariaDB
  8. Minio
  9. Metabase
  10. Radicale
  11. Navidrome
  12. Roundcube
  13. Plex
  1. Ripe Atlas
  2. Piped (frontend, backend, proxy)
  3. SearxNG
  4. Nginx Proxy Manager
  5. Pixelfed
  6. Libreddit
  7. Mastodon (frontend, worker, stream)
  8. UISP
  9. Watchtower
  10. Umami
  11. The Lounge
  12. Morty
  13. Espial
  14. Firefly III
  15. Ghost
  16. Ghost
  17. Keyoxide
  18. Nitter

Selain itu juga menjalankan blocky, dnsproxy, syncthing, dan cloudflared di mesin ini.

Stats

Karena limitasi dari Cloudflare, berikut ringkasan selama 30 hari analitik dari semua domain (termasuk blog ini) yang menggunakan server rumah gue:

Angka tersebut relatif kecil tapi setidaknya server di rumah gue bisa mengatur 413k requests (sekitar 13k/hari) masuk dari pengguna internet!

Next steps

Gue tertarik menjalankan supabase dan retool tapi melihat setup nya lumayan ribet.

Selain itu gue tertarik menggunakan TrueNAS Scale daripada Ubuntu biasa karena dashboard nya yang fancy hahaha.

Masih di tahap eksperimen, gue bermain-main dengan VPN komersil agar meng-forward traffic on-demand untuk layanan yang melakukan scrapping seperti SearxNG, Libreddit, Piped, Nitter, dan The Lounge.

In other side gue belum ada rencana buat nambah server baru karena gue rasa yang sekarang pun sudah cukup untuk kebutuhan gue.

Jika ingin mengunjungi layanan yang berjalan di server rumah gue (dan bukan yang sangat private), silahkan bermain ke:

  • faultable.dev (ghost)
  • u.faultable.dev (umami)
  • faultable.blog (ghost)
  • dav.rizaldy.club (radicale)
  • music.rizaldy.club (navidrome)
  • bookmarks.rizaldy.club (espial)
  • money.rizaldy.club (firefly iii)
  • edgy.social (mastodon)
  • px.edgy.social (pixelfed)
  • piped.edgy.social (piped)
  • nitter.edgy.social (nitter)
  • libreddit.edgy.social (libreddit)
  • s3.edgy.social (minio)
  • git.edgy.social (gitea)
  • id.edgy.social (keyoxide)
  • init8.lol (wordpress)
  • uisp.init8.lol (uisp)
  • irc.edgy.social (the lounge)

Please jangan nakal apalagi atau subnet lo gue blokir secara permanen nanti :p

Biaya

  • Intel NUC: 2,835,900 IDR
  • Beelink: 2,625,500 IDR
  • TP-Link TL-SG105E: 394,000 IDR
  • EdgeRouter X: 1,231,000 IDR
  • Listrik: 0 IDR (biaya bulanan, dan pemakaiannya luas)
  • Internet: 0 IDR (kosan, 100Mbps)
  • Total: 7,086,400 IDR

Penutup

Gue tidak banyak bercerita tentang si switch, intinya gue pakai doi cuman buat VLAN untuk saat ini (tanpa harus reset router gue karena salah konfig).

Tujuan gue melakukan self-hosting ini adalah selain karena prinsip (anjay moment) juga untuk memastikan bahwa data-data gue berada di tempat yang bisa gue kontrol secara penuh.

Selain itu, juga untuk mengurangi kebergantungan kepada pihak ketiga (or the cloud) yang menjalankan layanan di internet.

Jika ada pertanyaan (atau tertarik ingin melakukan self-hosting juga) bisa bermain ke Discord evilfactorylabs yang hening ini atau bisa japri seperti biasa.

Thank you!