Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Запускаете Node Red в контейнере, какой именно выбрать?

    Запускаете Node Red в контейнере, какой именно выбрать?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Запускаете Node Red в контейнере, какой именно выбрать?, RouterOS
     
    GiovanniG
    Guest
    #1
    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
    #2
    0
    02.10.2024 22:45:00
    Хорошие новости. Я не думал, что это что-то тяжелое — но проверить стоит. На всякий случай, top внутри контейнера может быть не лучшим тестом, потому что, как мне кажется, память учитывает всю доступную пользователю память, исключая ядро. А значения в RouterOS включают и то, и другое. Хотя я не уверен на 100%. Твой тест с остановкой/запуском и расчеты я доверяю больше, чем top. Подозреваю, что память будет достаточно стабильной, а вот нагрузка на процессор будет расти в зависимости от того, сколько запросов в секунду приходит и насколько сильно RouterOS загружен маршрутизацией. Но волноваться из-за какой-то панели управления не стоит.
     
     
     
    Amm0
    Guest
    #3
    0
    02.10.2024 22:46:00
    ($var->“val”) != “<> ~> => ” Извиняюсь за вторжение в тему — это была повторная публикация, изначально использованная для тестирования phpBB форума: [ font = ‘JetBrains Mono’ ]some->text[ / font ] работает (без пробелов). В Chrome с загруженным шрифтом JetBrains Mono — работает. В Safari — нет.
     
     
     
    GiovanniG
    Guest
    #4
    0
    08.10.2024 15:59:00
    Итак, я пытаюсь установить это на роутер ac3 arm и получаю ошибку: скачивается пакет, но при начале распаковки возникает ошибка. Не могу понять, в чём проблема, USB-флешка была отформатирована самим Mikrotik. Спасибо за помощь.
     
     
     
    GiovanniG
    Guest
    #5
    0
    08.10.2024 17:33:00
    Я частично решил проблему: отформатировал USB в ext4 через терминал и смог продолжить распаковку. Я следил за USB-диском, он записал примерно 700 МБ, потом процесс остановился и повторный запуск не даёт эффекта. Если перезагрузить роутер, контейнер уже не виден. Я стирал и форматировал USB заново — без результата, логи показывают только загрузку и скачивание. Я использую старую флешку на 2 ГБ, но она была новой, так что с ней всё должно быть в порядке. Ошибок записи или сбросов нет. Используется примерно на 10 МБ больше оперативки, не понимаю, в чём проблема. Рабочая папка /usr/src/node-red не появляется. По-моему, что-то идёт не так. Не понимаю, почему процесс прерывается. Команды такие же, как в CHR, только нужно заранее посмотреть через Files, как MikroTik называет USB-диск после форматирования, у меня это usb1/. Значит, команды будут такими:

    /container/envs/add name=nodered_envs key=TZ value=“Europe/Moscow”  
    /container/mounts/add dst=/data name=data_nodered src=/usb1/data_nodered  

    Временный диск — usb1/temp, корневой диск — usb1/nodered, в зависимости от скорости флешки. Но распаковка может занять много времени.  

    Перед установкой контейнера свободно было 174 МБ ОЗУ, после распаковки — 159 МБ, после перезагрузки контейнер отсутствует и опять 174 МБ.
     
     
     
    Amm0
    Guest
    #6
    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
    #7
    0
    08.10.2024 23:33:00
    Спасибо, друг, что ответил. Да, я тоже это заметил и согласен с тобой. Я делал несколько попыток, иногда Mikrotik сам добавляет слэш / после удаления его. В общем, такие команды работали на CHR, и, похоже, они должны работать и на arm + внешний диск, но не работают. Меня подозревает, что он не сравнивает рабочий путь, что-то идет не так при выполнении скрипта после установки файлов. Я вижу, что примерно 700 МБ записывается на USB1, так что процесс срывается на последнем этапе. Может, есть несовместимость между этим NR-образом и версией mikrotik container 7.16, а может, NR просто притворяется, что устанавливается, и на самом деле находит себя на нативном диске. У тебя была возможность тоже попробовать? Есть ли у тебя ARM-маршрутизатор? Может, мне стоит открыть отдельную тему и попросить помощи. К сожалению, у нас нет хороших инструментов, чтобы отладить процесс и выяснить причину.
     
     
     
    Amm0
    Guest
    #8
    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
    #9
    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"

       # итоговые пути/имена
       :local rootdir "$basedisk/containers/$tag/root-$cid"
       :local datadir "$basedisk/containers/$tag/data-$cid"
       :local subnet "$prefix.$cid"
       :local label "$tag $cid"
       :local vethName "veth$cid-$tag"

       :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"

       :if ([/terminal/ask "Введите 'y', чтобы продолжить. Любая другая клавиша отменяет действие."] = "y") do={
           /interface veth add name=$vethName address="$subnet.1/24" gateway="$subnet.254" comment=$label
           /ip address add address="$subnet.254/24" interface=$vethName comment=$label
           /container env add name="$cid-$tag" key="LOCAL_INSTANCE_ID" value=$cid comment=$label
           /container mounts add name="$cid-$tag" dst="/data" src=$datadir comment=$label
           /container add remote-image=$tag interface=$vethName root-dir=$rootdir mounts="$cid-$tag" logging=yes envlist="$cid-$tag" comment=$label

           /ip/firewall/nat add chain=dstnat action=dst-nat protocol=tcp port=1880 to-addresses=172.19.132.1 to-ports=1880 comment=$label disabled=yes
       }
       /container
       :delay 5s
       print
    }

    :global removeContainer do={
       # параметр tag= для поиска по комментарию при удалении — будьте осторожны
       :local label $tag
       :global containerImageTag
       :if ([:typeof $label] != "str") do={
           :set label $containerImageTag
       }
       /interface veth remove [find comment~$label]
       /ip address remove [find comment~$label]
       /container remove [find comment~$label]
       /container env remove [find comment~$label]
       /container mounts remove [find comment~$label]
       /ip/firewall/nat remove [find comment~$label]
    }

    Вырежьте и вставьте эти функции в CLI, затем используйте $makeContainer в командной строке, и вам покажут, что происходит. Чтобы удалить контейнер, используйте "$removeContainer" в CLI. В общем, не самый изящный способ, поскольку скрипт старый, но самый простой для изменения вне остальных моих скриптов.
     
     
     
    GiovanniG
    Guest
    #10
    0
    09.10.2024 10:59:00
    Привет, друг! Спасибо ещё раз за поддержку! Сначала я сделал так, как ты советовал: использовал nodered/node-red:3.1.12-minimal (работает без кавычек), перед форматированием флешки проверил в Файлах, что всё удалилось, и usb1 был перемонтирован, показывая только «потерянные папки». Ещё раз проверил все ненужные «/» и применил изменения. На этот раз скачалось около 300 МБ, но процесс завис — больше байтов не записывалось (как и раньше), продолжал распаковываться, но ничего не делал, ошибок в логах нет. Думаю, эта версия тоже несовместима с этим роутером, возможно? По твоему скрипту — спасибо, извини, что ещё не пробовал, но не думаю, что он даст что-то новое или другое, ведь пути те же, дублирует veth и монтирование, которые я уже настроил. Собираюсь написать на github с просьбой о поддержке.
     
     
     
    Amm0
    Guest
    #11
    0
    09.10.2024 15:22:00
    Можешь не обращать внимания на скрипт — он просто был у меня и я им пользовался для теста. Но похоже, что идей больше нет. У тебя: ext4 формат на USB с путями без слэшей для root-dir / tmpdir, образ, подходящий под архитектуру — на hAPac2/3 это может быть непросто, но мы подтвердили, что на DockerHub есть образы linux/arm/v6. Поскольку NodeRED обычно работает на RouterOS, проблема явно связана с hAPac3 и/или USB-диском. В чем именно — загадка. Работает ли загрузка простого контейнера типа “alpine”? То есть, согласно https://nodered.org/docs/getting-started/local , это МОЖЕТ сработать. Если какой-то шаг не удаётся — значит, не работает.

    В общем, ты можешь использовать базовый 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.

    В шелле alpine выполни:  
    apk add nodejs  
    apk add npm  
    npm install -g --unsafe-perm node-red  
    node-red

    NodeRED должен запуститься из шелла по последней команде. Попробуй открыть порт в браузере (если кажется, что оно запустилось). Если всё работает — выйди из нодреда и шелла через пару ^C, вернись в UI контейнера и…  
    Останови контейнер, чтобы изменить “cmd=”.  
    Поставь “Cmd:” просто в node-red.  
    Запусти контейнер — он должен работать так же, как при запуске из шелла. Если да — включи опцию boot-at-start=yes.

    Но, честно говоря, мы уже цепляемся за соломинки.
     
     
     
    GiovanniG
    Guest
    #12
    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, который я уже не помню.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры