179 lines
11 KiB
Markdown
179 lines
11 KiB
Markdown
---
|
|
title: faultable home server 2021
|
|
tags:
|
|
- blog
|
|
slug: faultables-home-server-2021
|
|
date: 2021-12-26T14:40:53.000Z
|
|
date_updated: 2021-12-26T14:40:53.000Z
|
|
---
|
|
|
|
Jika melihat ke riwayat transaksi di akun Tokopedia gue, sudah 6 bulan gue menjalankan *server* dari rumah dan *totally *sudahtidak 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:
|
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/IMG_3312-Large.jpeg)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 Routergue 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](https://docs.freebsd.org/en/books/handbook/jails/) yang berjalan di si NUC dan ada 22 [docker containers](https://www.docker.com/resources/what-container) yang berjalan di si Beelink.
|
|
|
|
Agar server rumah gue dapat dijangkau oleh pengguna internet, gue menggunakan layanannya, ehm, [Cloudflare](https://www.cloudflare.com/teams/access/) daripada menggunakan [Dynamic DNS](https://www.cloudflare.com/learning/dns/glossary/dynamic-dns/) karena gue males ribet hahaha.
|
|
|
|
Ilustrasinya adalah seperti ini:
|
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/CleanShot-2021-12-27-at-2.49.13.png)
|
|
Dari gambar diatas "routing match" nya ditentukan oleh Nginx (daripada dari cloudflared) karena gue ingin access log nya *centralized *ke [goaccess](https://goaccess.io/) 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](https://tailscale.com/kb/1019/subnets/) biar gak terlalu ribet.
|
|
|
|
## VPN
|
|
|
|
Setiap server (alias setiap devices gue) pasti terpasang [Tailscale](https://tailscale.com) 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](https://tailscale.com/kb/1103/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](https://mullvad.net/) atau jika memang benar-benar sangat ingin memproteksi aktivitas di internet, gue rekomendasi menggunakan [Tor.](https://www.torproject.org/)
|
|
|
|
## 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](https://syncthing.net/) 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](https://en.wikipedia.org/wiki/S.M.A.R.T.) status untuk external SSD yang gue gunakan ([Seagate Ultra Touch](https://www.seagate.com/id/id/products/external-hard-drives/ultra-touch-external-drives/)) 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](https://wordpress.org/)
|
|
2. [Wordpress](https://wordpress.org/)
|
|
3. [Syncthing](https://syncthing.net/)
|
|
4. [Gitea](https://gitea.io)
|
|
5. [Redis](https://redis.io)
|
|
6. [Postgresql](https://www.postgresql.org/)
|
|
7. [MariaDB](https://mariadb.com/)
|
|
8. [Minio](https://min.io/)
|
|
9. [Metabase](https://www.metabase.com/)
|
|
10. [Radicale](https://radicale.org/v3.html)
|
|
11. [Navidrome](https://www.navidrome.org/)
|
|
12. [Roundcube](https://roundcube.net/)
|
|
13. [Plex](https://www.plex.tv/)
|
|
|
|
### Beelink (Ubuntu Server, docker)
|
|
|
|
1. [Ripe Atlas](https://github.com/Jamesits/docker-ripe-atlas)
|
|
2. [Piped](https://github.com/TeamPiped/Piped) (frontend, backend, proxy)
|
|
3. [SearxNG](https://github.com/searxng/searxng)
|
|
4. [Nginx Proxy Manager](https://github.com/jc21/nginx-proxy-manager)
|
|
5. [Pixelfed](https://github.com/pixelfed/pixelfed)
|
|
6. [Libreddit](https://github.com/spikecodes/libreddit)
|
|
7. [Mastodon](https://github.com/mastodon/mastodon) (frontend, worker, stream)
|
|
8. [UISP](https://hub.docker.com/r/nico640/docker-unms)
|
|
9. [Watchtower](https://github.com/containrrr/watchtower)
|
|
10. [Umami](https://github.com/mikecao/umami/)
|
|
11. [The Lounge](https://github.com/thelounge/thelounge)
|
|
12. [Morty](https://github.com/asciimoo/morty)
|
|
13. [Espial](https://github.com/jonschoning/espial)
|
|
14. [Firefly III](https://github.com/firefly-iii/firefly-iii)
|
|
15. [Ghost](https://github.com/TryGhost/Ghost)
|
|
16. [Ghost](https://github.com/TryGhost/Ghost)
|
|
17. [Keyoxide](https://codeberg.org/keyoxide/keyoxide-web)
|
|
18. [Nitter](https://github.com/zedeus/nitter)
|
|
|
|
Selain itu juga menjalankan [blocky](https://github.com/0xERR0R/blocky), [dnsproxy](https://github.com/AdguardTeam/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:
|
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/CleanShot-2021-12-27-at-4.00.55.png)
|
|
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](https://github.com/supabase/supabase) dan [retool](https://github.com/tryretool/retool-onpremise) tapi melihat *setup *nya lumayan ribet.
|
|
|
|
Selain itu gue tertarik menggunakan [TrueNAS Scale](https://www.truenas.com/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](https://github.com/awesome-selfhosted/awesome-selfhosted)*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](https://evlfctry.pro/discord) yang hening ini atau bisa [japri](https://s3.rizaldy.club/rizaldy-club-ghost/contact/) seperti biasa.
|
|
|
|
Thank you!
|
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/IMG_3314-Large.jpeg)
|