From f86d008c47f16b1fb643e358de9baece347e66f1 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Wed, 28 Jan 2026 20:00:52 -0500 Subject: [PATCH 1/4] Switch to ingress --- openthread_border_router/Dockerfile | 14 ++++++++ openthread_border_router/config.yaml | 2 ++ .../rootfs/etc/nginx/nginx.conf | 33 +++++++++++++++++++ .../s6-rc.d/nginx/dependencies.d/otbr-web | 0 .../rootfs/etc/s6-overlay/s6-rc.d/nginx/run | 13 ++++++++ .../rootfs/etc/s6-overlay/s6-rc.d/nginx/type | 1 + .../etc/s6-overlay/s6-rc.d/otbr-web/run | 5 +-- .../s6-overlay/s6-rc.d/user/contents.d/nginx | 0 .../etc/s6-overlay/scripts/enable-check.sh | 12 ------- 9 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 openthread_border_router/rootfs/etc/nginx/nginx.conf create mode 100644 openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/otbr-web create mode 100755 openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/run create mode 100644 openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/type create mode 100644 openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx diff --git a/openthread_border_router/Dockerfile b/openthread_border_router/Dockerfile index 6564f3118..f66e14bde 100644 --- a/openthread_border_router/Dockerfile +++ b/openthread_border_router/Dockerfile @@ -167,6 +167,7 @@ RUN \ libncurses6 \ libprotobuf-lite32 \ libjsoncpp26 \ + nginx \ && pip install --break-system-packages --no-cache-dir \ universal-silabs-flasher==${UNIVERSAL_SILABS_FLASHER_VERSION} \ serialx==${SERIALX_VERSION} \ @@ -183,6 +184,19 @@ COPY --from=otbr-stable-builder /opt/otbr-stable /opt/otbr-stable COPY --from=otbr-stable-builder /usr/sbin/mdnsd /opt/otbr-stable/sbin/mdnsd COPY --from=otbr-stable-builder /usr/lib/libdns_sd.so /usr/lib/libdns_sd.so COPY --from=otbr-stable-builder /usr/lib/libdns_sd.so.1 /usr/lib/libdns_sd.so.1 + +# Patch app.js to use relative URLs for ingress compatibility +RUN echo "angular.module('StarterApp').config(['\$httpProvider', function(\$httpProvider) { \ + \$httpProvider.interceptors.push(function() { \ + return { \ + request: function(config) { \ + config.url = config.url.replace(/^http:\\/\\/[^/]+\\//, ''); \ + return config; \ + } \ + }; \ + }); \ +}]);" | tee -a /opt/otbr-{stable,beta}/share/otbr-web/frontend/res/js/app.js + COPY rootfs / ENV \ diff --git a/openthread_border_router/config.yaml b/openthread_border_router/config.yaml index e61b100d5..a05f59ac7 100644 --- a/openthread_border_router/config.yaml +++ b/openthread_border_router/config.yaml @@ -23,6 +23,8 @@ privileged: devices: - /dev/net/tun image: homeassistant/{arch}-addon-otbr +ingress: true +ingress_port: 8080 init: false options: device: null diff --git a/openthread_border_router/rootfs/etc/nginx/nginx.conf b/openthread_border_router/rootfs/etc/nginx/nginx.conf new file mode 100644 index 000000000..48acd58dc --- /dev/null +++ b/openthread_border_router/rootfs/etc/nginx/nginx.conf @@ -0,0 +1,33 @@ +worker_processes 1; +pid /tmp/nginx.pid; +error_log /dev/stdout info; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + access_log /dev/stdout; + + server { + listen 8080; + + # Proxy REST API requests to otbr-agent + location /api/ { + proxy_pass http://ADDON_IP:8081; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # Proxy everything else to otbr-web + location / { + proxy_pass http://127.0.0.1:8082; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + } +} diff --git a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/otbr-web b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/otbr-web new file mode 100644 index 000000000..e69de29bb diff --git a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/run b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/run new file mode 100755 index 000000000..017667171 --- /dev/null +++ b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/run @@ -0,0 +1,13 @@ +#!/usr/bin/with-contenv bashio +# vim: ft=bash +# shellcheck shell=bash +# ============================================================================== +# Start nginx reverse proxy for OTBR web interface +# ============================================================================== +bashio::log.info "Starting nginx..." + +# REST API listens on addon IP, so we need to know it for proxying +addon_ip="$(bashio::addon.ip_address)" +sed "s/ADDON_IP/${addon_ip}/g" /etc/nginx/nginx.conf > /tmp/nginx.conf + +exec nginx -g "daemon off;" -c /tmp/nginx.conf diff --git a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/type b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/nginx/type @@ -0,0 +1 @@ +longrun diff --git a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/otbr-web/run b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/otbr-web/run index 427f02540..cfe9559ed 100755 --- a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/otbr-web/run +++ b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/otbr-web/run @@ -5,8 +5,5 @@ # Start OpenThread BorderRouter web interface # ============================================================================== bashio::log.info "Starting otbr-web..." -declare otbr_web_port -otbr_web_port="$(bashio::addon.port 8080)" - -exec stdbuf -oL /usr/sbin/otbr-web -I wpan0 -d6 -s -a "::" -p "${otbr_web_port}" +exec stdbuf -oL /usr/sbin/otbr-web -I wpan0 -d6 -s -p 8082 -a 127.0.0.1 diff --git a/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx b/openthread_border_router/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx new file mode 100644 index 000000000..e69de29bb diff --git a/openthread_border_router/rootfs/etc/s6-overlay/scripts/enable-check.sh b/openthread_border_router/rootfs/etc/s6-overlay/scripts/enable-check.sh index 96b730d5a..8489c2830 100755 --- a/openthread_border_router/rootfs/etc/s6-overlay/scripts/enable-check.sh +++ b/openthread_border_router/rootfs/etc/s6-overlay/scripts/enable-check.sh @@ -22,18 +22,6 @@ else ln -sf "/opt/otbr-stable/sbin/mdnsd" /usr/sbin/mdnsd fi -# ============================================================================== -# Disable OTBR Web if necessary ports are not exposed -# ============================================================================== - -if bashio::var.has_value "$(bashio::addon.port 8080)" \ - && bashio::var.has_value "$(bashio::addon.port 8081)"; then - bashio::log.info "Web UI and REST API port are exposed, starting otbr-web." -else - rm /etc/s6-overlay/s6-rc.d/user/contents.d/otbr-web - bashio::log.info "The otbr-web is disabled." -fi - # ============================================================================== # Enable socat-otbr-tcp service if needed # ============================================================================== From dcd56b28fc2d0ac5d42ae0ec804c5424b0713c4a Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Fri, 30 Jan 2026 21:10:53 -0500 Subject: [PATCH 2/4] Patch web UI to remove commands that break OTBR. You can always enter the container directly and run `ot-cli` for any sort of management. This patch just disables knobs that break things. --- .../0003-ha-web-ui-customizations.patch | 77 +++++++++++++++++++ openthread_border_router/Dockerfile | 16 +--- 2 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 openthread_border_router/0003-ha-web-ui-customizations.patch diff --git a/openthread_border_router/0003-ha-web-ui-customizations.patch b/openthread_border_router/0003-ha-web-ui-customizations.patch new file mode 100644 index 000000000..5b05026e6 --- /dev/null +++ b/openthread_border_router/0003-ha-web-ui-customizations.patch @@ -0,0 +1,77 @@ +diff --git a/src/web/web-service/frontend/index.html b/src/web/web-service/frontend/index.html +index cb052f26..992f03d6 100644 +--- a/src/web/web-service/frontend/index.html ++++ b/src/web/web-service/frontend/index.html +@@ -89,7 +89,7 @@ + +