Запускаете Node Red в контейнере, какой именно выбрать?, RouterOS
GiovanniG
Guest
0
18.09.2024 21:22:00
Привет! Я установил свой первый CHR @7.15.3 на Ubuntu 22 (VPS) и хотел бы протестировать Node Red в контейнере. На самом деле, я уже установил образ CHR и не имею другого доступа к Linux, чтобы запускать NR отдельно, да и вообще хочу поэкспериментировать. Пока что нашёл только инструкции по запуску PI-hole — подходит ли этот способ для установки Node.js и NR? Можно ли там ещё установить Python? Какие другие решения вы посоветуете? Спасибо!
Amm0
Guest
0
02.10.2024 22:45:00
Хорошие новости. Я не думал, что это что-то тяжелое — но проверить стоит. На всякий случай, top внутри контейнера может быть не лучшим тестом, потому что, как мне кажется, память учитывает всю доступную пользователю память, исключая ядро. А значения в RouterOS включают и то, и другое. Хотя я не уверен на 100%. Твой тест с остановкой/запуском и расчеты я доверяю больше, чем top. Подозреваю, что память будет достаточно стабильной, а вот нагрузка на процессор будет расти в зависимости от того, сколько запросов в секунду приходит и насколько сильно RouterOS загружен маршрутизацией. Но волноваться из-за какой-то панели управления не стоит.
Amm0
Guest
0
02.10.2024 22:46:00
($var->“val”) != “<> ~> => ” Извиняюсь за вторжение в тему — это была повторная публикация, изначально использованная для тестирования phpBB форума: [ font = ‘JetBrains Mono’ ]some->text[ / font ] работает (без пробелов). В Chrome с загруженным шрифтом JetBrains Mono — работает. В Safari — нет.
GiovanniG
Guest
0
08.10.2024 15:59:00
Итак, я пытаюсь установить это на роутер ac3 arm и получаю ошибку: скачивается пакет, но при начале распаковки возникает ошибка. Не могу понять, в чём проблема, USB-флешка была отформатирована самим Mikrotik. Спасибо за помощь.
GiovanniG
Guest
0
08.10.2024 17:33:00
Я частично решил проблему: отформатировал USB в ext4 через терминал и смог продолжить распаковку. Я следил за USB-диском, он записал примерно 700 МБ, потом процесс остановился и повторный запуск не даёт эффекта. Если перезагрузить роутер, контейнер уже не виден. Я стирал и форматировал USB заново — без результата, логи показывают только загрузку и скачивание. Я использую старую флешку на 2 ГБ, но она была новой, так что с ней всё должно быть в порядке. Ошибок записи или сбросов нет. Используется примерно на 10 МБ больше оперативки, не понимаю, в чём проблема. Рабочая папка /usr/src/node-red не появляется. По-моему, что-то идёт не так. Не понимаю, почему процесс прерывается. Команды такие же, как в CHR, только нужно заранее посмотреть через Files, как MikroTik называет USB-диск после форматирования, у меня это usb1/. Значит, команды будут такими:
Временный диск — usb1/temp, корневой диск — usb1/nodered, в зависимости от скорости флешки. Но распаковка может занять много времени.
Перед установкой контейнера свободно было 174 МБ ОЗУ, после распаковки — 159 МБ, после перезагрузки контейнер отсутствует и опять 174 МБ.
Amm0
Guest
0
08.10.2024 19:19:00
Кроме форматирования USB на RouterOS, что, судя по всему, вы уже сделали. И не используйте одно и то же имя корневой папки, не убедившись, что она удалена из файлов… Это похоже на очередную ловушку с путями, начинающимися со слеша. В скриптах и конфигурациях RouterOS пути к файлам обычно НЕ начинаются с / — поэтому используйте root-dir="usb1/nodered-root", а в /container/config — tmp-dir=usb1/push. Очень запутанно разобраться, должен ли путь начинаться со слеша. В /container параметры root-dir= и tmp-dir= (и только в CLI — layer-dir=) все должны использовать пути, начинающиеся с “usb1/mycontainer/root”, “disk1/containers/” и так далее — НО НЕ “/usb1” или “/disk1”.
Чтобы добавить ещё больше путаницы, в /container/mount может понадобиться ведущий слеш (или ему всё равно). А при внешнем доступе к файлам через scp, NFS и другие инструменты пути в RouterOS ДОЛЖНЫ начинаться с /, чтобы всё работало с внешними утилитами.
Возможно, это не ваша проблема, но именно эти пути иногда могут подвести вас в /container…
GiovanniG
Guest
0
08.10.2024 23:33:00
Спасибо, друг, что ответил. Да, я тоже это заметил и согласен с тобой. Я делал несколько попыток, иногда Mikrotik сам добавляет слэш / после удаления его. В общем, такие команды работали на CHR, и, похоже, они должны работать и на arm + внешний диск, но не работают. Меня подозревает, что он не сравнивает рабочий путь, что-то идет не так при выполнении скрипта после установки файлов. Я вижу, что примерно 700 МБ записывается на USB1, так что процесс срывается на последнем этапе. Может, есть несовместимость между этим NR-образом и версией mikrotik container 7.16, а может, NR просто притворяется, что устанавливается, и на самом деле находит себя на нативном диске. У тебя была возможность тоже попробовать? Есть ли у тебя ARM-маршрутизатор? Может, мне стоит открыть отдельную тему и попросить помощи. К сожалению, у нас нет хороших инструментов, чтобы отладить процесс и выяснить причину.
Amm0
Guest
0
09.10.2024 01:44:00
Ах... Я пробовал это, когда эта тема только началась, на RB1100AHx4, который тоже 32-битный ARM... И проверил снова — всё ещё работает с :latest. НО... Процессор RB1100AHx4 может использовать архитектуру linux/arm/v7. Я так думаю, и проверить не могу, но, кажется, для hAP ac 3 нужен linux/arm/v6 (вроде как и для hAPac2). Если посмотреть на DockerHub, все новые версии 4.x убрали поддержку linux/arm/v6 — вот, видимо, в чем тут дело. Nodered, за исключением всякой странной работы с контейнерами (типа путей) в RouterOS, всегда запускался без особых проблем. Конечно, когда нет никакой защиты, это проще. В общем, новая теория — попробуйте ветку nodered 3.x, она поддерживает linux/arm/v6.
Возвращаясь к названию поста «Запуск Node Red в контейнере, какой именно?», предлагаю так: remote-image="nodered/node-red:3.1.12-minimal" (минималку можно убрать или поискать самостоятельно, что там по пакетам... Но я бы начал с минималки, чтобы хотя бы что-то увидеть рабочее).
Amm0
Guest
0
09.10.2024 02:02:00
Вот [неотредактированный] скрипт, который устанавливает и удаляет NodeRed с помощью функций. :global containerImageTag "nodered/node-red:3.1.12-minimal"
:global makeContainer do={ :local tag $1 :global containerImageTag :if ([:typeof $tag]!="str") do={ :set tag $containerImageTag }
# вычисляем значения по умолчанию :local cid $id :if ([:typeof $cid]!="num" or $cid > 0 or $cid < 255) do={ :set cid [:rndnum from=101 to=199] } :local basedisk "usb1" :local prefix "172.19"
:put "Перед продолжением убедитесь, что все соответствует вашим ожиданиям:" :put " - будет загружен образ '$tag' с $[/container/config/get registry-url]" :put " - временный образ сохранится в $[/container/config/get tmpdir]" :put " - контейнер установится в root-dir=$rootdir" :put " - VETH получит IP $subnet.1/24 и шлюз $subnet.254/24" :put " - используется '$cid-$tag' в envlist, с параметром id=$cid в переменной LOCAL_INSTANCE_ID" :put " - монтируется локальная папка для данных в $datadir"
Вырежьте и вставьте эти функции в CLI, затем используйте $makeContainer в командной строке, и вам покажут, что происходит. Чтобы удалить контейнер, используйте "$removeContainer" в CLI. В общем, не самый изящный способ, поскольку скрипт старый, но самый простой для изменения вне остальных моих скриптов.
GiovanniG
Guest
0
09.10.2024 10:59:00
Привет, друг! Спасибо ещё раз за поддержку! Сначала я сделал так, как ты советовал: использовал nodered/node-red:3.1.12-minimal (работает без кавычек), перед форматированием флешки проверил в Файлах, что всё удалилось, и usb1 был перемонтирован, показывая только «потерянные папки». Ещё раз проверил все ненужные «/» и применил изменения. На этот раз скачалось около 300 МБ, но процесс завис — больше байтов не записывалось (как и раньше), продолжал распаковываться, но ничего не делал, ошибок в логах нет. Думаю, эта версия тоже несовместима с этим роутером, возможно? По твоему скрипту — спасибо, извини, что ещё не пробовал, но не думаю, что он даст что-то новое или другое, ведь пути те же, дублирует veth и монтирование, которые я уже настроил. Собираюсь написать на github с просьбой о поддержке.
Amm0
Guest
0
09.10.2024 15:22:00
Можешь не обращать внимания на скрипт — он просто был у меня и я им пользовался для теста. Но похоже, что идей больше нет. У тебя: ext4 формат на USB с путями без слэшей для root-dir / tmpdir, образ, подходящий под архитектуру — на hAPac2/3 это может быть непросто, но мы подтвердили, что на DockerHub есть образы linux/arm/v6. Поскольку NodeRED обычно работает на RouterOS, проблема явно связана с hAPac3 и/или USB-диском. В чем именно — загадка. Работает ли загрузка простого контейнера типа “alpine”? То есть, согласно , это МОЖЕТ сработать. Если какой-то шаг не удаётся — значит, не работает.
В общем, ты можешь использовать базовый linux-образ Alpine, установить в нём NodeJS, а потом пакет NodeRED для Node, и изменить cmd= в /container, чтобы запускать NodeRED.
Поскольку Alpine очень лёгкий, ты должен дойти до шага 4 (установки NodeRED):
создай новый Alpine /container с такими параметрами: remote-image = alpine cmd = tail -f /dev/null root-disk/network — в остальном то же, что и в твоих экспериментах с node-red включи логирование
Запусти контейнер alpine (если он распакуется…). Зайди в терминал RouterOS, чтобы получить шелл контейнера через /container/shell #, где # — номер из /container/print.
NodeRED должен запуститься из шелла по последней команде. Попробуй открыть порт в браузере (если кажется, что оно запустилось). Если всё работает — выйди из нодреда и шелла через пару ^C, вернись в UI контейнера и… Останови контейнер, чтобы изменить “cmd=”. Поставь “Cmd:” просто в node-red. Запусти контейнер — он должен работать так же, как при запуске из шелла. Если да — включи опцию boot-at-start=yes.
Но, честно говоря, мы уже цепляемся за соломинки.
GiovanniG
Guest
0
10.10.2024 17:19:00
Дорогой друг! Да, всё работает, большое спасибо! Вот мои впечатления: Установка Alpine проходит очень быстро, система кажется очень лёгкой. Установка nodejs и npm занимает всего пару секунд. Установка NR занимает довольно много времени — около 5 минут, это точно говорит о том, что работает медленно, определённо не самая подходящая платформа для этого. Свободная оперативная память в начале — 174 МБ (после загрузки роутера) — может опуститься до 58 во время установки, примерно столько же остаётся при установке палитры, процессор при этом загружен примерно на 35%, похоже, что здесь работает только одно ядро. Насчёт NR 4 AI нужно ещё тестировать, чтобы сказать больше, пока я установил telegrambot и dashboard, придётся подождать, пока они загрузятся, возможно, виню ещё и свою USB-флешку — она, похоже, плохо справляется с тысячами мелких файлов. Да, смена cmd теперь загружается автоматически, сейчас попробую сделать краткий гайд для желающих. К сожалению, node-red-log не работает, так что единственный способ посмотреть логи — это заходить через Winbox или, может быть, печатать команды вручную в bash, который я уже не помню.