22 Agustus 2026
Homepage dan Satu Dasbor untuk Semua Service
Dasbor pribadi untuk semua service homelab: konfigurasi YAML, penemuan container lewat label Docker, alasan akses via VPN, plus batas keamanan soket Docker.
Seiring bertambahnya layanan, homelab mulai sulit diingat lewat port. Service A di port sekian, service B di path tertentu, dan seterusnya. Homepage hadir sebagai titik tunggal untuk melihat dan mengakses seluruh layanan dalam satu halaman.
Di homeserver saya, Homepage khusus untuk keperluan pribadi: diakses hanya lewat IP Tailscale di jaringan pribadi — tanpa nama domain, tanpa port forwarding, tanpa rute publik sama sekali. Dashboard ini murni pintu pribadi untuk service internal.
Mengapa satu dasbor untuk semua service
Saat layanan masih sedikit, membuka service lewat port terasa nyaman; begitu bertambah, menemukan alamat yang benar jadi pekerjaan rumah: port untuk aplikasi mana, path yang diketik, service mana yang mati.
Homepage memecahkan masalah itu dengan satu pintu masuk: setiap layanan tampil sebagai kartu yang bisa diklik, lengkap dengan ikon, status, dan link.
Cara kerja dan model konfigurasi
Homepage adalah aplikasi web self-hosted yang berfungsi sebagai dashboard sekaligus katalog layanan: ia mengumpulkan tautan, status, dan informasi tambahan dari berbagai service dalam satu antarmuka.
Seluruh pengaturan disimpan sebagai file YAML di direktori konfigurasi yang di-mount ke dalam container. Peran tiap file:
services.yaml— daftar layanan dan tata letaknya;settings.yaml— pengaturan umum seperti bahasa dan tema;widgets.yaml— widget dan API key-nya;bookmarks.yaml— bookmark atau penyaring cepat;docker.yaml— konfigurasi integrasi Docker;custom.cssdancustom.js— penyesuaian tampilan lanjutan.
Layanan dikelompokkan sebagai array grup di services.yaml; tiap service punya nama, ikon, link, deskripsi, dan opsional widget sendiri.
Karena berbasis file, konfigurasi bisa dibaca, di-version control, atau dipulihkan seperti berkas biasa. Catatan: dashboard dirender sebagai static HTML — perubahan settings.yaml perlu di-regenerate lewat tombol refresh.
Deployment dengan Docker Compose
Cara paling umum menjalankan Homepage adalah dengan Docker Compose:
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3000:3000"
volumes:
- /path/to/config:/app/config
- /var/run/docker.sock:/var/run/docker.sock # hanya bila integrasi Docker dibutuhkan
environment:
HOMEPAGE_ALLOWED_HOSTS: '*'
restart: unless-stopped
Volume config menjaga pengaturan bertahan saat container dibuat ulang; mount soket mengaktifkan deteksi kontainer.
Perhatikan HOMEPAGE_ALLOWED_HOSTS: sejak v1.0, host selain localhost harus didaftarkan (dipisah koma); '*' mematikan pemeriksaan ini. Host check hanya pengaman best-effort, bukan pengganti proxy, TLS, dan auth untuk publikasi.
Integrasi Docker dan penemuan container
Salah satu keunggulan Homepage adalah mendeteksi container secara dinamis lewat soket Docker: kontainer baru dengan label tertentu otomatis muncul tanpa konfigurasi tambahan. Anda bisa bereksperimen langsung:
docker ps --filter label=homepage
Label mengikuti notasi titik homepage.*, misalnya homepage.group=Media, homepage.name=Emby, homepage.icon=emby.png, homepage.href=http://<HOST>/, dan homepage.description.
Nilai server dan container tidak perlu ditulis manual — keduanya disimpulkan otomatis dari koneksi di docker.yaml.
Keamanan: soket, host check, dan autentikasi
Akses ke /var/run/docker.sock bukan tanpa risiko: siapa pun yang memilikinya memegang kendali penuh atas daemon Docker.
Penting: Soket Docker bersifat read-write. Keamanan container sama pentingnya dengan host itu sendiri, karena akses soket berarti hak akses root penuh. Jangan pernah memaparkan antarmuka ini ke publik tanpa autentikasi dan otorisasi kuat yang memadai.
Soket langsung mengharuskan Homepage berjalan sebagai root; alternatif yang lebih disukai: docker-socket-proxy — container read-only (POST=0, misal hanya CONTAINERS=1) untuk daftar container. Mount soket pun bisa :ro.
Sejak v2.0 ada gerbang autentikasi password atau OIDC — hampir semua route /api (kecuali healthcheck) butuh sesi login. Tidak ada rate limiting bawaan; deployment terekspos disarankan rate limit di reverse proxy. Karena itu saya menjalankannya hanya di jaringan pribadi, dengan auth sebagai lapisan tambahan.
Kelebihan yang saya rasakan
- Satu pintu untuk semua service. Tidak menghafal port atau path; status terlihat sekilas.
- Penemuan otomatis lewat label. Cukup beri label
homepage.*, service baru langsung muncul. - Ikon dan widget. Pustaka ikon bawaan mengikuti konvensi penamaan; widget status bisa ditempel ke kartu apa pun.
- Konfigurasi = file biasa. Version control, restore, dan kustomisasi (
custom.css/custom.js) sederhana.
Kontra dan keterbatasan
- Soket Docker = root. Integrasi penuh butuh akses read-write ke daemon; socket proxy read-only menambah satu container lagi yang dirawat.
- Host check hanya best-effort.
'*'menonaktifkannya; publikasi butuh proxy, TLS, dan auth. - Tanpa rate limiting login. Percobaan password tidak dibatasi aplikasi; aman hanya bila jaringan atau proxy membatasinya.
- Kurva belajar YAML. Grup, nested group, widget per service, dan label discovery punya format sendiri.
- Render statis dan key di file. Perubahan
settings.yamlbutuh regenerate; API key tersimpan diwidgets.yamldan label widget.
Pencadangan dan pemulihan
Data yang perlu dicadangkan hanya direktori konfigurasi dan ikon. Karena seluruh pengaturan tersimpan sebagai berkas, mengamankannya berarti menyalin berkas-berkas tersebut.
Pemulihan juga sederhana: jalankan ulang instance dengan direktori konfigurasi hasil cadangan; uji pada direktori terpisah dulu.
Operasi sehari-hari
- Lihat status:
docker ps --filter name=homepage - Cek log:
docker logs --tail 100 homepage - Mulai ulang:
docker restart homepage
Log bisa berisi informasi sensitif (nama layanan, URL); perhatikan kontennya sebelum membagikannya.
Kesimpulan
Homepage bukan dashboard paling canggih — justru itu keunggulannya: ringan, transparan, dan penemuan container otomatis. Di konteks saya (satu mesin, akses via Tailscale), kontra utamanya bisa ditekan dengan menjalankannya tertutup di jaringan pribadi dan memakai socket proxy read-only bila integrasi penuh tak dibutuhkan.
