Si ta lidhni Internetin tuaj të Gjërave me Node-RED në Ubuntu 16.04


Prezantimi

IFTTT ose Yahoo Pipes i vonë, Node-RED ka një ndërfaqe shumë më të fuqishme dhe fleksibël dhe një komunitet të madh me burim të hapur që krijon nyje për të bashkëvepruar me një shumëllojshmëri të gjerë aplikacionesh dhe shërbimesh.

Në këtë tutorial, ne do të instalojmë Node.js dhe Node-RED, do të marrim një certifikatë SSL nga Let's Encrypt dhe do të përdorim Nginx për të trajtuar lidhje të sigurta për Node-RED.

Parakushtet

Për të ndjekur këtë tutorial, do t'ju duhet:

  • Një server Ubuntu 16.04 me një përdorues sudo jo-root dhe mur bazë të zjarrit të konfiguruar duke ndjekur këtë tutorial të konfigurimit të serverit Ubuntu 16.04. Për këtë tutorial, ne do të përdorim një përdorues të quajtur sammy, por sigurisht që ju mund të zgjidhni çfarë të doni dhe ta zëvendësoni sipas nevojës.
  • Serveri i uebit Nginx i instaluar, me murin e zjarrit të përditësuar për të lejuar trafikun në portet 80 dhe 443 (Nginx Full), siç shpjegohet në Si të Instaloni Nginx në Ubuntu 16.04
  • Një emër domaini i drejtuar në serverin tuaj, siç përshkruhet në Si të vendosni një emër hosti me DigitalOcean. Ky udhëzues do të përdorë node-red.example.com kudo.
  • Le të Enkriptojmë të instaluar dhe të gjenerojmë një certifikatë për domenin që konfigurove më sipër. Si të siguroni Nginx me Let's Encrypt në Ubuntu 16.04 do t'ju udhëzojë nëpër hapat e nevojshëm. Ju mund të injoroni hapat në lidhje me konfigurimin e Nginx (hapat 3–5), pasi ne do ta mbulojmë atë këtu. Vetëm sigurohuni që të merrni një certifikatë të lëshuar me sukses dhe konfiguroni punën cron për të trajtuar rinovimet automatike.

Hapi 1 - Instalimi i Node.js dhe npm

Ubuntu 16.04 e bën të lehtë instalimin e versionit më të fundit të mbështetjes afatgjatë (LTS) të Node.js sepse është përfshirë në depon e paracaktuar.

  1. sudo apt-get install nodejs-legacy

Komanda instalon Node.js v4.2.x LTS (mbështetje afatgjatë), që do të thotë se Fondacioni Node.js do të vazhdojë të mbështesë këtë version për 30 muaj nga data e lëshimit, 12 tetor 2015.

Shënim: Është e rëndësishme të instaloni versionin -legacy të paketës sepse skriptet fillestare të Node-RED presin që binarja juaj Node.js të quhet node , por paketa standarde përdor në vend të saj nodejs. Kjo është për shkak të një konflikti emërtimi me një paketë paraekzistuese.

Verifikoni që instalimi ishte i suksesshëm duke kontrolluar versionin.

  1. node -v

Do të shihni Node.js që nxjerr numrin e versionit të tij:

Output
v4.2.6

Node Package Manager (npm) ju ndihmon të instaloni dhe menaxhoni paketat e softuerit Node.js dhe ne do ta përdorim atë për të instaluar Node-RED. Instaloni npm duke përdorur apt-get.

  1. sudo apt-get install npm

Për të verifikuar që instalimi ishte i suksesshëm, kërkoni nga npm të printojë informacionin e versionit të tij:

  1. npm -v
Output
3.5.2

Nëse printon një numër versioni pa gabim, ne mund të vazhdojmë në hapin tonë të ardhshëm, ku do të përdorim npm për të instaluar vetë Node-RED.

Hapi 2 - Instalimi i Node-RED

Përdorni npm për të instaluar node-red dhe një mjet ndihmës të quajtur node-red-admin.

  1. sudo npm install -g --unsafe-perm node-red node-red-admin

npm normalisht instalon paketat e saj në direktorinë tuaj aktuale. Këtu, ne përdorim flamurin -g për të instaluar paketat 'globalisht' në mënyrë që ato të vendosen në vendndodhje standarde të sistemit si /usr/local/bin. Flamuri --unsafe-perm na ndihmon të shmangim disa gabime që mund të shfaqen kur npm përpiqet të përpilojë module amtare (module të shkruara në një gjuhë të përpiluar si C ose C++ vs JavaScript).

Pas pak shkarkimi dhe përzierjeje të skedarëve, do të ktheheni në linjën normale të komandës. Le të testojmë instalimin tonë.

Së pari, do të na duhet të hapim një port në murin tonë të zjarrit. Node-RED paracakton përdorimin e portës 1880, kështu që le ta lejojmë këtë.

  1. sudo ufw allow 1880

Dhe tani lësho vetë Node-RED. Asnjë sudo nuk është i nevojshëm, pasi porti 1880 është mjaft i lartë për të mos kërkuar privilegje rrënjësore.

  1. node-red

Disa mesazhe \Mirë se erdhe në Node-RED do të printohen në terminal. Në kompjuterin tuaj, drejto një shfletues uebi për të portuar 1880 të serverit. Në shembullin tonë, kjo është http:// node-red.example.com:1880. Ndërfaqja kryesore e administratorit të Node-RED do të ngarkohet.

Nëse funksionoi, mund të shkruani CTRL+C në terminalin tuaj për të mbyllur Node-RED dhe për t'u kthyer në vijën e komandës. Ne e kemi instaluar Node-RED me sukses dhe e kemi testuar atë, kështu që më pas, do ta konfigurojmë që të nisë gjatë nisjes së sistemit.

Hapi 3 - Nisja e Node-RED në fillim

Për të nisur automatikisht Node-RED në nisje, do të na duhet të instalojmë një skedar node-red.service në vend të skriptit fillestar më tradicional. Kjo për shkak se Ubuntu 16.04 është lëshimi i parë LTS që përdor systemd për sistemin e tij init. Ju mund të gjeni një përmbledhje të këtij dhe ndryshimeve të tjera të Ubuntu 16.04 në Çfarë ka të re në Ubuntu 16.04.

Hapni një skedar shërbimi bosh të quajtur node-red.service.

  1. sudo nano /etc/systemd/system/node-red.service

Kopjoni dhe ngjisni në vijim, më pas ruajeni dhe mbyllni skedarin.

[Unit]
Description=Node-RED
After=syslog.target network.target

[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog

# non-root user to run as
WorkingDirectory=/home/sammy/
User=sammy
Group=sammy

[Install]
WantedBy=multi-user.target

Një shpjegim i plotë i skedarëve të shërbimit systemd është përtej këtij udhëzuesi, por mund të mësoni më shumë duke lexuar Systemd Essentials: Puna me Shërbimet, Njësitë dhe Ditarin.

Thënë kështu, le të zbërthejmë disa nga seksionet në skedarin tonë të shërbimit:

[Unit]
Description=Node-RED
After=syslog.target network.target

Kjo përshkruan shërbimin tonë dhe tregon se ai duhet të fillojë pasi rrjeti dhe syslog janë duke funksionuar.

[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

ExecStart është komanda e nevojshme për të nisur shërbimin tonë. Ne e quajmë node-red-pi në vend të node-red të thjeshtë në mënyrë që të mund t'i kalojmë disa opsione të kursimit të kujtesës tek Node.js. Kjo duhet ta lejojë atë të funksionojë mirë në çdo server me madhësi të arsyeshme, natyrisht në varësi të numrit të flukseve që krijoni në Node-RED (dhe sa të komplikuara janë ato). Restart=on-failure do të thotë se systemd do të përpiqet të rinisë Node-RED nëse rrëzohet, dhe KillSignal i tregon systemd mënyrën më të mirë për të lënë Node-RED kur duhet të mbyllet ose rinisni procesin.

# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog

Kjo vendos etiketën e përdorur gjatë regjistrimit dhe regjistron të gjitha daljet në shërbimin syslog.

# non-root user to run as
WorkingDirectory=/home/sammy/
User=sammy
Group=sammy

Ne duam të ekzekutojmë Node-RED si përdoruesin tonë jo-root. Linjat e mësipërme i tregojnë systemd-it të lëshojë Node-RED duke përdorur përdoruesin dhe grupin tonë, dhe nga brenda direktorisë sonë kryesore.

[Install]
WantedBy=multi-user.target

WantedBy tregon objektivat në të cilat duhet të funksionojë shërbimi ynë. Në këtë rast, kur Ubuntu futet në modalitetin me shumë përdorues, ai do të dijë të nisë gjithashtu shërbimin tonë Node-RED. Modaliteti i përdoruesit Muti është objektivi i paracaktuar i nisjes.

Tani që skedari ynë i shërbimit është instaluar dhe kuptuar, duhet ta aktivizojmë atë. Kjo do të mundësojë që të ekzekutohet në fillim.

  1. sudo systemctl enable node-red

Le ta nisim manualisht shërbimin tani për të provuar nëse ai është ende duke punuar.

  1. sudo systemctl start node-red

Drejtoni një shfletues përsëri në portin e serverit 1880 dhe verifikoni që Node-RED është rezervuar. Nëse është, mbylleni përsëri derisa të sigurojmë instalimin në hapin tjetër.

  1. sudo systemctl stop node-red

Hapi 4 - Vendosja e Nginx

Ne do të përdorim Nginx për të përfaqësuar shërbimin Node-RED. Kjo do të thotë që Nginx do të trajtojë të gjitha lidhjet SSL në portin 443 (duke përdorur certifikatat Let's Encrypt që keni vendosur më parë), dhe më pas do të kalojë trafikun në Node-RED.

Hapni një konfigurim të ri Nginx për sitin.

  1. sudo nano /etc/nginx/sites-enabled/node-red.example.com

Kopjoni dhe ngjisni sa vijon, duke ndryshuar emrin e serverit dhe shtigjet e certifikatës:

server {
    listen 80;
    listen 443 ssl http2;
    server_name node-red.example.com;
    ssl_certificate /etc/letsencrypt/live/node-red.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/node-red.example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers On;
    ssl_session_cache shared:SSL:128m;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    location / {
        if ($scheme = http) {
            return 301 https://$server_name$request_uri;
        }
        proxy_pass http://localhost:1880;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location '/.well-known/acme-challenge' {
        root /var/www/html;
    }
}

Ruani dhe mbyllni skedarin. Le të shpjegojmë se çfarë bën ky skedar.

Tre rreshtat e parë i tregojnë Nginx se në cilat porta duhet të dëgjojë dhe cilit emër domeni duhet t'i përgjigjet. Linjat ssl_certificate dhe ssl_certificate_key tregojnë për certifikatat që kemi marrë nga Let's Encrypt. Linjat e mbetura ssl_ zgjedhin protokollet, shifrat dhe opsionet që janë më të sigurta se standardet.

location / fillon bllokun ku ne në fakt përcaktojmë përfaqësuesin tonë Node-RED.

if ($scheme = http) {
    return 301 https://$server_name$request_uri;
}

Ky bllok do të përputhet me çdo lidhje të thjeshtë, jo të sigurt http dhe do t'i ridrejtojë ato në versionin https të sajtit.

proxy_pass http://localhost:1880;

Ne tregojmë për shërbimin tonë Node-RED këtu. Është i disponueshëm në localhost, në portin 1880, kështu që ne kalojmë lidhje me të atje. Pjesa tjetër e këtij blloku konfigurimi vendos disa tituj që janë të rëndësishëm për funksionimin e duhur të përfaqësuesit. Titujt Përmirësimi dhe Lidhja janë veçanërisht të rëndësishme për trajtimin e lidhjeve të foleve të internetit të Node-RED.

Më në fund, ne kemi një bllok për t'u siguruar që përgjigjet e sfidës Let's Encrypt vazhdojnë të merren nga rrënja e paracaktuar e internetit e Nginx:

location '/.well-known/acme-challenge' {
    root /var/www/html;
}

Ringarko Nginx për të marrë konfigurimin e ri.

  1. sudo systemctl reload nginx

Më në fund, filloni përsëri Node-RED.

  1. sudo systemctl start node-red

Edhe një herë, lundroni te serveri juaj: http://node-red.example.com. Duhet të ridrejtoheni te https://node-red.example.com (vini re https) dhe të shihni ndërfaqen e administratorit Node-RED . Kjo do të thotë që ne tani po proksojmë Node-RED përmes Nginx. Ne kemi vetëm disa rregullime të tjera për të bllokuar Node-RED, dhe më pas do të përfundojmë.

Hapi 5 - Sigurimi i Nyjes-RED dhe mbështjellja

Tani që lidhja jonë është e sigurt, le të shtojmë një fjalëkalim te administratori i Node-RED. Në vend që të vendosim një fjalëkalim të zhveshur direkt në skedarin tonë të cilësimeve, ne fillimisht bëjmë një hash kriptografik të njëanshëm të tij dhe e përdorim atë në vend të kësaj. Ne do të përdorim node-red-admin për të krijuar hash:

  1. node-red-admin hash-pw

Do t'ju kërkohet një fjalëkalim. Shkruani atë, shtypni ENTER dhe një hash do të printohet në ekran. Kopjojeni atë në kujtesën tuaj dhe hapni skedarin e cilësimeve Node-RED.

  1. nano ~/.node-red/settings.js

Lëvizni poshtë dhe hiqni komentin e bllokut adminAuth (duke hequr//përpara çdo rreshti). Ndryshoni emrin e përdoruesit në çfarëdo që ju pëlqen dhe ngjisni hash në fushën password.

adminAuth: {
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$Ab9prIr1M8a5a1/Zx8.B9.uIOCPe.v90ZGuZc2kAATp6BHJ/WV5KS",
        permissions: "*"
    }]
},

Ndërsa e kemi të hapur skedarin, hiqni komentin edhe nga rreshti uihost duke hequr // në pjesën e përparme të rreshtit.

uiHost: "127.0.0.1",

Kjo do të thotë se Node-RED do të dëgjojë vetëm në ndërfaqen lokale dhe nuk do të jetë i arritshëm drejtpërdrejt nga bota e jashtme (do të aksesohet vetëm përmes përfaqësuesit Nginx). Tani mund ta ruani dhe mbyllni skedarin.

Përditësoni murin e zjarrit për herë të fundit, vetëm për t'u siguruar që Node-RED të mos jetë kurrë drejtpërdrejt i aksesueshëm.

  1. sudo ufw deny 1880

Më në fund, rinisni Node-RED.

  1. sudo systemctl restart node-red

Navigoni te https://node-red.example.com dhe do të shihni një ekran identifikimi në vend të ndërfaqes kryesore të redaktimit.

Nëse faqja juaj po shfaq një ekran identifikimi dhe një lidhje https, ju keni konfiguruar gjithçka në mënyrë korrekte.

konkluzioni

Tani kemi një instalim mjaft të sigurt të Node-RED, duke u proksuar nga Nginx duke përdorur Let's Encrypt për certifikatat e tij SSL. Identifikohu dhe merr instalime elektrike! Ka shumë më tepër informacion dhe frymëzim të projektit të disponueshëm në faqen e internetit të Node-RED.