services: lorabot: image: ${LORABOT_IMAGE:?set LORABOT_IMAGE to your image reference} container_name: lorabot restart: unless-stopped # MeshCore companion is on a USB serial port. Map the host device through to # the container. Override LORABOT_DEVICE for ttyACM0 etc. devices: - "${LORABOT_DEVICE:-/dev/ttyUSB0}:${LORABOT_DEVICE:-/dev/ttyUSB0}" # Some serial chipsets need access to the dialout group on the host. group_add: - dialout environment: LORABOT_MESHCORE__SERIAL_PORT: ${LORABOT_DEVICE:-/dev/ttyUSB0} LORABOT_LLM__BASE_URL: ${LORABOT_LLM_BASE_URL:?set LORABOT_LLM_BASE_URL} LORABOT_LLM__API_KEY: ${LORABOT_LLM_API_KEY:-not-needed} LORABOT_LLM__MODEL: ${LORABOT_LLM_MODEL:?set LORABOT_LLM_MODEL} # The app defaults to loopback; inside the container we need 0.0.0.0 so the # docker port mapping below can reach it. Restrict exposure at the host port. LORABOT_WEB__HOST: ${LORABOT_WEB_HOST:-0.0.0.0} ports: # Built-in read-only web UI. Override via LORABOT_WEB_PORT. - "${LORABOT_WEB_PORT:-8080}:8080" volumes: - lorabot-data:/data # Mount your config.toml at /etc/lorabot/config.toml. Anything not set in the # TOML will fall back to defaults; env vars above always win. - ./config.toml:/etc/lorabot/config.toml:ro volumes: lorabot-data: