Node-RED, IBM'in Emerging Technology ekibi tarafından geliştirilmiş, bugün OpenJS Foundation çatısı altında yürütülen açık kaynak bir görsel programlama aracıdır. Temel fikri son derece basittir: tarayıcı üzerinden açtığınız bir editörde kutuları (düğüm/node) sürükleyip birbirine tellerle bağlar, bu tellerin arasından akan mesajlarla bir otomasyon mantığı kurarsınız. Bir sensörden gelen sıcaklık değerini okuyup belli bir eşiği aşınca size bildirim göndermek, gelen bir webhook isteğini işleyip veritabanına yazmak ya da her sabah bir API'den veri çekip rapor üretmek gibi işlerin hepsi, tek satır kod yazmadan veya çok az kodla kurulabilir.
Bu yazıda Node-RED'in düğüm ve akış tabanlı çalışma mantığını, npm ve Docker ile kurulumunu, ek düğümlerin nasıl yönetildiğini (palet yönetimi), özellikle IoT ve Home Assistant senaryolarında nasıl kullanıldığını ve n8n gibi alternatiflerle nerede ayrıştığını kıdemli bir sistem yöneticisi gözünden anlatacağız. Amacımız Node-RED'i sadece "denedim, çalıştı" seviyesinde değil, kendi sunucunuzda üretim ortamına alacak kadar sağlam kuracak bilgiyle donatmak.
Node-RED Nedir ve Nasıl Çalışır#
Node-RED, Node.js üzerinde çalışan bir "flow tabanlı programlama" (flow-based programming) motorudur. Bu paradigmada program, veriyi işleyen bağımsız bileşenlerin bir ağ oluşturacak şekilde birbirine bağlanmasından ibarettir. Her bileşen kendi başına küçük bir iş yapar; veri, bileşenler arasında mesaj (message) nesneleri hâlinde akar. Node-RED'de bu mesaj nesnesine genelde msg denir ve içindeki en önemli alan msg.payload, yani taşınan asıl veridir.
Node-RED çalıştığında iki ana parça devreye girer. Birincisi tarayıcıda açtığınız görsel editördür; genellikle http://sunucu-ip:1880 adresinden erişilir. İkincisi ise akışlarınızı arka planda 7/24 çalıştıran çalışma zamanıdır (runtime). Editörde tasarımınızı yapıp "Deploy" düğmesine bastığınızda, akış JSON olarak diske yazılır ve runtime bunu anında canlıya alır. Yani editörü kapatsanız bile akışlarınız sunucuda çalışmaya devam eder. Bu ayrım önemlidir: Node-RED bir "sürekli çalışan servis"tir, tek seferlik bir betik değildir.
Node.js'in olay tabanlı (event-driven) doğası Node-RED'i özellikle çok sayıda küçük, asenkron olayın olduğu senaryolarda verimli kılar. Yüzlerce cihazdan saniyede gelen MQTT mesajlarını, tek bir process içinde bloklamadan işleyebilir. Bu da onu IoT dünyasının fiilî standart otomasyon aracı hâline getirmiştir.
Düğüm ve Akış Tabanlı Programlama Mantığı#
Node-RED'i anlamanın anahtarı üç kavramı iyi kavramaktır: düğüm (node), tel (wire) ve akış (flow). Düğümler soldan giriş, sağdan çıkış portları olan işlevsel kutulardır. Örneğin bir inject düğümü akışı manuel veya zamanlanmış olarak tetikler, bir function düğümü içine yazdığınız JavaScript ile mesajı dönüştürür, bir debug düğümü ise mesajı yan paneldeki konsola basar. Düğümleri birbirine bağlayan tellerin üzerinden msg nesnesi akar; her düğüm gelen msg'yi alır, üzerinde çalışır ve sonucu bir sonrakine iletir.
Bir akış (flow), bu düğüm ve tellerin oluşturduğu mantıksal bütündür ve editörde bir sekmeye karşılık gelir. İşleri konularına göre farklı sekmelere bölerek düzenli tutabilirsiniz. Düğümler arasında veri taşımanın en yaygın yolu msg.payload olsa da, mesaja istediğiniz kadar özel alan ekleyebilirsiniz; örneğin msg.topic ile mesajın konusunu, msg.deviceId ile hangi cihazdan geldiğini taşıyabilirsiniz.
Aşağıdaki küçük function düğümü örneği, gelen bir sıcaklık değerine göre mesajı işaretleyip zenginleştirir:
// msg.payload içinde ham sıcaklık değeri geldiğini varsayıyoruz
const sicaklik = Number(msg.payload);
if (sicaklik > 30) {
msg.durum = "kritik";
msg.renk = "kirmizi";
} else if (sicaklik > 24) {
msg.durum = "uyari";
msg.renk = "sari";
} else {
msg.durum = "normal";
msg.renk = "yesil";
}
msg.payload = `Sıcaklık ${sicaklik}°C - Durum: ${msg.durum}`;
return msg;
Bu yaklaşımın en güçlü yanı, tüm mantığın görsel olarak izlenebilir olmasıdır. Bir akışta verinin nereden girip nereye gittiğini kutulara bakarak takip edebilir, debug düğümleriyle her adımdaki msg içeriğini gözlemleyebilirsiniz. Klasik kodda ancak log satırları ekleyerek yapabileceğiniz bu izlenebilirlik, Node-RED'de doğuştan gelir.
Node-RED Kurulumu (npm ve Docker)#
Node-RED'i kendi sunucunuza kurmanın iki yaygın yolu vardır: doğrudan npm ile veya Docker ile. Kararlı, öngörülebilir bir üretim ortamı istiyorsanız Docker'ı öneririm; ancak Raspberry Pi gibi cihazlarda ya da hızlı bir denemede npm kurulumu da gayet iş görür. Node-RED'in kaynakları çok ağır olmadığından, bir VDS ya da düşük profilli bir sanal sunucu bile onu rahatça taşır. Kendi kaynaklarını izole edip yönetmek isteyenler için VDS sunucu ideal bir zemindir.
npm ile kurulum için önce Node.js LTS sürümünün yüklü olduğundan emin olun (Node-RED en az Node.js 18 ister):
# Node.js sürümünü kontrol edin
node --version
# Node-RED'i global olarak kurun
sudo npm install -g --unsafe-perm node-red
# Başlatın
node-red
Bu komut Node-RED'i başlatır ve akışlarınızı ~/.node-red klasöründe saklar. Ancak node-red komutunu terminalden çalıştırmak üretim için uygun değildir; oturumu kapatınca servis durur. Bunun yerine systemd ile bir servis tanımlamalısınız:
# /etc/systemd/system/nodered.service
[Unit]
Description=Node-RED
After=network.target
[Service]
Type=simple
User=nodered
WorkingDirectory=/home/nodered
ExecStart=/usr/bin/node-red --max-old-space-size=256
Restart=on-failure
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
Ardından servisi etkinleştirin:
sudo systemctl daemon-reload
sudo systemctl enable --now nodered
sudo systemctl status nodered
Docker ile kurulum çoğu senaryoda daha temizdir çünkü bağımlılıkları kapsül içinde tutar ve güncellemeyi kolaylaştırır. Kalıcı veri için bir volume bağlamayı unutmayın, aksi halde kapsül silindiğinde tüm akışlarınız kaybolur:
# docker-compose.yml
services:
node-red:
image: nodered/node-red:latest
container_name: node-red
restart: unless-stopped
ports:
- "1880:1880"
volumes:
- ./data:/data
environment:
- TZ=Europe/Istanbul
Çalıştırmak için:
docker compose up -d
docker compose logs -f node-red
Bu kadar el emeğiyle uğraşmak istemeyenler için Clou.TR App Center üzerinden Node-RED gibi self-hosted uygulamaları hazır şablonlarla dağıtabilir, kurulum ve güncelleme yükünü büyük ölçüde azaltabilirsiniz.
Palet Yönetimi ve Ek Düğüm Kurulumu#
Node-RED'in çekirdeği temel düğümlerle gelir, ama asıl gücü palet adı verilen genişleme sistemindedir. Toplulukça geliştirilmiş binlerce ek düğüm paketi vardır; MQTT için özel düğümler, Telegram/Discord bildirimleri, veritabanı bağlayıcıları, Modbus, Zigbee, Home Assistant entegrasyonu ve daha nicesi. Bunları editörün sağ üst köşesindeki menüden "Manage palette" bölümüne girip arayarak tek tıkla kurabilirsiniz.
Palet yöneticisi arka planda npm'i kullanır, dolayısıyla düğümleri komut satırından da yükleyebilirsiniz. Docker kullanıyorsanız, düğümleri kapsül içindeki /data klasöründe (volume'de) kurmak önemlidir; aksi halde güncellemede kaybolurlar:
# npm kurulumunda kullanıcı dizininde
cd ~/.node-red
npm install node-red-contrib-home-assistant-websocket
npm install node-red-node-telegrambot
# Docker kurulumunda volume içinde
docker exec -it node-red npm install node-red-dashboard
# Değişikliklerin yüklenmesi için Node-RED'i yeniden başlatın
sudo systemctl restart nodered # veya: docker restart node-red
Sık kullanılan bazı popüler paketler şöyledir:
| Paket | İşlevi |
|---|---|
node-red-dashboard | Web tabanlı gösterge panelleri, grafikler, butonlar |
node-red-contrib-home-assistant-websocket | Home Assistant ile çift yönlü entegrasyon |
node-red-node-telegrambot | Telegram bot üzerinden bildirim ve komut alma |
node-red-contrib-modbus | Endüstriyel Modbus cihazlarıyla haberleşme |
node-red-contrib-influxdb | Zaman serisi verilerini InfluxDB'ye yazma |
Palet yönetiminde dikkat edilmesi gereken bir nokta, kurduğunuz her paketin bir bağımlılık ve güvenlik yüzeyi eklediğidir. Yalnızca ihtiyacınız olan, aktif bakımı yapılan paketleri kurun; terk edilmiş bir paket ilerideki Node.js sürümlerinde sorun çıkarabilir. Kritik ortamlarda paket sürümlerini package.json ile sabitleyip yedeğe almanızı öneririm. Sunucu tarafındaki bu tür güncelleme ve bakım işlerini kendiniz yürütmek istemiyorsanız sunucu yönetimi hizmeti bu yükü devralır.
IoT ve Home Assistant Senaryoları#
Node-RED'in en parladığı alan IoT ve akıllı ev otomasyonudur. Nedeni açık: cihazların çoğu MQTT protokolüyle konuşur ve Node-RED, MQTT mesajlarını dinleyip işlemek için doğduğundan beri idealdir. Tipik bir kurulumda evinizdeki bir Mosquitto MQTT broker'ı çalışır, sensörler oraya veri basar, Node-RED de bu konuları (topic) dinleyip mantığı işler.
Klasik bir örnek: bir kapı sensörü açıldığında telefonunuza bildirim göndermek. Akış şöyle olur — bir mqtt in düğümü ev/kapi/durum konusunu dinler, bir switch düğümü değeri "açık" ise akışı yönlendirir, bir function düğümü mesajı hazırlar ve bir telegram sender düğümü bildirimi gönderir. Aynı mantığı sıcaklık, nem, hareket sensörü, enerji tüketimi gibi onlarca senaryoya uygulayabilirsiniz.
Node-RED, Home Assistant ekosisteminde çok özel bir yere sahiptir. node-red-contrib-home-assistant-websocket paketiyle Home Assistant'ın tüm varlıklarına (entity) erişebilir, durum değişikliklerini dinleyip cihazlara komut gönderebilirsiniz. Home Assistant'ın kendi otomasyon dili YAML tabanlıyken, karmaşık koşullu mantıklar Node-RED'in görsel akışlarında çok daha okunabilir hâle gelir. Birçok kullanıcı basit otomasyonları Home Assistant'ta, çok adımlı karmaşık senaryoları ise Node-RED'de tutar.
Aşağıda MQTT dinleyen bir akışın basitleştirilmiş JSON gösterimi yer alıyor; bunu editöre "Import" ile aktarabilirsiniz:
[
{
"id": "mqtt_in_1",
"type": "mqtt in",
"topic": "ev/salon/sicaklik",
"qos": "1",
"broker": "mosquitto_broker",
"wires": [["fn_esik_1"]]
},
{
"id": "fn_esik_1",
"type": "function",
"name": "Eşik kontrolü",
"func": "if (Number(msg.payload) > 28) { return msg; } return null;",
"wires": [["telegram_1"]]
}
]
Bu senaryolarda Node-RED'in 7/24 ayakta kalması kritiktir; ev otomasyonunuz uykuya dalan bir sunucuda güvenilmez olur. Bu yüzden IoT projelerini kararlı bir sanal sunucu veya adanmış bir cihaz üzerinde çalıştırmanızı, otomasyon verinizi düzenli olarak yedekleme hizmetiyle güvenceye almanızı öneririm.
Node-RED ve n8n Karşılaştırması#
Node-RED ve n8n yüzeyde birbirine çok benzer: ikisi de düğümleri tuvale sürükleyip bağladığınız görsel otomasyon araçlarıdır. Ancak felsefeleri ve hedef kitleleri farklıdır. Node-RED, teknik ve IoT odaklıdır; JavaScript'e yakındır, düşük seviye protokollerle (MQTT, Modbus, seri port) mükemmel çalışır ve donanım/gömülü sistem dünyasında evindedir. n8n ise iş otomasyonuna (business automation) odaklanır; yüzlerce SaaS uygulamasına (Slack, Google Sheets, Notion, CRM'ler) hazır bağlayıcı sunar ve API entegrasyonlarını birbirine bağlamayı önceliklendirir.
Somut farkları şu tabloda toparlayabiliriz:
| Kriter | Node-RED | n8n |
|---|---|---|
| Ana kullanım | IoT, donanım, teknik akışlar | SaaS/API iş otomasyonu |
| Programlama | JavaScript (function düğümü) | JavaScript ve Python ifadeleri |
| Hazır entegrasyon | Topluluk düğümleri (MQTT, Modbus vb.) | 400+ hazır uygulama bağlayıcısı |
| Veri modeli | Tekil msg nesnesi akışı | Öğe (item) dizileri üzerinde çalışma |
| Öğrenme eğrisi | Teknik kullanıcıya kolay | İş kullanıcısına daha erişilebilir |
| Lisans | Apache 2.0 (tam açık kaynak) | Fair-code (sustainable use) |
Pratik tavsiye: eğer işiniz sensörler, akıllı ev, endüstriyel cihazlar ve gerçek zamanlı sinyallerse Node-RED daha doğru araçtır. Eğer amacınız uygulamalar arası veri taşımak, formları CRM'e bağlamak, e-posta ve tablo otomasyonları kurmaksa n8n daha az uğraşla sonuç verir. Yapay zekâ tabanlı akışlar ilginizi çekiyorsa, LLM ajanları kurmaya odaklanan Flowise da değerlendirmeye değer. Birçok ekip bu araçları rakip değil tamamlayıcı olarak kullanır; hepsini aynı sunucuda barındırmak mümkündür.
Güvenlik, Ters Proxy ve Üretim İpuçları#
Node-RED varsayılan kurulumda editörü kimlik doğrulaması olmadan açar. Bu, editörü herkesin erişebileceği ve akışlarınızı değiştirebileceği anlamına gelir — üretimde kesinlikle kapatılması gereken bir açıktır. İlk yapılacak iş settings.js dosyasında editör için parola tanımlamaktır. Parolayı node-red admin hash-pw komutuyla bcrypt olarak üretebilirsiniz:
// settings.js içinde adminAuth bölümü
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2b$08$...bcrypt-hash...",
permissions: "*"
}]
}
İkinci adım, Node-RED'in önüne bir ters proxy (Nginx) koyup HTTPS ile yayınlamaktır. Node-RED WebSocket kullandığı için proxy yapılandırmasında upgrade başlıklarını iletmek şarttır; bunu atlarsanız editör bağlantısı kopar:
server {
listen 443 ssl http2;
server_name nodered.ornek.com;
ssl_certificate /etc/letsencrypt/live/nodered.ornek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodered.ornek.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:1880;
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;
}
}
Bu kurulumu tamamlamak için geçerli bir alan adına ve SSL sertifikasına ihtiyacınız olacak; bir alan adı alıp Node-RED örneğinizi nodered.alanadi.com gibi bir alt alan adında yayınlayabilirsiniz. Ek bir güvenlik katmanı olarak, editör paneline erişimi belirli IP'lerle sınırlamak veya bir WAF arkasına almak da iyi bir uygulamadır.
Üretim için birkaç ek not: --max-old-space-size ile Node.js bellek sınırını cihazınıza göre ayarlayın; akışlarınızı Git ile sürüm kontrolüne alın (Node-RED'in "Projects" özelliği bunu destekler); ve debug düğümlerini canlıda kapatın, çünkü yoğun log üretimi hem performansı hem disk kullanımını olumsuz etkiler. Kritik akışlar için "catch" düğümüyle hataları yakalayıp bir kanala bildirmek, sessiz arızaların önüne geçer.
Sıkça Sorulan Sorular#
Node-RED ücretsiz mi ve hangi lisansla dağıtılıyor?#
Node-RED tamamen ücretsiz ve açık kaynaktır; Apache 2.0 lisansı altında dağıtılır. Bu lisans hem kişisel hem ticari kullanıma izin verir, kaynağı değiştirmenize ve kendi ürününüzde barındırmanıza olanak tanır. Herhangi bir kullanıcı başına ücret, akış limiti ya da premium sürüm zorunluluğu yoktur; tüm özellikler herkese açıktır.
Node-RED çalıştırmak için ne kadar sistem kaynağı gerekir?#
Node-RED oldukça hafiftir ve 512 MB RAM'e sahip bir Raspberry Pi'de bile rahatça çalışır. Küçük ve orta ölçekli otomasyonlar için 1 GB RAM ve tek çekirdekli bir işlemci fazlasıyla yeterlidir. Yüzlerce cihaz, yoğun MQTT trafiği veya ağır function düğümleri kullanıyorsanız 2 GB RAM'e ve daha güçlü bir işlemciye çıkmanız mantıklı olur. Genel kural, kurduğunuz palet paketleri arttıkça bellek ihtiyacının da artmasıdır.
Node-RED ile Home Assistant arasındaki fark nedir?#
Home Assistant bir akıllı ev platformudur; cihazları keşfeder, durumlarını tutar ve bir arayüz sunar. Node-RED ise genel amaçlı bir otomasyon motorudur ve tek başına cihaz yönetmez. İkisi rakip değil, tamamlayıcıdır. Home Assistant'ı merkezî cihaz beyni olarak kullanıp, karmaşık ve çok adımlı otomasyon mantığını Node-RED'de kurmak yaygın ve güçlü bir yaklaşımdır. Bağlantıyı node-red-contrib-home-assistant-websocket paketi sağlar.
Akışlarımı nasıl yedekler ve başka sunucuya taşırım?#
Node-RED tüm akışlarınızı flows.json dosyasında, kullanıcı dizininde (~/.node-red ya da Docker'da /data) saklar. Bu dosyayı ve settings.js ile kurduğunuz paketlerin listesini yedeklemeniz yeterlidir. Editör içinden "Export" seçeneğiyle akışları JSON olarak dışa aktarıp başka bir örneğe "Import" ile aktarabilirsiniz. Kurumsal kullanımda tüm dizini düzenli yedekleme planına dahil etmek ya da Git tabanlı "Projects" özelliğini kullanmak en güvenli yoldur.
Node-RED üretim ortamı için yeterince güvenilir mi?#
Evet, ancak birkaç temel önlemle. Editöre parola koymak, HTTPS ile yayınlamak, gereksiz palet paketlerinden kaçınmak ve catch düğümüyle hataları yakalamak üretim güvenilirliğinin temelidir. Node-RED'i systemd veya Docker'ın restart politikasıyla otomatik yeniden başlatacak şekilde yapılandırın ki bir çökme durumunda servis kendini toparlasın. Bu önlemler alındığında Node-RED yıllardır sanayiden akıllı ev projelerine kadar birçok kritik ortamda güvenle çalışan olgun bir araçtır.
Node-RED'i bulut sunucuda mı yoksa yerel cihazda mı çalıştırmalıyım?#
Bu, senaryonuza bağlıdır. Cihazlarınız yalnızca yerel ağınızda erişilebilir sensörlerse ve internet bağımsız çalışması gerekiyorsa, yerel bir cihaz (Raspberry Pi gibi) mantıklıdır. Uzaktan erişim, yüksek çalışma süresi, düzenli yedek ve kararlı ağ istiyorsanız bir bulut sunucu daha iyidir. Birçok kişi ikisini birleştirir: yerel cihazda kritik otomasyonu, bulutta ise merkezî toplama ve bildirim akışlarını çalıştırır.
Kapanış#
Node-RED, otomasyon fikrinizle sonucu arasındaki mesafeyi büyük ölçüde kısaltan, öğrenmesi kolay ama tavanı yüksek bir araçtır. Düğümleri sürükleyip bağlayarak dakikalar içinde çalışan bir akış kurabilir, ihtiyacınız büyüdükçe MQTT, Home Assistant, veritabanları ve yapay zekâ servisleriyle onu istediğiniz kadar derinleştirebilirsiniz. Anahtar nokta, onu güvenli ve kararlı bir zeminde, 7/24 ayakta kalacak şekilde barındırmaktır — çünkü bir otomasyon ancak çalıştığı sürece değerlidir.
Node-RED örneğinizi güvenle barındırmak için Clou.TR'nin kaynaklarını izole eden VDS sunucu ve sanal sunucu çözümlerine, kurulumu hızlandıran App Center şablonlarına ve sunucunuzu sizin yerinize yöneten sunucu yönetimi hizmetine göz atabilirsiniz. Doğru altyapıyı seçtiğinizde, geriye sadece akıllarınızdaki akışları kurmak kalır.