Представь, что твой TrueNAS сервер — это не просто хранилище данных, а умный центр управления, который может сам следить за дисками, отправлять уведомления, управлять виртуальными машинами и даже взаимодействовать с умным домом. Всё это становится реальностью с Node-RED — визуальным инструментом для программирования, который идеально вписывается в экосистему TrueNAS. Давай разберем, как развернуть эту мощную связку и начать автоматизировать всё вокруг.
Что такое Node-RED и зачем он нужен на TrueNAS?
Node-RED — это flow-based programming tool, созданный IBM для визуального соединения устройств, API и онлайн-сервисов. На практике это означает, что ты можешь создавать сложные логические цепочки (потоки), перетаскивая ноды (блоки) и соединяя их между собой, почти не написав ни строчки кода.
• Централизованное управление автоматизацией всего 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:
# Подключаемся к 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
- Откройте веб-интерфейс TrueNAS Scale
- Перейдите в раздел Apps → Available Applications
- Найдите node-red в поиске или каталоге
- Нажмите Install и заполните конфигурацию:
# Пример конфигурации установки:
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) настройте обратный прокси:
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
# Создаем 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
# Обновляем репозитории
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
Настройка и запуск службы
# Создаем файл службы
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 при обнаружении проблем.
// Установите дополнительные ноды:
// 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'ов по расписанию и удалять старые.
// Поток для управления снапшотами:
// [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.
# Установите ноду: 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
// 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"
}
};
Создание хешированного пароля
# Генерация хеша пароля для 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 для контроля версий потоков
Оптимизация производительности
// 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 в рабочей директории. Для автоматического бэкапа создайте поток, который копирует этот файл в защищенное место:
// Простой поток для бэкапа
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
Частая проблема — сброс прав доступа. Проверьте:
- Права на директорию с данными:
chown -R 1000:1000 /mnt/tank/apps/node-red - Состояние тома:
zfs listиzfs mount - Логи приложения:
kubectl logs -n ix-node-red deployment/node-red - Попробуйте переустановить приложение с сохранением данных
Как интегрировать Node-RED с существующими скриптами Shell?
Используйте ноду exec для запуска shell-скриптов:
// Пример запуска скрипта резервного копирования
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 в интеллектуальный центр автоматизации. От мониторинга состояния дисков до сложных сценариев взаимодействия с умным домом — возможности ограничены только твоей фантазией.
Начни с простых потоков: мониторинг температуры, уведомления о событиях, автоматические снапшоты. По мере освоения добавляй интеграции с другими системами, создавай панели мониторинга и оптимизируй рутинные задачи.
TrueNAS с Node-RED — это синергия надежного хранения данных и гибкой автоматизации. Установи, настрой, автоматизируй и наслаждайся умной инфраструктурой, которая работает на тебя, а не ты на неё.