Skip to content

Self-host Home Assistant

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

The open-source hub for home automation — local control of thousands of smart devices, with automations that run entirely on your own hardware.

Key facts

CategoryHome automation
LicenseApache-2.0
StackPython
Min RAM2048 MB
Official imageyes
Measured idle RAM340 MB
Difficulty
Our recommendation

Pick Home Assistant Container when you already run a Linux box with Docker Engine 23+ and want local control of your devices without a dedicated appliance: it is Apache-2.0 Python, one `ghcr.io/home-assistant/home-assistant:stable` container on host networking with a `/config` volume, and every integration, dashboard and automation the project ships. What you give up versus Home Assistant OS is the Supervisor layer — no apps (add-ons), no one-click updates and no built-in backups. Upstream's hardware guidance for its own OS is a Raspberry Pi 4/5 "with at least 2 GB of RAM", which our 2 GB floor mirrors. There is no alternative hub in this catalog; the choice is which install method, not which product.

Follow the Home Assistant deploy guide →

What you need

  • Any VPS with at least 2048 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • About an afternoon — budget time for troubleshooting
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install with Docker Compose

Save this as compose.yml and run docker compose up -d:

# Home Assistant Container — the official compose.yaml (docs → Installation → Linux)
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   # Bluetooth
    restart: unless-stopped
    stop_grace_period: 60s   # lets the recorder close its SQLite DB cleanly on stop
    privileged: true   # device access (USB Zigbee/Z-Wave sticks); host networking for discovery
    network_mode: host
    environment:
      TZ: Europe/Amsterdam   # your timezone
# docker compose up -d  →  http://SERVER_IP:8123 (open 8123/tcp in the firewall if it does not load)

What you take on

Home Assistant Container is upstream's advanced path, and its docs are candid about what you take on:

non-negotiableThe compare-methods table marks Container without Apps, One-click updates or Backups; "Home Assistant Operating System is the recommended installation type for most users". Upgrades are manual: docker pull ghcr.io/home-assistant/home-assistant:stable, then recreate the container (or docker compose pull homeassistant && docker compose up -d). Tags are :stable, :beta, :dev ("likely to be unstable") or a pinned :2026.9.3-style version.
non-negotiableUpstream's compose runs privileged: true with network_mode: host, mounts /run/dbus:/run/dbus:ro ("required if you plan to use the Bluetooth integration") and passes USB radios with --device /dev/ttyUSB0:/dev/ttyUSB0. Our snippet omits privileged, dbus and TZ; add them if you need Bluetooth, Zigbee or Z-Wave hardware.
non-negotiableDocker force-kills a container 10 s after SIGTERM by default, which can corrupt the recorder database — upstream adds stop_grace_period: 60s (or --stop-timeout 60). Docker Desktop is not supported; it must be Docker Engine.
non-negotiableBehind a reverse proxy you must set use_x_forwarded_for and trusted_proxies in the http: block — "Requests from reverse proxies are blocked if these options are not set". Turn on ip_ban_enabled with login_attempts_threshold, enable MFA, and pick one remote-access route (Home Assistant Cloud, TLS via Duck DNS/Let's Encrypt, or a VPN/SSH tunnel). Container keeps port 8123 even though 2026.8 moved HA OS to port 80.
non-negotiableA new stable release lands "on the first Wednesday of every month" as YYYY.M with .1, .2 patches in between, and the security page says to keep up with each monthly release — budget for it. The 2 GB floor is upstream's Raspberry Pi 4/5 hardware guidance for Home Assistant OS; no separate figure is published for Container.

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.