ติดตั้ง Node-RED บน DigitalOcean และตั้งค่าให้ล๊อกอินก่อนเข้าระบบ

ลงไม้ลงมือ : “ติดตั้ง Node-RED บน Digitalocean และตั้งค่าให้ล๊อกอินก่อนเข้าระบบ”
บทความ โดย… วิสิทธิ์ เวียงนาค

Node-RED เป็นสุดยอดเครื่องมือตัวหนึ่งที่ทำงานบน NodeJS นักพัฒนาโปรแกรมควรต้องมีติดตัวไว้ มันเป็นเครื่องมือเขียนโปรแกรมบนโปรแกรมอีกที และใช้เชื่อมต่ออุปกรณ์ฮาร์ดแวร์ API และบริการออนไลน์เข้าด้วยกัน ทำงานบนบนเบราว์เซอร์ใช้งานง่ายแบบลากแล้ววาง แต่มันทรงพลังทำงานได้อย่างเร็วรวดและสามารถนำไปใช้งานจริงได้ ถ้าสนใจรายละเอียดเพิ่มเติมเกี่ยวกับ Node-RED คลิ๊กดูได้ที่นี่

ถ้าท่านเป็นหนึ่งในนักพัฒนาโปรแกรมและอยากได้ Node-RED มาใช้งานเอง การติดตั้งไว้บน Cloud ที่ DigitalOcean ถือว่าเป็นทางเลือกหนึ่งที่น่าสนใจเพราะค่าใช้จ่ายต่อเดือนไม่แพง เริ่มที่ 5USD และได้รับ IP จริงมาใช้งานด้วย

บทความนี้จะแสดงวิธีการติดตั้ง Node-RED บนระบบปฏิบัติการ Ubuntu และการตั้งค่าให้ล๊อกอินก่อนเข้าใช้งานระบบ แต่ไม่ได้กล่าวถึงการติดตั้งระบบปฏิบัติการนะครับ

ขั้นตอนการเตียมความพร้อม

ระบบที่ใช้ทดสอบการติดตั้ง Node-RED มีดังต่อไปนี้

  1. Cloud Server ที่ DigitalOcean รายละเอียดคลิ๊กที่นี่
  2. ระบบปฏิบัติการ Ubuntu เวอร์ชัน 16.04 LTS (Linux 4.4.0–150-generic x64)
  3. NodeJs เวอร์ชัน v10.16.0
  4. NPM เวอร์ชัน 6.9.0
  5. Node-RED เวอร์ชัน v0.20.5
รูปแสดง hardware ที่ใช้ติดตั้ง Node-RED

ขั้นตอนที่ 1 — ติดตั้ง NodeJS

Ubuntu 16.04 เป็นเวอร์ชัน LTS “long-term support” หมายความว่ามันจะได้รับการสนับสนุนระยะยาวจาก Ubuntu เวอร์ชันนี้จะเน้นความเสถียรของระบบและมีการอัพเดทเรื่องความปลอดภัยยาวๆ กันเลย ถึงแม้ปัจจุบันจะมีเวอร์ชันใหม่ออกมาแล้วนั่นก็คือ Ubuntu 18.04.2 LTS และ Ubuntu 19.04 (อัพเดท 15-Jun-2019) แต่ด้วยความคุ้นเคยและความมั่นใจในการใช้งาน Ubuntu 16.04 LTS มาหลายปี ผู้เขียนจึงขอเลือกเวอร์ชันนี้มาใช้ทดสอบในครั้งนี้

เริ่มต้นด้วยการให้ผู้ดูแลระบบสร้าง user ใหม่ขึ้นมาก่อน ผู้เขียนสร้างยูสเซอร์ชื่อ rednode ขึ้นมาใหม่ โดยใช้แค่คำสั่งเดียวคือ adduser ระบบมันจะจัดการสร้าง group สร้าง home directory กำหนดรหัสผ่าน และรายละเอียดต่างๆ เกี่ยวกับยูสเซอร์ มาครบ สะดวกสบายกันเลยทีเดียว

root@NodeREDsrv:/# adduser rednode
Adding user `rednode' ...
Adding new group `rednode' (1000) ...
Adding new user `rednode' (1000) with group `rednode' ...
Creating home directory `/home/rednode' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for rednode
Enter the new value, or press ENTER for the default
Full Name []: Visit Wiangnak
Room Number []: R007
Work Phone []: 02-999-9999
Home Phone []: 02-555-5555
Other []: NodeRED server
Is the information correct? [Y/n] Y

ยูสเซอร์ใช้งานที่ได้สร้างขึ้นมาใหม่ ตอนนี้สามารถล๊อกอินเข้าระบบได้แล้ว แต่ไม่สามารถใช้คำสั่ง sudo เพื่อขอสิทธ์เป็นผู้ดูแลระบบเพื่อติดตั้งโปรแกรมต่างๆ ได้ ดังนั้นต้องให้สิทธิ์กับยูสเซอร์ rednode ก่อน ใช้คำสั่ง visudo เพื่อกำหนดสิทธิ์ให้ยูสเซอร์

root@NodeREDsrv:/# visudo

ใต้ User privilege specification ให้เพิ่มบรรทัดแล้วพิมพ์คำสั่งตามข้างล่าง

rednode ALL=(ALL:ALL) ALL
รุปแสดงหน้าคอนฟิกไฟล์ visudo

ให้บันทึกแล้วออกจากโปรแกรม โดยการกดปุ่ม Ctrl + X

รูปแสดงการยืนยันการทำงานของ nano text editor

แล้วกดปุ่ม Y เพื่อยืนยัน
จากนั้นใช้คำสั่ง sudo เพื่อล๊อกอินใช้ยูสเซอร์ rednode

su rednode

ถึงแม้ว่าการติดตั้ง NodeJS บน Linux Ubuntu เวอร์ชัน 16.04 จะเป็นเรื่องที่ง่ายมาก เพราะมันมี repository มาให้เลยเป็นค่าเริ่มต้น พูดง่ายๆ คือสามารถทำการติดตั้ง NodeJS ได้เลยไม่ต้องไปทำอะไรเพิ่มเติมให้วุ่นวาย แต่เวอร์ชันที่ได้คือ v4.2.6 ซึ่งเป็นเวอร์ชันเก่าและการสนับสนันช่วยเหลือหมดไปตั้งแต่เดือนเมษายน ปี 2018 แล้ว และที่สำคัญไม่สามารถใช้งานกับโปรแกรม Node-RED รุ่นใหม่ได้ เพราะมันต้องการ Node-JS เวอร์ชัน 8 ขึ้นไป

ทำไงดีงานเข้าแล้วสิ !

ทางเลือกที่ใช้คือติดตั้ง NodeJS ให้เป็นเวอร์ชันล่าสุดโดยใช้ PPA (personal package archive) ซึ่งสนับสนุนโดย NodeSource เวอร์ชันที่ได้จะใหม่และสดกว่าของ official Ubuntu repositories ซึ่งมีให้เลือกคือ v.8.x หรือ v.10.x ผู้เขียนขอเลือก v.10.x มาติดตั้งในครั้งนี้

ก่อนที่จะเพิ่ม PPA ให้กับ Ubutu ระบบของท่านต้องมีโปรแกรม curl ด้วย ถ้าใครยังไม่ได้ติดตั้งให้ใช้คำสั่งข้างล่างเพื่อติดตั้ง curl

rednode@NodeREDsrv:/$ sudo apt-get install curl

ทำการเพิ่ม PPA เวอร์ชัน v.10.x LTS ให้กับ Ubuntu

rednode@NodeREDsrv:/$ sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -

เร่ิมทำการติดตั้ง NodeJS และ NPM

rednode@NodeREDsrv:/$ sudo sudo apt-get install -y nodejs

ตอนนี้ท่านได้ติดตั้ง NodeJS และ NPM เสร็จเรียบร้อยแล้ว ท่านสามารถเช็คเวอร์ชันและตรวจสอบการติดตั้งได้ โดยใช้คำสั่ง node -v และ npm -v

rednode@NodeREDsrv:/$ node -v
v10.16.0
rednode@NodeREDsrv:/$ npm -v
6.9.0

ขั้นตอนที่ 2 — ติดตั้ง Node-RED

มาถึงตอนนี้ระบบของท่านก็พร้อมที่ติดตั้งโปรแกรม Node-RED แล้ว ผู้เขียนจะให้ npm มาเป็นผู้ช่วยในการติดตั้ง Node-RED และติดตั้งตัวช่วยจัดการ Node-RED Admin โดยใช้คำสั่งติดตั้งดังต่อไปนี้

rednode@NodeREDsrv:/$ sudo npm install -g --unsafe-perm node-red node-red-admin

โดยปกติแล้วการใช้ npm มาช่วยติดตั้งมันจะเก็บแพคเก็จต่างๆ ไว้ใน directory ปัจจุบัน ซึ่งอาจทำให้การเรียกใช้โปรแกรมผิดพลาดได้ ดังนั้นต้องใส่ -g เข้าไปเพื่อบอกกับทาง npm ว่าให้เก็บแพคเก็จต่างๆ ลงใน directory มาตรฐานที่สอดคล้องกับระบบปฏิบัติการ ในที่นี้มันจะเก็บแพคเก็จของ Node-RED ไว้ที่ /usr/local/bin

npm จะพยายาม compile module ซึ่งบางครั้งเป็นโมดูลที่ใช้ภาษา C or C++ JavaScrpt ซึ่งอาจเกิด pop pop ขึ้นมาได้ในระหว่างการ compile ทำให้เกิด error ดังนั้นต้องเพิ่ม — unsafe-perm เข้าไปช่วย เพื่อป้องกันปัญหาการ error ดังกล่าวขึ้น

โปรแกรม Node-RED จะใช้พอร์ต 1880 ซึ่งโดยปกติแล้ว Firewall จะไม่อนุญาติให้ใช้งาน ดังนั้นต้องตั้งค่า Firewall ให้มันปล่อยผ่านก่อน แต่ถ้าไม่ได้เปิดใช้งาน Firewall ก็สามารถข้ามขั้นตอนนี้ไปได้

rednode@NodeREDsrv:/$ sudo ufw allow 1880

ทดสอบการเปิดโปรแกรม Node-RED ให้เรียกใช้โปรแกรมโดยพิมพ์คำสั่ง node-red ไม่ต้องมี sudo นำหน้า ท่านจะพบว่า Node-RED แสดงผลการทำงานต่างๆ ที่หน้า console ออกมา และบรรทัดสุดท้ายจะบอกว่าให้ใช้ web browse เข้าถึงโปรแกรมด้วยพอร์ต 1880

รูปแสดงหน้า Console ของ Node-RED

ให้ท่านใช้ web browser เปิดลิงค์ด้วย IP ของ server ท่านแล้วใช้พอร์ต 1880 เชื่อมต่อ ก็จะพบหน้าจัดการ Node-RED ของ admin ตามรูปข้างล่าง

รูปแสดงหน้าจัดการ Node-RED ของ admin

ท่านสามารถปิดโปรแกรมได้โดยการกดปุ๋ม CTRL+C

มาถึงตอนนี้โปรแกรม Node-RED ได้ติดตั้งสมบูรณ์แล้ว ขั้นตอนต่อไปจะเป็นการตั้งค่าให้โปรแกรม Node-RED ทำงานทุกครั้งอัตโนมัติหลังจากการบูตของระบบทุกครั้ง

ขั้นตอนที่ 3 — ตั้งค่าให้ Node-RED ทำงานตอนบูต

ผู้เขียนจะสร้างไฟล์เปล่า ขึ้นมา 1 ไฟล์ โดยตั้งชื่อว่า node-red.service แล้วเพิ่ม script เรียกการบูตของ Node-RED ลงไป

rednode@NodeREDsrv:/$ sudo nano /etc/systemd/system/node-red.service

ระบบจะเปิด nano text editor ขึ้นมา ท่านจะพบกับหน้าเปล่าๆ จากนั้นให้ท่านคัดลอก script ข้างล่างไปใส่ใน nano text editor ให้แก้ไขยูสเซอร์ที่จะเป็นคนเรียกใช้งานให้ถูกต้อง ในที่นี้ผูเขียนแก้ไขเป็นยูสเซอร์เป็น rednode

[Unit]
Description=Node-RED by Visit W.
After=syslog.target network.target
[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT
SyslogIdentifier=node-red
StandardOutput=syslog
WorkingDirectory=/home/rednode/
User=rednode
Group=rednode
[Install]
WantedBy=multi-user.target
รูปแสดงคอนฟิกไฟล์ node-red.service

จากนั้นให้บันทึก script และออกจากโปรแกรม nano โดยการกดปุ่ม Ctrl+X

รูปแสดงการยืนยันการทำงานของ nano text editor

กดปุ่ม Y เพื่อยืนบันการบันทึกข้อมูลและออกจากโปรแกรม nano text editor

จากนั้นสั่งให้ระบบเปิดใช้ service node-red

rednode@NodeREDsrv:/$ sudo systemctl enable node-red
[sudo] password for rednode:
Created symlink from /etc/systemd/system/multi-user.target.wants/node-red.service to /etc/systemd/system/node-red.service.

ลองสั่งให้ node-red ทำงานว่าสามารถทำงานได้หรือไม่

rednode@NodeREDsrv:/$ sudo systemctl start node-red

ตรวจสอบว่า Node-RED ทำงานหรือไม่โดยใช้คำสั่ง systemctl status node-red ก็จะแสดงรายละเอียดการทำงานของ Node-RED ออกมา กดปุ่ม Crtl+C เพื่อออกจากโหมดแสดงสถานะ

rednode@NodeREDsrv:/$ systemctl status node-red
● node-red.service - Node-RED by Visit W.
Loaded: loaded (/etc/systemd/system/node-red.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-06-15 15:37:13 +07; 725ms ago
Main PID: 8900 (node)
Tasks: 18
Memory: 33.5M
CPU: 703ms
CGroup: /system.slice/node-red.service
├─8900 node --max-old-space-size=128 /usr/local/lib/node_modules/node-red/bin/.
└─8921 npm

ขั้นตอนที่ 4 — ตั้งค่าให้ล๊อกอินก่อนเข้าใช้งาน

เรื่องนี้เป็นสิ่งที่สำคัญ เป็นเรื่องของความปลอดภัยของระบบ เพราะว่า Node-RED ของท่านในตอนนี้ใครก็สามารถเข้าไปใช้งานได้ ไม่มีการล๊อกอินก่อนเข้าใช้งาน ในขั้นตอนนี้จะเป็นการตั้งค่าความปลอดภัย เริ่มจากการใช้ node-red-admin สร้างรหัส hash ขึ้นมา

“รหัสผ่านที่พิมพ์ไปให้จำไว้ดีๆ นะครับ มันคือรหัสผ่านสำหรับ admin เข้าสู่ระบบ Node-RED นะครับ”

rednode@NodeREDsrv:/$ node-red-admin hash-pw
Password:
$2a$08$7U3KD3/s0Il6CMlx2nDDGuDiJW1cVk9JJSiWSCLJLzBRWgYyNMtpG

ให้คัดลอกรหัสที่แสดงบนหน้าจอ แล้วแก้ไขไฟล์ชื่อ settings.js

rednode@NodeREDsrv:/$ nano ~/.node-red/settings.js

ให้ค้นหาคำว่า adminAuth แล้ว un-comment ออกตามรูปข้างล่าง จากนั้นให้เปลี่ยน password ใหม่ โดยเอารหัส hash ที่ได้สร้างมาจากข้างบนไปใส่แทน

adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$7U3KD3/s0Il6CMlx2nDDGuDiJW1cVk9JJSiWSCLJLzBRWgYyNMtpG",
permissions: "*"
}]
},
รูปแสดงหน้าคอนฟิกไฟล์ settings.js

จากนั้นให้บันทึกคอนฟิกและออกจากโปรแกรม nano โดยการกดปุ่ม Ctrl+X

รูปแสดงการยืนยันการทำงานของ nano text editor

กดปุ่ม Y เพื่อยืนบันการบันทึกข้อมูลและออกจากโปรแกรม nano text editor

ทำการ re-start Node-RED ใหม่ หรือ ถ้าใครต้องการทดสอบแบบเต็มรูปแบบก็ให้ restart server สักรอบก็ได้ จะได้ทดสอบการเรียกใช้ service Node-RED ตอนบูตด้วย

rednode@NodeREDsrv:/$ sudo systemctl restart node-red

ให้ท่านใช้ web browser เปิดลิงค์ด้วย IP ลองท่านและพอร์ต 1880 ก็จะพบหน้าล๊อกอินก่อนเข้าใช้งาน Node-RED แล้ว

แสดงหน้าล๊อกอินเข้าระบบ Node-RED

ตอนนี้ Node-RED ของท่านมีความปลอดภัยมากขึ้นแล้ว การเข้าใช้งานระบบต้องทำการล๊อกอินก่อน อย่างไรก็ตามการนำ Node-RED ไปใช้งานจริงควรตั้งค่าให้ทำงานบน SSL หรือ Secure Sockets Layer ซึ่งเป็นมาตรฐานการรักษาความปลอดภัยบนเว็ปไซค์สำหรับการรับส่งข้อมูลผ่านอินเตอร์เน็ตด้วย https เพื่อป้องกันคนแอบมาส่องรหัสผ่านของท่านหรือดักรอเอาข้อมูลระหว่างทาง

บทความหน้าผู้เขียนจะแสดงการตั้งค่าเรียกใช้ Node-RED บน SSL โดยการขอ Certificate ฟรีจาก Let’s Encrypt แล้วกำหนดให้ Nginx เป็น proxy สำหรับ Node-RED เชื่อมต่อแบบปลอดภัยบนพอร์ต 443 คอยติดตามกันนะครับ

รูปแสดงหน้าจัดการ Node-RED admin เรียกใช้งานบน https

ผู้เขียนมีความตั้งใจที่จะนำเสนอการใช้ IoT-LoRaWAN-NBIOT สำหรับพัฒนา SMART CITY เพื่อให้ผู้ที่สนใจนำไปพัฒนาต่อยอดสร้างนวกรรมใหม่ๆ ขอเป็นส่วนหนึ่งเล็กๆ น้อยๆ ช่วยผลักดันประเทศของเราให้เข้าสู่ยุคดิจิตอล Thailand 4.0 อย่างแท้จริง

ติดตามข่าวสารทาง facebook ได้ที่ลิงค์นี้

--

--