Mini PC bekas di rak bawah, dua hard disk, dan tagihan langganan penyimpanan foto yang tidak pernah berhenti. Itu titik mulai banyak orang, termasuk saya. Setahun kemudian isinya jadi sebelas container, satu di antaranya sudah mati sejak Februari dan tidak ada yang sadar.
Daftar tool self-hosted di internet biasanya diurutkan dari yang paling populer. Saya mau mengurutkannya dari yang paling menentukan: apa yang menyelamatkan kamu saat ada yang rusak, bukan apa yang paling seru dipasang di akhir pekan. Karena kegagalan khas hobi ini bukan kekurangan aplikasi, melainkan server yang berhenti bekerja tanpa memberi kabar.
Dua aturan yang mahal kalau dilanggar:
- Mulai dari satu layanan, bukan sembilan. Pasang satu, pakai sebulan, rasakan apa yang perlu dirawat, baru tambah berikutnya.
- Kalau tidak dibackup, berarti tidak ada. Self-hosting memberi kamu kendali penuh atas data, dan kendali penuh juga berarti satu disk rusak selesai sudah ceritanya.
Peta sepuluh tool ini
| Tool | Menggantikan | Berat | Catatan |
|---|---|---|---|
| Docker + Compose | cara install manual | ringan | fondasi semua yang di bawah |
| Tailscale | port forwarding | sangat ringan | dipasang sebelum apa pun |
| Restic | backup cloud berbayar | ringan | tidak menarik, paling menentukan |
| Uptime Kuma | pemantauan manual | ringan | bikin kegagalan jadi notifikasi |
| Immich | Google Photos | berat (ML) | butuh RAM dan disk besar |
| Jellyfin | Netflix lokal | sedang | transcode butuh GPU/iGPU |
| AdGuard Home / Pi-hole | blokir iklan perangkat | sangat ringan | jadi infrastruktur kritis |
| Vaultwarden | Bitwarden hosted | 40 MB RAM | risikonya paling tinggi |
| Home Assistant | aplikasi vendor | sedang | paling menyita waktu |
| Caddy | certbot + nginx manual | ringan | TLS otomatis |
1. Docker dan Docker Compose
Bukan layanan, tapi fondasi. Dulu memasang dua aplikasi yang butuh versi PHP berbeda bisa menghabiskan satu sore penuh. Container membuat tiap layanan mandiri, dan Compose membuat satu tumpukan layanan jadi satu berkas yang bisa kamu simpan di git.
Pola yang sebaiknya kamu ikuti sejak container pertama:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
volumes:
- ./uptime-kuma/data:/app/data
ports:
- "3001:3001"
environment:
- TZ=Asia/Jakarta
Empat baris di situ lebih penting daripada kelihatannya. restart: unless-stopped membuat layanan hidup lagi setelah listrik padam; tanpa itu kamu baru sadar enam minggu kemudian bahwa tidak ada yang jalan sejak mati lampu. Bind mount (./uptime-kuma/data) menaruh data di direktori yang bisa kamu lihat dan salin, sedangkan named volume menyembunyikannya di penyimpanan internal Docker. Pin versi mayor (:1, bukan :latest) supaya suatu malam tidak ada upgrade besar yang tidak kamu minta. Dan TZ menentukan apakah jadwal backup jalan jam 2 pagi atau jam 9 pagi.
2. Tailscale, sebelum apa pun bisa diakses
Ini yang mengubah postur keamanan semua layanan lain. Cara lama mengakses server rumah dari luar adalah port forwarding di router, dan itu artinya aplikasi buatan sukarelawan langsung terbuka di internet. Pemindai port menemukannya dalam hitungan menit.
Tailscale membangun jaringan mesh pribadi di atas WireGuard. Pasang di server, HP, dan laptop, lalu semuanya bisa saling menghubungi tanpa satu port pun terbuka:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Server dapat alamat tetap di jaringan pribadimu. MagicDNS memberi nama mesin, jadi http://homeserver:8096 bisa dibuka dari HP pakai data seluler. Subnet routing membuka seluruh jaringan rumah lewat satu mesin, berguna untuk perangkat yang tidak bisa dipasangi Tailscale seperti printer atau smart plug:
sudo tailscale up --advertise-routes=192.168.1.0/24 --accept-routes
Yang membuat ini layak dikerjakan lebih dulu: sebagian besar perangkat lunak di daftar ini dirawat oleh tim kecil atau satu orang, dan cepat atau lambat ada celah serius. Di balik Tailscale, celah di server media jadi masalah bagi perangkat yang sudah ada di jaringan pribadimu, yaitu kamu sendiri. Di internet terbuka, celah yang sama jadi masalah bagi semua orang yang punya pemindai. Kalau tidak mau bergantung pada server koordinasi milik perusahaan, Headscale dan Netbird adalah alternatif yang bisa kamu jalankan sendiri.
3. Restic, dan ritual restore yang tidak boleh dilewat
Saya sengaja menaruh backup di urutan ketiga, sebelum layanan yang menyenangkan, karena inilah yang membedakan hobi yang bertahan dari hobi yang berakhir dengan foto hilang.
Restic cepat, terenkripsi di sisi klien, dan melakukan deduplikasi per blok. Seratus snapshot harian dari pustaka foto yang isinya nyaris tidak berubah hanya menambah sedikit ruang. Penyedia object storage murah pun tidak pernah melihat isi datamu dalam bentuk asli:
export RESTIC_REPOSITORY="b2:nama-bucket:/srv"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
restic init
restic backup /srv --exclude='/srv/*/cache' --tag rumah
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
Tiga hal yang membuat rutinitas ini benar-benar bekerja, bukan cuma ada. Dump database secara terpisah dengan pg_dump, karena menyalin berkas Postgres yang sedang berjalan bisa menghasilkan backup yang tidak bisa dipulihkan. Jalankan restic check --read-data-subset=5% untuk memastikan data yang tersimpan masih terbaca, sehingga kerusakan diam ketahuan lebih awal. Dan panggil URL push monitor di akhir skrip, supaya backup yang berhenti jalan berubah jadi peringatan, bukan kejutan.
Target akhirnya aturan 3-2-1: tiga salinan, dua jenis media, satu di luar rumah. Server adalah salinan pertama, hard disk eksternal salinan kedua, object storage murah seperti Backblaze B2 atau Cloudflare R2 untuk salinan ketiga yang selamat dari kebakaran.
Backup yang belum pernah kamu pulihkan masih berupa dugaan, bukan backup. Ambil satu berkas, restore ke folder sementara, buka, pastikan isinya benar. Ulangi tiap enam bulan di kalender, karena kegagalan backup paling umum bukan yang dramatis, melainkan job yang diam-diam berhenti sejak Maret.
4. Uptime Kuma
Server rumah gagal tanpa suara. Container keluar, tidak ada yang memberi tahu, dan kamu baru tahu berminggu-minggu kemudian saat mencari foto yang ternyata tidak pernah tersimpan. Sepuluh baris Compose, contohnya yang sudah saya pakai di bagian pertama, memindahkan kegagalan itu jadi notifikasi di hari yang sama.
Selain memeriksa endpoint HTTP dan port, ada dua hal yang sering dilewatkan. Pertama, masa berlaku sertifikat TLS kalau kamu memakai reverse proxy: renewal berjalan otomatis sampai suatu hari tidak. Kedua, push monitor untuk job backup. yang sering dilewatkan: masa berlaku sertifikat TLS kalau kamu memakai reverse proxy, dan push monitor untuk job backup. Push monitor memberi kamu URL yang dipanggil skrip backup saat sukses; kalau URL itu tidak dipanggil sesuai jadwal, kamu dapat peringatan.
5. Immich
Ini alasan paling umum orang mulai self-hosting, dan alasannya masuk akal. Immich adalah pustaka foto dan video dengan aplikasi iOS dan Android yang melakukan backup otomatis dari galeri. Fitur inilah yang membuatnya terasa seperti produk jadi, bukan kotak penyimpanan biasa.
Container machine learning-nya yang memberi kesan mahal: pengenalan dan pengelompokan wajah, deteksi objek dan suasana, pencarian kalimat biasa seperti "mobil merah di salju" tanpa ada yang memberi label. Semuanya jalan di perangkatmu.
Dua peringatan. Immich masih pra-1.0 dan cukup sering membawa perubahan yang memutus kompatibilitas, jadi pin versi dan baca catatan rilis sebelum update. Dan datanya adalah hal paling tidak tergantikan di server ini, jadi pastikan bagian backup di atas sudah jalan sebelum kamu memindahkan satu-satunya salinan foto keluarga ke situ.
6. Jellyfin
Server media untuk film, serial, musik, dan buku. Tanpa akun, tanpa langganan, tanpa laporan penggunaan.
services:
jellyfin:
image: jellyfin/jellyfin:10
restart: unless-stopped
user: "1000:1000"
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /srv/media/film:/media/film:ro
ports:
- "8096:8096"
devices:
- /dev/dri:/dev/dri
Dua baris yang perlu diperhatikan. :ro pada mount media membuat pustaka film hanya bisa dibaca container, jadi bug atau kompromi tidak bisa menghapus koleksimu. /dev/dri meneruskan GPU terintegrasi untuk transcode; tanpa itu satu stream 4K bisa membuat CPU bekerja penuh, dengan QuickSync di Intel iGPU transcode jadi hampir gratis dan beberapa stream bisa jalan bersamaan. Kalau kamu sedang memilih perangkat, CPU Intel generasi baru dengan grafis terintegrasi adalah keputusan harga-manfaat terbaik untuk kasus ini.
Plex lebih rapi dan lebih mudah dibagikan ke orang lain, tapi butuh akun dan sebagian fiturnya sudah pindah ke balik langganan. Jellyfin adalah pilihan yang tidak bisa diambil kembali fiturnya di kemudian hari.
7. AdGuard Home atau Pi-hole
Kemenangan tercepat di daftar ini, sekitar lima belas menit. Keduanya bekerja sebagai DNS server jaringan dan menolak me-resolve domain iklan serta pelacak. Efeknya langsung terasa di semua perangkat, termasuk smart TV dan konsol yang tidak bisa dipasangi ekstensi peramban.
| AdGuard Home | Pi-hole | |
|---|---|---|
| Kemudahan awal | DNS terenkripsi sudah built-in | perlu tambahan untuk DoH |
| Aturan per klien | ada tanpa add-on | terbatas |
| Komunitas | lebih kecil | lebih besar, banyak blocklist pihak ketiga |
| Pilihan | cocok untuk yang baru mulai | cocok kalau kamu suka banyak daftar blokir |
Pilih salah satu, jangan dua-duanya. Setelah itu atur DHCP router agar membagikan IP server sebagai DNS, dan seluruh jaringan ikut terlindungi tanpa menyentuh perangkat satu per satu.
Yang perlu direncanakan sejak awal: DNS-mu sekarang jadi satu titik kegagalan. Kalau container mati, bagi seluruh rumah itu artinya "internet rusak". Pasang DNS sekunder di router yang bukan Pi-hole, atau terima kenyataan bahwa reboot butuh kehati-hatian. Beberapa aplikasi juga akan rusak karena domainnya masuk blocklist, dan mengetahui penyebabnya menghemat satu jam kebingungan saat aplikasi belanja tiba-tiba tidak mau terbuka.
8. Vaultwarden
Server password manager sendiri, kira-kira 40 MB RAM. Vaultwarden adalah implementasi ulang server Bitwarden dalam Rust, memakai protokol yang sama, jadi aplikasi resmi Bitwarden dan ekstensi peramban tetap bekerja tanpa perubahan. Kamu dapat klien yang sudah diaudit dengan server yang kamu kendalikan.
Fitur yang di Bitwarden hosted harus bayar, di sini terbuka: organisasi, lampiran berkas, dan penyimpanan kode TOTP.
Karena risikonya paling tinggi di antara semua tool di sini, perlakuannya beda. Jangan pernah membukanya langsung ke internet, cukup lewat Tailscale atau reverse proxy dengan TLS dan lapisan autentikasi tambahan. Set SIGNUPS_ALLOWED=false setelah akunmu jadi, kalau tidak siapa pun yang menemukan alamatnya bisa mendaftar. Dan backup terpisah dengan restore yang diuji, karena database password yang rusak tanpa backup adalah jenis hari buruk yang sulit dipulihkan.
9. Home Assistant
Kendali smart home yang berjalan lokal, dan lubang kelinci paling dalam di daftar ini. Home Assistant menyatukan perangkat dari hampir semua merek dalam satu antarmuka dan satu mesin otomasi. Lampu tetap bisa dinyalakan saat internet rumah mati, sesuatu yang tidak bisa dilakukan perangkat yang bergantung pada server pabrikan.
Nilai utamanya ada di lintas merek: sensor gerak dari merek A memicu lampu merek B dan notifikasi ke HP. Dipadukan dengan Zigbee2MQTT dan koordinator USB, perangkat Zigbee-mu tidak lagi butuh hub vendor.
Satu peringatan: ini yang paling menyita waktu, jauh dibanding yang lain. Anggap sebagai hobi, bukan pekerjaan satu sore. Mulai dari tiga perangkat, bukan merombak seluruh rumah.
10. Caddy
Setelah layananmu lebih dari tiga, mengakses lewat nomor port jadi melelahkan dan tidak ada yang punya sertifikat. Reverse proxy menaruh nama yang enak dibaca dan TLS di depan semuanya. Caddy dipilih karena sertifikatnya diurus otomatis, tanpa certbot dan tanpa cron renewal:
jellyfin.domainmu.com {
reverse_proxy jellyfin:8096
}
foto.domainmu.com {
reverse_proxy immich-server:2283
}
vault.domainmu.com {
reverse_proxy vaultwarden:80
@luar not remote_ip 192.168.1.0/24 100.64.0.0/10
respond @luar "Not found" 404
}
Blok terakhir itu versi aman: nama publik, sertifikat sah, tapi hanya menjawab perangkat dari jaringan lokal dan Tailscale. Reverse proxy berguna untuk kenyamanan dan TLS, bukan pengganti Tailscale untuk layanan sensitif. Kalau kamu lebih suka membandingkan opsi lain, saya pernah menulis soal Caddy sebagai web server untuk PHP-FPM dan deploy aplikasi sendiri dengan Dokploy.
Urutan memasang kalau mulai dari nol
- Docker dan Compose di mesin yang menyala terus. Mini PC dengan Intel generasi baru ideal; Raspberry Pi cukup untuk layanan ringan tapi akan kewalahan untuk machine learning foto dan transcode video.
- Tailscale, sebelum ada yang bisa diakses. Putuskan sekarang bahwa kamu tidak akan membuka port di router.
- Uptime Kuma, supaya kamu tahu saat ada yang berhenti.
- Restic dengan repositori di luar rumah, sebelum menaruh apa pun yang tidak tergantikan. Lakukan satu kali restore percobaan.
- Satu layanan yang benar-benar kamu pakai. Immich atau Jellyfin biasanya yang pertama.
- Tinggal sebulan dengan itu. Baru tambah yang berikutnya.
Langkah dua sampai empat selesai dalam satu malam, dan itulah pembeda antara hobi yang bertahan dan hobi yang berakhir dengan pustaka foto hilang.
Yang sebenarnya kamu beli
Di luar penghematan langganan, ada satu hal yang jarang disebut. Container, reverse proxy, TLS, DNS, jaringan pribadi, monitoring, backup dan restore, semuanya adalah keterampilan yang sama dengan pekerjaan infrastruktur profesional. Bedanya, di sini taruhannya film yang gagal diputar, bukan layanan produksi yang mati, dan sistemnya benar-benar kamu pakai setiap hari. Itu guru yang jauh lebih baik daripada tutorial.
Server rumah adalah laboratorium paling murah yang bisa kamu bangun sendiri, dan kebetulan juga menyimpan foto keluargamu. Mulai dari satu layanan malam ini, pasang backup besok, dan biarkan sisanya menyusul.






