# Tesserae, minimal docker-compose example. # # Copy this file next to where you want to keep your data, then: # # docker compose up -d # # The admin UI lands at http://:8765, the first request # walks through password setup and the onboarding wizard. # # Pin to a specific tag (not :latest) in any setup you care about so # `docker compose pull && up -d` is the deliberate upgrade step. # # This file uses **host networking** (Linux only). That's the right # default for a self-hosted Pi / mini-PC / NAS appliance because: # # * The render-frame URL Tesserae embeds in MQTT pushes points at # the host's actual LAN IP, your panels can reach it. (Bridge # networking gives the container a 172.x.x.x address LAN clients # can't see, which breaks both frame fetching and the built-in # MQTT broker URL.) # * mDNS works, so `http://tesserae.local:8765` resolves on your # LAN without extra plumbing. # * The built-in MQTT broker is reachable on port 1883 without you # publishing it from a `ports:` block. # # Docker Desktop on Mac / Windows handles host networking differently # (it's still in beta there), if you're testing on Mac or Windows, # switch to bridge networking by deleting the `network_mode: host` # line and uncommenting the `ports:` + `TESSERAE_HOST_IP` block at the # bottom. See `docs/install/docker.md` for the bridge variant and the # Mosquitto sidecar variant (full MQTT v5). services: tesserae: image: ghcr.io/dmellok/tesserae:latest container_name: tesserae restart: unless-stopped # Linux: share the host's network namespace. Tesserae binds 8765 # directly on the host, same as if you `pip install`'d it on the # box. Auto-fixes the bridge IP problem, lets mDNS work, exposes # the built-in MQTT broker on 1883 without `ports:`. network_mode: host volumes: # Settings, pages, schedules, event log, render cache, gallery # photos, backups. Replace `./data` with a host path you back # up (or a named volume), losing this loses everything. - ./data:/app/data environment: # The image sets this already so the Settings → System tab # hides the in-app self-update card (use `docker compose pull` # instead). Listed here so it's discoverable. TESSERAE_IN_DOCKER: "1" # Under host networking Tesserae binds 8765 directly on the # host. If something else already owns 8765 (nginx, another # app), move the web port here, no CMD override needed: # TESSERAE_BIND_PORT: "8766" # Visionect signs: default 11113, shared by all signs. Omit this to # configure it in Settings > Devices > Add device > Visionect instead. # TESSERAE_VISIONECT_PORT: "12000" # Listen on IPv6 (dual-stack where the OS supports it): # TESSERAE_BIND_HOST: "::" # ---- Bridge-networking alternative (Docker Desktop on Mac/Windows, # or any setup where host networking isn't an option) ------------- # # Delete `network_mode: host` above and uncomment the block below: # # ports: # - "8765:8765" # - "11113:11113" # Visionect: match BOTH sides to the configured port # - "1883:1883" # only if using the built-in MQTT broker # environment: # TESSERAE_IN_DOCKER: "1" # TESSERAE_HOST_IP: "192.168.1.50" # **required**, your host's LAN IP