Node-RED на TrueNAS: Установка, настройка, автоматизация | Гайд 2024 | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Node-RED на TrueNAS: Полное руководство по установке и автоматизации

22 марта 2026 10 мин. чтения #devops #docker #home-lab #iot #node-red #truenas #автоматизация #настройка
Содержание статьи

Представь, что твой TrueNAS сервер — это не просто хранилище данных, а умный центр управления, который может сам следить за дисками, отправлять уведомления, управлять виртуальными машинами и даже взаимодействовать с умным домом. Всё это становится реальностью с Node-RED — визуальным инструментом для программирования, который идеально вписывается в экосистему TrueNAS. Давай разберем, как развернуть эту мощную связку и начать автоматизировать всё вокруг.

Что такое Node-RED и зачем он нужен на TrueNAS?

Node-RED — это flow-based programming tool, созданный IBM для визуального соединения устройств, API и онлайн-сервисов. На практике это означает, что ты можешь создавать сложные логические цепочки (потоки), перетаскивая ноды (блоки) и соединяя их между собой, почти не написав ни строчки кода.

Ключевые преимущества связки TrueNAS + Node-RED:
• Централизованное управление автоматизацией всего homelab
• Прямой доступ к API TrueNAS для мониторинга и управления
• Интеграция с Docker, виртуальными машинами и службами
• Визуальное программирование без глубоких знаний кода

Сравнение методов установки Node-RED на TrueNAS

Метод TrueNAS Scale TrueNAS Core Сложность Гибкость
Официальное приложение ✅ Рекомендуется ❌ Недоступно Низкая Средняя
Docker контейнер ✅ Через Apps ✅ Через Jail Средняя Высокая
Ручная установка ⚠️ Возможно ⚠️ Через pkg Высокая Максимальная

Установка Node-RED на TrueNAS Scale через официальное приложение

Это самый простой и рекомендуемый способ для TrueNAS Scale. TrueNAS использует Kubernetes (k3s) для управления приложениями, что делает установку Node-RED буквально в несколько кликов.

Шаг 1: Подготовка хранилища

Сначала создадим dataset для хранения данных Node-RED:

bash
# Подключаемся к TrueNAS по SSH
ssh admin@truenas.local

# Создаем dataset для Node-RED
zfs create tank/apps/node-red

# Устанавливаем правильные права
chown -R 1000:1000 /mnt/tank/apps/node-red
chmod -R 755 /mnt/tank/apps/node-red

Шаг 2: Установка через UI TrueNAS

  1. Откройте веб-интерфейс TrueNAS Scale
  2. Перейдите в раздел AppsAvailable Applications
  3. Найдите node-red в поиске или каталоге
  4. Нажмите Install и заполните конфигурацию:
yaml
# Пример конфигурации установки:
Application Name: node-red
Version: 4.1.0

# Настройки сети:
Container Port: 1880
NodePort: 31880  # Внешний порт

# Хранилище:
Host Path: /mnt/tank/apps/node-red
Mount Path: /data

# Безопасность:
Run as User: 1000
Run as Group: 1000

# Дополнительные переменные среды:
NODE_RED_ENABLE_PROJECTS: "false"
NODE_RED_ENABLE_SAFE_MODE: "false"
Важно! Если планируете использовать дополнительные ноды (пакеты), установите NODE_RED_ENABLE_PROJECTS: "true" и убедитесь, что том для /data имеет достаточный размер (минимум 1GB).

Шаг 3: Настройка обратного прокси (опционально)

Для доступа по красивому URL (например, node-red.truenas.local) настройте обратный прокси:

nginx
server {
    listen 80;
    server_name node-red.truenas.local;
    
    location / {
        proxy_pass http://localhost:31880;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
    }
}

Установка Node-RED на TrueNAS Core через Jail

Для TrueNAS Core (на базе FreeBSD) используем Jail — легковесную виртуальную среду.

Создание и настройка Jail

bash
# Создаем Jail через веб-интерфейс или CLI
# Через веб: Jails → Add

# Или через CLI:
iocage create -n "noderod" \
  -r 13.2-RELEASE \
  ip4_addr="vnet0|192.168.1.100/24" \
  defaultrouter="192.168.1.1" \
  vnet=on \
  boot=on

# Запускаем Jail
iocage start noderod

# Входим в Jail
iocage console noderod

Установка Node.js и Node-RED внутри Jail

bash
# Обновляем репозитории
pkg update && pkg upgrade -y

# Устанавливаем Node.js
pkg install -y node npm

# Устанавливаем Node-RED глобально
npm install -g --unsafe-perm node-red

# Создаем папку для данных
mkdir -p /usr/local/etc/node-red
chown -R nobody:nobody /usr/local/etc/node-red

# Создаем службу для автозапуска
echo 'node_red_enable="YES"' >> /etc/rc.conf
echo 'node_red_user="nobody"' >> /etc/rc.conf
echo 'node_red_dir="/usr/local/etc/node-red"' >> /etc/rc.conf

Настройка и запуск службы

bash
# Создаем файл службы
cat > /usr/local/etc/rc.d/node-red << 'EOF'
#!/bin/sh
#
# PROVIDE: node_red
# REQUIRE: NETWORKING
# KEYWORD: shutdown

. /etc/rc.subr

name="node_red"
rcvar=node_red_enable

load_rc_config $name

: ${node_red_enable:="NO"}
: ${node_red_user:="nobody"}
: ${node_red_dir:="/usr/local/etc/node-red"}

command="/usr/local/bin/node-red"
command_args="--userDir ${node_red_dir}"
pidfile="/var/run/${name}.pid"

run_rc_command "$1"
EOF

# Даем права на выполнение
chmod +x /usr/local/etc/rc.d/node-red

# Запускаем Node-RED
service node-red start

# Проверяем статус
service node-red status

Практические примеры автоматизации TrueNAS через Node-RED

Теперь самое интересное — давай создадим полезные потоки, которые превратят твой TrueNAS в умную систему.

Пример 1: Мониторинг состояния дисков и уведомления

Этот поток будет проверять SMART-статус дисков и отправлять уведомления в Telegram при обнаружении проблем.

javascript
// Установите дополнительные ноды:
// node-red-contrib-truenas-api
// node-red-contrib-telegrambot

// Структура потока:
// [inject] (каждые 6 часов) →
// [truenas-api: disks.query] →
// [function: проверка SMART] →
// [switch: если есть ошибки] →
// [telegram: отправка сообщения]

// Код функции проверки SMART:
const problemDisks = [];

for (const disk of msg.payload) {
    if (disk.smart_info) {
        const smart = disk.smart_info;
        if (smart.status !== 'PASSED' || 
            smart.tests_failed > 0 ||
            smart.temperature > 50) {
            problemDisks.push({
                name: disk.name,
                model: disk.model,
                serial: disk.serial,
                temp: smart.temperature,
                status: smart.status
            });
        }
    }
}

if (problemDisks.length > 0) {
    msg.payload = {
        chatId: 'YOUR_CHAT_ID',
        type: 'message',
        content: `⚠️ Проблемы с дисками на TrueNAS:\n` +
                 problemDisks.map(d => 
                     `• ${d.name} (${d.model}): ${d.status}, ${d.temp}°C`
                 ).join('\n')
    };
    return msg;
} else {
    return null; // Нет проблем — нет сообщения
}

Пример 2: Автоматическое создание снапшотов ZFS

Создадим поток, который будет делать снапшоты важных dataset'ов по расписанию и удалять старые.

javascript
// Поток для управления снапшотами:
// [cron] (ежедневно в 2:00) →
// [function: список dataset] →
// [split] →
// [truenas-api: snapshot.create] →
// [delay] (7 дней) →
// [truenas-api: snapshot.delete_old]

// Функция создания имени снапшота:
const now = new Date();
const datasets = [
    'tank/photos',
    'tank/documents',
    'tank/vm',
    'tank/backups'
];

const snapshots = datasets.map(dataset => ({
    dataset: dataset,
    name: `auto-${now.getFullYear()}${(now.getMonth()+1).toString().padStart(2,'0')}${now.getDate().toString().padStart(2,'0')}-${now.getHours().toString().padStart(2,'0')}${now.getMinutes().toString().padStart(2,'0')}`,
    recursive: true
}));

msg.payload = snapshots;
return msg;

Пример 3: Интеграция с Home Assistant

Создадим датчики в Home Assistant на основе метрик TrueNAS.

yaml
# Установите ноду: node-red-contrib-home-assistant-websocket

# Конфигурация MQTT discovery для Home Assistant:
msg.payload = {
    "name": "TrueNAS CPU Temperature",
    "state_topic": "truenas/sensor/cpu_temp/state",
    "unit_of_measurement": "°C",
    "device_class": "temperature",
    "value_template": "{{ value_json.temperature }}",
    "json_attributes_topic": "truenas/sensor/cpu_temp/attributes",
    "device": {
        "identifiers": ["truenas-server"],
        "name": "TrueNAS Server",
        "manufacturer": "iXsystems",
        "model": "Custom Build"
    }
};

msg.topic = "homeassistant/sensor/truenas_cpu_temp/config";
return msg;

Безопасность и лучшие практики

Критически важно! Node-RED по умолчанию не имеет аутентификации. Никогда не оставляйте его открытым в интернете без защиты.

Настройка аутентификации в Node-RED

javascript
// settings.js - конфигурация безопасности
module.exports = {
    // ... другие настройки ...
    
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2b$08$hashed_password_here",
            permissions: "*"
        }]
    },
    
    // HTTPS для production
    https: {
        key: require("fs").readFileSync('/path/to/privkey.pem'),
        cert: require("fs").readFileSync('/path/to/cert.pem')
    },
    
    // CORS настройки
    httpNodeCors: {
        origin: "https://truenas.local",
        methods: "GET,PUT,POST,DELETE"
    }
};

Создание хешированного пароля

bash
# Генерация хеша пароля для settings.js
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" "YourSecurePassword"

# Или через Node-RED CLI:
npm install -g bcryptjs
node-red admin hash-pw

Рекомендуемая структура проектов

  • flows/ — основные потоки (разделяйте по функционалу)
  • lib/ — общие функции и модули
  • config/ — конфигурационные файлы
  • backups/ — автоматические бэкапы flows.json
  • Используйте git для контроля версий потоков

Оптимизация производительности

javascript
// settings.js - настройки производительности
module.exports = {
    // Лимит памяти для больших потоков
    flowFileReadCache: false,
    
    // Оптимизация для Raspberry Pi / слабого железа
    runtimeMaxHeapSize: 256, // MB
    runtimeMaxOldSpaceSize: 256, // MB
    
    // Отключение ненужных функций
    editorTheme: {
        projects: {
            enabled: false // если не используете projects
        }
    },
    
    // Логирование
    logging: {
        console: {
            level: "info",
            metrics: false,
            audit: false
        }
    }
};

Полезные ноды (пакеты) для TrueNAS

  • node-red-contrib-truenas-api — прямой доступ к API TrueNAS
  • node-red-contrib-influxdb — запись метрик в базу данных
  • node-red-contrib-telegrambot — уведомления в Telegram
  • node-red-contrib-home-assistant-websocket — интеграция с HA
  • node-red-dashboard — создание панелей мониторинга
  • node-red-contrib-cron-plus — расширенные возможности планирования
  • node-red-contrib-zfs — управление ZFS (экспериментально)

Часто задаваемые вопросы (FAQ)

Как сделать бэкап потоков Node-RED?

Потоки хранятся в файле flows.json в рабочей директории. Для автоматического бэкапа создайте поток, который копирует этот файл в защищенное место:

javascript
// Простой поток для бэкапа
const fs = require('fs');
const path = '/data/flows.json';
const backupPath = `/mnt/tank/backups/node-red/flows_${Date.now()}.json`;

fs.copyFileSync(path, backupPath);
// Удаляем старые бэкапы (старше 30 дней)
// ... дополнительный код очистки ...

Node-RED не запускается после обновления TrueNAS

Частая проблема — сброс прав доступа. Проверьте:

  1. Права на директорию с данными: chown -R 1000:1000 /mnt/tank/apps/node-red
  2. Состояние тома: zfs list и zfs mount
  3. Логи приложения: kubectl logs -n ix-node-red deployment/node-red
  4. Попробуйте переустановить приложение с сохранением данных

Как интегрировать Node-RED с существующими скриптами Shell?

Используйте ноду exec для запуска shell-скриптов:

javascript
// Пример запуска скрипта резервного копирования
msg.payload = {
    cwd: "/mnt/tank/scripts",
    cmd: "./backup.sh",
    args: ["--full", "--compress"]
};
return msg;

// Или используйте функцию с child_process
const { exec } = require('child_process');
exec('zfs list -t snapshot', (error, stdout, stderr) => {
    if (error) {
        node.error(error);
        return;
    }
    msg.payload = stdout;
    node.send(msg);
});

Можно ли использовать Node-RED для мониторинга нескольких серверов TrueNAS?

Да, Node-RED отлично подходит для централизованного мониторинга. Создайте отдельные конфигурации API для каждого сервера и объедините данные в единую панель Dashboard. Используйте ноду switch для маршрутизации запросов к разным серверам.

Заключение

Node-RED на TrueNAS — это не просто «еще одно приложение», а мощный инструмент, который превращает твой NAS в интеллектуальный центр автоматизации. От мониторинга состояния дисков до сложных сценариев взаимодействия с умным домом — возможности ограничены только твоей фантазией.

Начни с простых потоков: мониторинг температуры, уведомления о событиях, автоматические снапшоты. По мере освоения добавляй интеграции с другими системами, создавай панели мониторинга и оптимизируй рутинные задачи.

Совет от ментора: Не пытайся сразу создать идеальную систему. Начни с одного рабочего потока, протестируй его, убедись в стабильности, и только потом добавляй сложность. И всегда делай бэкапы flows.json перед крупными изменениями!

TrueNAS с Node-RED — это синергия надежного хранения данных и гибкой автоматизации. Установи, настрой, автоматизируй и наслаждайся умной инфраструктурой, которая работает на тебя, а не ты на неё.

Поделиться:
Сохранить гайд? В закладки браузера