Sudah lama Raspberry Pi di rumah saya hanya menganggur di laci. Akhirnya saya pakai untuk menjalankan Home Assistant, platform open source untuk mengendalikan perangkat rumah pintar dari berbagai merek dalam satu dashboard. Lampu, smart plug, sensor pintu, sampai CCTV bisa dikendalikan dan diotomasi tanpa bergantung pada aplikasi masing-masing vendor.

Tantangannya ada di akses dari luar rumah. Koneksi internet rumahan umumnya tidak punya IP publik (di balik CGNAT), dan kalaupun punya, membuka port router ke internet adalah ide yang buruk. Solusinya adalah Cloudflare Tunnel.
Kenapa Docker?
Home Assistant punya beberapa metode instalasi. Yang paling populer adalah Home Assistant OS, yang mengambil alih seluruh Raspberry Pi. Saya memilih metode Container dengan Docker supaya Pi yang sama tetap bisa menjalankan layanan lain, dan konfigurasinya cukup ditulis dalam satu file compose.
Konsekuensinya, menu Add-ons tidak tersedia di metode ini. Tidak masalah, karena add-on pada dasarnya juga container. Mosquitto atau Zigbee2MQTT bisa dijalankan sebagai service tambahan di file compose yang sama.
Persiapan
- Raspberry Pi 4 (minimal RAM 2 GB) atau Raspberry Pi 5.
- Raspberry Pi OS Lite 64-bit. Image Home Assistant terbaru sudah tidak mendukung sistem 32-bit.
- Sebaiknya boot dari SSD lewat USB. Database Home Assistant terus menulis ke disk, dan kartu SD cepat rusak karenanya.
- Domain yang DNS-nya dikelola di Cloudflare (paket gratis sudah cukup).
Install Docker
Setelah Pi menyala dan bisa diakses lewat SSH, pasang Docker dengan script resmi:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Logout lalu login kembali supaya user kita bisa menjalankan docker tanpa sudo.
Membuat Cloudflare Tunnel
Cloudflare Tunnel bekerja terbalik dari port forwarding. Bukan router yang membuka pintu untuk koneksi masuk, melainkan Pi yang membuka koneksi keluar ke Cloudflare. Trafik dari pengunjung kemudian dikirim balik lewat koneksi tersebut.

Langkahnya di dashboard Cloudflare:
1. Buka Zero Trust, masuk ke menu Networks lalu Tunnels, dan buat tunnel baru dengan tipe Cloudflared.
2. Beri nama, misalnya rumah. Cloudflare akan menampilkan perintah instalasi yang berisi token panjang. Salin token-nya saja.
3. Di bagian Public Hostname, isi subdomain ha.domain-anda.id dengan service HTTP dan URL localhost:8123.
Record DNS untuk subdomain tersebut dibuat otomatis oleh Cloudflare.
File compose
Buat direktori kerja dan simpan token di file .env:
mkdir -p ~/homeassistant && cd ~/homeassistant
echo "TUNNEL_TOKEN=token-dari-cloudflare" > .env
chmod 600 .env
Lalu buat compose.yaml:
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
environment:
TZ: Asia/Makassar
network_mode: host
privileged: true
restart: unless-stopped
cloudflared:
container_name: cloudflared
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run
environment:
TUNNEL_TOKEN: ${TUNNEL_TOKEN}
network_mode: host
restart: unless-stopped
Beberapa catatan:
network_mode: hostpada Home Assistant diperlukan supaya fitur discovery perangkat di jaringan lokal (mDNS, SSDP) bisa bekerja.cloudflaredjuga memakai network host, sehingga bisa menjangkau Home Assistant dilocalhost:8123.- Volume
/run/dbusdibutuhkan untuk integrasi Bluetooth. - Jika memakai dongle Zigbee USB, tambahkan
devices: - /dev/ttyUSB0:/dev/ttyUSB0sesuai port dongle Anda.
Jalankan:
docker compose up -d

Log cloudflared akan menunjukkan beberapa koneksi yang terdaftar ke edge Cloudflare terdekat. Untuk koneksi dari Indonesia, biasanya ke Singapura atau Jakarta.
Izinkan reverse proxy di Home Assistant
Buka http://ip-raspberry-pi:8123 dari jaringan lokal dan selesaikan pembuatan akun. Jika langsung mencoba lewat domain, Home Assistant akan membalas 400: Bad Request, karena secara default ia menolak request yang datang melalui proxy.
Tambahkan konfigurasi berikut ke config/configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- ::1
ip_ban_enabled: true
login_attempts_threshold: 5
Restart container, lalu coba akses https://ha.domain-anda.id. Dua baris terakhir membuat Home Assistant otomatis memblokir IP yang gagal login lima kali.
docker compose restart homeassistant
Jangan lupa keamanan
Dashboard Home Assistant sekarang bisa diakses dari internet, sama seperti panel admin website. Prinsip yang saya tulis di tips keamanan siber juga berlaku di sini:
- Aktifkan Multi-factor Authentication di halaman profil Home Assistant.
- Gunakan password yang panjang dan unik.
- Untuk perlindungan ekstra, pasang Cloudflare Access di depan subdomain sehingga hanya email tertentu yang bisa membuka halaman login. Perlu dicatat, aplikasi mobile Home Assistant tidak mendukung halaman login Cloudflare Access, jadi pilihan ini lebih cocok jika akses Anda hanya lewat browser.
- Update rutin dengan
docker compose pull && docker compose up -d, dan cadangkan folderconfig.
Sekarang lampu teras bisa dimatikan dari kantor, dan Raspberry Pi yang dulu menganggur akhirnya punya pekerjaan tetap.
