Menu
LocalAssistant docs

Install

LocalAssistant is one container. Its /data volume holds the SQLite database: accounts, devices, their encrypted keys and installed plugins. Back it up with AUTH_SECRET.

#Docker Compose

Save this as compose.yaml in a folder of its own:

services:
  localassistant:
    image: docker.io/orochibraru/localassistant:latest
    restart: unless-stopped
    ports:
      - 3000:3000
    volumes:
      - localassistant:/data
    environment:
      AUTH_SECRET: ${AUTH_SECRET:?set AUTH_SECRET, e.g. openssl rand -base64 32}
      ORIGIN: ${ORIGIN:-}

volumes:
  localassistant: {}

Then, in that folder:

printf 'AUTH_SECRET=%s\nORIGIN=http://192.168.1.10:3000\n' "$(openssl rand -base64 32)" > .env
docker compose up -d

#Network

The server opens TCP connections to each blind on port 6668, so the host must reach the blinds' addresses. Docker's default bridge network does: outgoing connections to your LAN are routed through the host. Give every blind a fixed address in your router (a DHCP reservation), since LocalAssistant connects to the address you typed.

Printers are reached on port 8883 (MQTT over TLS). MELCloud is reached at app.melcloud.com over HTTPS. Installing or checking a community plugin reaches its site (GitHub, GitLab, Gitea or Forgejo) over HTTPS, or over plain HTTP for a self-hosted one you link that way.

#Behind a proxy

Put it behind an HTTPS reverse proxy that sets X-Forwarded-Proto and X-Forwarded-Host, and leave ORIGIN empty. Passkeys and installing the app on a phone both need HTTPS. On plain HTTP with no proxy, set ORIGIN to the exact URL you open.

#The image

docker.io/orochibraru/localassistant, for linux/amd64 and linux/arm64: Alpine with ffmpeg and Python 3 (for plugins written in Python) and two compiled Bun binaries, the server and the background worker it starts. latest is the last release, canary the last merge.

This guide lives in the project repo: edit it there, and this page follows with the next release.