Home Assistant через WB Cloud

Добрый день!
По инструкции Wiren Board Cloud — удалённое администрирование — Wiren Board
пытаюсь запустить web-интерфейс HA
секцию поправил:
location ~ ^/ha/(.*)$ {
set $upstream_app 127.0.0.1;
set $upstream_port 8123;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port/$1$is_args$args;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
при обращении к странице http://мой IP/ha/ - появляется логотип HA и зависает, т.е. дальше не прогружается.
вот что в логах nginx
sudo tail -f /var/log/nginx/error.log
2025/01/31 09:49:26 [info] 1702#1702: Using 131072KiB of shared memory for nchan in /etc /nginx/nginx.conf:61
2025/01/31 11:06:51 [error] 2642#2642: *10 open() “/var/www/frontend_latest/core.1733a3e 909f71e0c.js” failed (2: No such file or directory), client: 192.168.0.83, server: local host, request: “GET /frontend_latest/core.1733a3e909f71e0c.js HTTP/1.1”, host: “192.168. 0.12”
2025/01/31 11:06:51 [error] 2642#2642: *12 open() “/var/www/frontend_latest/app.0d59cd54 08a39872.js” failed (2: No such file or directory), client: 192.168.0.83, server: localh ost, request: “GET /frontend_latest/app.0d59cd5408a39872.js HTTP/1.1”, host: “192.168.0. 12”
2025/01/31 11:06:51 [error] 2645#2645: *13 open() “/var/www/static/images/ohf-badge.svg” failed (2: No such file or directory), client: 192.168.0.83, server: localhost, request : “GET /static/images/ohf-badge.svg HTTP/1.1”, host: “192.168.0.12”, referrer: “http://1 92.168.0.12/ha/”
2025/01/31 11:06:52 [error] 2642#2642: *10 open() “/var/www/hacsfiles/iconset.js” failed (2: No such file or directory), client: 192.168.0.83, server: localhost, request: “GET /hacsfiles/iconset.js HTTP/1.1”, host: “192.168.0.12”, referrer: “http://192.168.0.12/ha /”
Проверил, /var/www/frontend_latest , static, hacsfiles - таких директорий действительно нет.
Помогите, пожалуйста, как проправить ситуацию?

Добрый день!
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

Добрый день!

Вижу по логам следующие ошибки:

2025/01/31 11:06:51 [error] 2642#2642: *10 open() "/var/www/frontend_latest/core.1733a3e909f71e0c.js" failed (2: No such file or directory)
2025/01/31 11:06:51 [error] 2642#2642: *12 open() "/var/www/frontend_latest/app.0d59cd5408a39872.js" failed (2: No such file or directory)
2025/01/31 11:06:51 [error] 2645#2645: *13 open() "/var/www/static/images/ohf-badge.svg" failed (2: No such file or directory)
2025/01/31 11:06:52 [error] 2642#2642: *10 open() "/var/www/hacsfiles/iconset.js" failed (2: No such file or directory)

Home Assistant пытается загрузить файлы интерфейса, но они не находятся в ожидаемых папках. Nginx ожидает файлы в /var/www/frontend_latest/, однако Home Assistant хранит их внутри Docker-контейнера.

Понятно, подскажете как решить этот вопрос ?

Добрый день!

С ходу алгоритм назвать сложно, но я бы рассмотрел два варианта:

  1. Проксирование запросов от контейнера в nginx.
  2. Прописать пути к файлам, если они доступны локально в месте развертывания контейнера.

Однако проксирование кажется более верным решением.

Добрый день.
Я не пробовал такое.
Проанализируйте все ресурсы к которым обращается интерфейс и опишите все уровни вложенности.
Я не вижу запроса, но предполагаю что в нем присутствует //frontend_latest/* который не попадет в описаное в location.

Поправил секцию - результат тот же

location /ha/ {
set $upstream_app 127.0.0.1;
set $upstream_port 8123;
set $upstream_proto http;

proxy_pass $upstream_proto://$upstream_app:$upstream_port/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Поддержка вебсокетов
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

# Отключаем буферизацию, чтобы избежать задержек
proxy_buffering off;
proxy_http_version 1.1;

proxy_redirect off;

# Указываем Home Assistant, что он работает за прокси с изменённым путем
proxy_set_header X-Forwarded-Path /ha/;

}

Добавляем корректную обработку статических файлов

location /ha/frontend_latest/ {
proxy_pass http://127.0.0.1:8123/frontend_latest/;
}

location /ha/static/ {
proxy_pass http://127.0.0.1:8123/static/;
}

location /ha/hacsfiles/ {
proxy_pass http://127.0.0.1:8123/hacsfiles/;
}

сообщение как то не корректно залетело..
Поправил секцию, ноне помогло

`Текст «как есть» (без применения форматирования)`location /ha/ {
    set $upstream_app 127.0.0.1;
    set $upstream_port 8123;
    set $upstream_proto http;

    proxy_pass $upstream_proto://$upstream_app:$upstream_port/;
    
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # Поддержка вебсокетов
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    # Отключаем буферизацию, чтобы избежать задержек
    proxy_buffering off;
    proxy_http_version 1.1;

    proxy_redirect off;
    
    # Указываем Home Assistant, что он работает за прокси с изменённым путем
    proxy_set_header X-Forwarded-Path /ha/;
}

# Добавляем корректную обработку статических файлов
location /ha/frontend_latest/ {
    proxy_pass http://127.0.0.1:8123/frontend_latest/;
}

location /ha/static/ {
    proxy_pass http://127.0.0.1:8123/static/;
}

location /ha/hacsfiles/ {
    proxy_pass http://127.0.0.1:8123/hacsfiles/;
}

А какой результат запроса с помощью wget, например?

сорри , подскажите, как сделать такой запрос?
из консоли : wget --spider ?

С компьютера, wget ресурс -O - например

Вы это имели ввиду?

C:\Users\user>wget http://192.168.0.12:8123
--2025-01-31 16:01:57--  http://192.168.0.12:8123/
Connecting to 192.168.0.12:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5496 (5,4K) [text/html]
Saving to: 'index.html.1'

index.html.1                  100%[=================================================>]   5,37K  --.-KB/s    in 0s

2025-01-31 16:01:57 (227 MB/s) - 'index.html.1' saved [5496/5496]


C:\Users\user>wget http://192.168.0.12:8123/hacsfiles/
--2025-01-31 16:02:21--  http://192.168.0.12:8123/hacsfiles/
Connecting to 192.168.0.12:8123... connected.
HTTP request sent, awaiting response... 404 Not Found
2025-01-31 16:02:21 ERROR 404: Not Found.

Да.

А какой ресурс тут запрашиваете? Точнее - какого результата ожидаете? В контейнере HA не настроена обработка пустых для второго уровня ЕМНИП.
Вопрос не касается ПО контроллера, тут речь о настройке прокси для HA. Рекомендую посмотреть на форума HA - там есть например Home Assistant: убираем за NGINX и подключаем сертификаты | marvins.ru
Ну и Nginx separate reverse proxy - #4 by Unl1kely - Installation - Home Assistant Community

Я понимаю, что вопрос не касается ПО контроллера, задача кажется не сложной, но для меня пока не достижима. Два дня бьюсь над решением, Вы - это уже крайняя инстанция.
К сожалению Ваши ответы ясности не добавили.

Запросы каких именно ресурсов интерфейса HA должны идти через прокси - но пятаюится обработаться локально?

Какой запрос вот это вызывает?
Я могу, конечно, собрать стенд для того чтобы попробовать сконфигурировать прокси - но большого приоритета выделять этой задаче не буду, так как она относится к стороннему ПО.
Запланирую себе.

Добрый день. Я не смог получить доступ к HA через реверс-прокси. В его web интерфейсе “из коробки” не поддерживается работа через reverse-proxy.

HA поддерживает работу в конфигурации с реверс прокси. Это описано в документации HA. Нужно внести соответствующую секцию в configuration.yaml. HTTP - Home Assistant
У меня была другая задача, которую решал с одним товарищем из Ledron. Он предложил идею, чтобы в облаке WB открывался интерфейс HA. Идея показалась отличной, т.к. для меня HA основная система которая работает на WB, а HomeUI от WB это админка сервера, которую можно отображать в панели HA. Собственно на Reverse Proxy nginx всё и сделал. Могу точно сказать, что из корня реверс прокси работает. Из под директории не пробовал и утверждать не буду. WB homeui просто в лоб из под директории не работает, но тоже удалось сделать. Если кому-то интересно, опишу.

Да, именно так.
Но если пробовать rewrite какого-то подкаталога - то уже нет. Ну или у меня недостаточно знаний.

такая же задача?

Не совсем такая. Но по сути и та задача так же решается. Мне нужно было чтобы интерфейс HA был на http://localhost, а интерфейс WB был на http://localhost/wb/. Тогда из облака WB открывается интерфейс HA, а для доступа к интерфейсу WB создается веб панель или обычная панель в вэб карточкой в которых в качестве url указывается /wb/.
В той задаче не до конца решен вопрос с фильтрами, поэтому и не заработало. Нужно чуть больше фильтров, фильтровать все файлы и отключить gzip для всего интерфейса.
Для поддиректории /wb/, фильтры будут такие:
add_header Cache-Control “no-store, no-cache, must-revalidate”;
sub_filter ‘href="/’ ‘href="/wb/’;
sub_filter ‘src="/’ ‘src="/wb/’;
sub_filter ‘fetch("/’ ‘fetch("/wb/’;
sub_filter ‘urlTemplate:"/’ ‘urlTemplate:"/wb/’;
sub_filter ‘localeLocationPattern("/’ ‘localeLocationPattern("/wb/’;
sub_filter ‘o.p="/’ ‘o.p="/wb/’;
sub_filter ‘url(/’ ‘url(/wb/’;
sub_filter_once off;
sub_filter_types *;
И нужно закоментировать все строки с gzip:
gzip on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_min_length 1200;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/font-woff image/svg+xml;|

1 лайк