Docker

docker compose up -d

docker-compose.yml pulls the prebuilt makershop/llamanexus-webui image by name/tag (makershop/llamanexus-webui:${TAG:-latest}) - no build step. Set TAG= in your environment (or a .env file next to docker-compose.yml) to pin a specific version instead of latest.

Uses network_mode: host by default so LAN server auto-discovery (UDP broadcast) actually works - Docker's default bridge network doesn't relay that traffic in. If you don't need auto-discovery (you can always type your LlamaNexus proxy's URL directly in Settings), switch to the commented-out ports: mapping in docker-compose.yml instead.

./data (bind-mounted to backend/data) persists Settings and every session across container recreation. On first boot, docker-entrypoint.sh seeds it with bindHost: 0.0.0.0 - the app's own default (127.0.0.1) would otherwise make it unreachable from outside the container entirely, with no way to fix it via the Settings UI since you could never reach that UI to begin with. ./workspace is an optional mount for read_file/write_file/patch_file/run_bash to operate against - point Settings → Connection → "Workspace root" at /workspace once the container's up. Set HF_TOKEN in a .env file next to docker-compose.yml for gated/private Hugging Face repo search.

Reference docker-compose.yml

services:
  llamanexus-webui:
    container_name: llamanexus-webui
    image: makershop/llamanexus-webui:${TAG:-latest}
    network_mode: host
    # ports:
    #   - "8787:8787"
    volumes:
      - ./data:/app/backend/data:z
      - ./workspace:/workspace:z
    environment:
      - HF_TOKEN=${HF_TOKEN:-}
    restart: unless-stopped

:z relabels the bind mounts for container access under SELinux (Fedora/RHEL) - a harmless no-op on hosts without SELinux.