Home Assistant di Raspberry Pi dengan Docker dan Cloudflare

Ilustrasi Raspberry Pi terhubung ke Cloudflare untuk Home Assistant
Satu Raspberry Pi untuk mengendalikan seisi rumah.

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.

Ilustrasi Raspberry Pi terhubung ke Cloudflare untuk Home Assistant

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.

Diagram alur Cloudflare Tunnel ke Home Assistant di Raspberry Pi

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: host pada Home Assistant diperlukan supaya fitur discovery perangkat di jaringan lokal (mDNS, SSDP) bisa bekerja.
  • cloudflared juga memakai network host, sehingga bisa menjangkau Home Assistant di localhost:8123.
  • Volume /run/dbus dibutuhkan untuk integrasi Bluetooth.
  • Jika memakai dongle Zigbee USB, tambahkan devices: - /dev/ttyUSB0:/dev/ttyUSB0 sesuai port dongle Anda.

Jalankan:

docker compose up -d

Output terminal docker compose dan log cloudflared

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 folder config.

Sekarang lampu teras bisa dimatikan dari kantor, dan Raspberry Pi yang dulu menganggur akhirnya punya pekerjaan tetap.

Comments

No comments yet. Why don’t you start the discussion?

Tinggalkan Balasan