blog

Dari Laptop Bekas ke Home Server: Modal Domain, Internet SIM Card, dan Cloudflare Tunnel

Pernah kepikiran punya server sendiri yang bisa diakses dari mana saja, tapi budget pas-pasan dan koneksi internet cuma pakai SIM Card? Dulu aku juga mikir itu mustahil. Tapi ternyata dengan modal domain doang — tanpa perlu bayar IP static atau sewa VPS mahal — kita bisa punya home server yang proper.

Ini cerita perjalananku merakit home server dari perangkat bekas, memanfaatkan Cloudflare Tunnel sebagai jalur akses publik, dan semua infrastruktur yang ada di home.adammuiz.com serta ai.adammuiz.com.

Intinya: Home server + Cloudflare Tunnel = server pribadi yang online 24/7 tanpa IP static, tanpa VPS, tanpa biaya langganan tambahan selain domain.

Kenapa Perangkat Bekas?

Buat project kayak gini, nggak perlu beli server rack yang harganya puluhan juta. Perangkat bekas yang udah nggak dipakai buat kerja sehari-hari udah lebih dari cukup. Yang penting: daya listrik kecil, silent, dan bisa nyala 24 jam.

Device
Laptop HP 14s - FQ0562AU
CPU
AMD Athlon™ Silver 3050U
GPU
AMD Radeon™ Graphics
RAM
8 GB DDR4-2400 MHz RAM
Storage
512 GB PCIe® NVMe™ M.2 SSD
OS
Linux Debian Trixie (minimal — tanpa GUI)
Daya
~20 watt idle

Laptop beka sharga 3 jutaan HP14s ini bentuknya kecil, konsumsi dayanya rendah hemat listrik, dan lebih gampang dioprek. Intinya sih perangkat second dengan spesifikasi rendah-tengah yang penting efisien listrik dan support virtualisasi.

Koneksi Internet: SIM Card Is The Way

Rumahku dulunya pakai IndiHome tapi karena ingin berhemat jadi berhenti langganan dan sekarang nggak ada langganan ISP kabel. Yang ada cuma sinyal seluler lewat Router yang dijadikan sebagai modem sekalian yaitu TP-Link Archer MR400. Awalnya aku ragu — apa ini bakal stabil? Tapi ternyata buat kebutuhan web server dengan traffic kecil-kecilan, koneksi SIM Card (4G LTE) pakai router bawaan lebih dari cukup.

Yang perlu diperhatikan:

  • No port forwarding. ISP seluler biasanya pakai CGNAT — kita nggak punya IP public. Jadi port forwarding dari router nggak akan berguna.
  • No dynamic DNS. Karena IP-nya shared dan sering berubah, DDNS pun nggak bakal work.
  • Stabilitas cukup untuk HTTP. Latency agak tinggi (30-60ms), tapi buat serving HTML/CSS/JS dan API ringan, this is fine.

Solusinya: Cloudflare Tunnel. Tunnel ini yang menjembatani server lokal kita ke internet tanpa perlu port forwarding, tanpa IP public, dan tanpa DDNS. Semua traffic lewat Cloudflare edge — otomatis sudah HTTPS, CDN, dan proteksi DDoS dasar.

Arsitektur Cloudflare Tunnel

Biar makin paham, ini gambaran alur koneksinya:

Browser


Cloudflare Edge ← HTTPS, caching, DDoS protection


cloudflared tunnel ← encrypted tunnel, outbound-only


Nginx (localhost:80) ← reverse proxy

├── home.adammuiz.com → PHP CMS
├── ai.adammuiz.com → Python FastAPI + LLM Lokal
└── phpMyAdmin → via subdirectory

cloudflared dipasang sebagai systemd service di server. Dia membuat tunnel outbound ke Cloudflare edge. Artinya, koneksi berawal dari server kita ke Cloudflare, bukan sebaliknya. Ini yang bikin kita nggak perlu port forwarding atau IP public — server kita yang menjemput Cloudflare, bukan menunggu didatangi.

Konfigurasinya simpel banget:

tunnel: <tunnel-uuid>
credentials-file: /root/.cloudflared/<tunnel-uuid>.json

ingress:
  - hostname: home.adammuiz.com
    service: http://localhost:80
  - hostname: ai.adammuiz.com
    service: http://localhost:3001
  - service: http_status:404

Dengan konfigurasi ingress di atas, tiga domain berbeda bisa diarahkan ke dua service berbeda di port lokal yang berbeda — tanpa ribet setup reverse proxy di Cloudflare dashboard.

Keamanan Router: LAN Isolation

Satu hal yang sering terlewat: jaringan rumah yang campur aduk antara perangkat pribadi dan server itu risiko. Kalau SSID utama dan server ada di jaringan yang sama, celah keamanan di salah satu perangkat bisa dieksploitasi untuk akses ke server.

Solusinya: Guest Network + LAN Isolation. Di router TP-Link Archer MR400, ada fitur yang memisahkan traffic guest network dari main network. Jadi:

  • SSID Utama — buat perangkat pribadi (HP, laptop kerja) — tidak bisa mengakses server
  • Guest Network — buat server dan perangkat IoT — terisolasi dari SSID utama

Cara setting di TP-Link Archer MR400:
1. Masuk ke Dashboard router
2. Advanced → Wireless → Guest Network
3. Enable Guest Network, centang "Allow Guests to access my Local Network"disabled
4. Selesai. Server di guest network nggak bisa diakses dari HP/laptop di SSID utama.

Ini mencegah misalnya laptop rumah yang kena malware otomatis bisa menginfeksi server. Isolasi fisik via router lebih aman daripada isolasi software di dalam server.

Stack Web Pertama: Nginx + PHP Native + MySQL + phpMyAdmin

Setelah tunnel beres, waktunya bikin konten. Untuk project branding dan personal website, aku pilih stack klasik yang paling dipahami:

  • Nginx — reverse proxy + static file server. Konfigurasi modular, ringan.
  • PHP 8.4 FPM — untuk CMS yang dibangun native tanpa framework.
  • MariaDB (MySQL) — database untuk konten, user, dan settings CMS.
  • phpMyAdmin — biar gampang ngelola database via web browser.

Kenapa pakai CMS native pakai PHP, bukan WordPress? Karena aku pengen full control. Semua kode aku yang tulis — routing, theme engine, slot system, shortcode parser — jadi paham betul gimana cara kerjanya. Nggak ada bloat, nggak ada plugin yang nggak dipake. Buat personal branding dan portofolio, ini ideal karena kita bisa showcase skill coding langsung.

Ekspose Service: Risiko vs Personal Branding

Oke, ini yang paling sering ditanyain: "Lu expose informasi server? Nggak takut kena hack?"

Walaupun informasi berharga di spill ada kompromi yang dilakukan:

  • Access cuma via subdirectory tertentu — nggak di root domain, nggak gampang ditebak bot.
  • Autentikasi dua lapis — HTTP Basic Auth dari Nginx + login recapthca form phpMyAdmin (minimal buat nangkal brute force basic).
  • User database non-root — user MySQL yang dipake cuma punya akses terbatas.
  • Cloudflare Access policy — bisa ditambahkan email-based auth kalau perlu.

Tapi kenapa tetap di-expose? Karena personal branding. Kalau mau jualan skill sebagai web developer, sysadmin, atau AI engineer — orang harus bisa lihat hasil kerja kita. Portofolio yang cuma screenshot di PDF kurang greget dibanding portofolio yang bisa diakses langsung, live, dan menunjukkan stack yang kita kuasai dari ujung ke ujung.

Ini bukan pendekatan yang cocok buat semua orang. Tapi untuk konteks portofolio teknikal dan personal branding, menurutku ini sepadan. Yang penting: tahu risikonya, dan punya mitigasi.

Apa yang Udah Jalan?

Dari infrastruktur yang dibahas di artikel ini, berikut layanan yang udah live:

  • home.adammuiz.com — CMS (artikel, portofolio, theme engine)
  • ai.adammuiz.com — AI personal dengan LLM lokal (Qwen 2.5 Coder 7B)
  • Terminal WebSocket — akses terminal server langsung dari browser (via Dashboard CMS)

Kesimpulan

Membangun home server dengan modal minimal itu bukan cuma mungkin — tapi juga pengalaman belajar yang luar biasa. Dari proses ini aku belajar:

  • Cloudflare Tunnel solusi brilian buat yang nggak punya IP public
  • LAN Isolation itu penting — jangan campur server dan perangkat pribadi di jaringan yang sama
  • CMS native memberikan fleksibilitas yang nggak ada di CMS komersial
  • Ekspose service sensitif itu soal manajemen risiko, bukan soal "takut" atau "berani"

Di artikel selanjutnya, aku bakal cerita gimana ngembangin project AI personal dengan LLM lokal (Qwen 7B) yang jalan di home server yang sama, lengkap dengan SSE streaming dan auth. Stay tuned!