Raspberry Pi a prvá Node.js aplikácia

Publikoval Michal Kočí dňa 12.7.2015 o 21:28 v kategóriach Node.js a Raspberry Pi

V minulom príspevku sme si vytvorili nového užívateľa a nainštalovali sme si na Raspberry Pi najaktuálnejšiu verziu Node.js. Dnes si vytvoríme prvú, veľmi jednoduchú Node.js webovú aplikáciu a nainštalujeme si ju na Raspberry Pi.

Začnime aplikáciou, ktorá v zásade nebude robiť nič inteligentné, iba zobrazí oznam, že úspešne beží. Jedná sa o ukážkový kód, ktorý nájdete aj na úvodnej stránke Node.js.

Prvá Node.js aplikácia

Mohli by sme samozrejme napísať niečo inteligentnejšie, využívajúce aj ďalšie skvelé knižnice pre Node.js, ale o to tu nejde - ide nám o to vyskúšať si nainštalovať našu prvú Node.js aplikáciu.

Pripojte sa na Raspberry a vytvorte si adresár /var/www ak ešte neexistuje:

mkdir /var/www

A v ňom si vytvorte adresár pre vašu aplikáciu, pomenujte ho napríklad myfirstapp:

cd /var/www
mkdir myfirstapp
cd myfirstapp

V adresári si vytvorte súbor server.js:

nano server.js

Do neho prepíšte kód vašej prvej aplikácie:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Current date and time is ' + new Date());
}).listen(8801, '0.0.0.0');
console.log('Server running at http://localhost:8801/');

Keď ste hotový, uložte zmeny a ukončite editor (použitím ctrl + x). Ak ste všetko spravili správne, môžete si aplikáciu spustiť.

Chceli by ste sa rýchlo a ľahko naučiť programovať webové aplikácie v Javascripte a bežať ich na Node.js? Jednoduché. Rád vás to naučím na mojom školení Node.js - serverových aplikácií v Javascripte.

Spustenie aplikácie

Spustite teda aplikáciu, ak ste v adresári aplikácie, tak takto:

node server.js

Ak je všetko v poriadku, mala by vám vypísať, že je spustená. Ak by vám náhodou skončila chybovou hláškou Error: listen EADDRINUSE tak to znamená, že na danom porte už niečo beží - vtedy sa vráťte do editácie a zmeňte port za iný.

Isto by ste si chceli overiť, či aplikácia funguje správne - najlepšie je si ju otvoriť v prehliadači. Zadajte v prehliadači IP adresu vášho Raspberry, dvojbodku a port na ktorom vám beží (napríklad 10.0.1.17:8801) - mal by sa vám zobraziť oznam o aktuálnom dátume a čase.

To, že sme pri spustení servera zadali IP adresu 0.0.0.0 zabezpečí, že bude node počúvať na všetkých IP adresách vášho Raspberry.

Super, môžete aplikáciu zastaviť (použitím ctrl + c). Hotovo.

Inštalácie aplikácie ako služby

Môcť spustiť aplikáciu ručne je síce fajn, ale pravdepodobne nedostatočné - aplikácia beží len kým ju nezastavíte. Oveľa lepšie a pravdepodobne želané je, aby aplikácia bežala stále - ako služba.

Aby aplikácia bežala stále, použijeme dva skvelé nástroje - forever a forever-service. Prvý zabezpečí neustále bežanie aplikácie a ak táto z nejakého dôvodu skončí, bude znovu naštartovaná. Druhý nástroj vám zase pomôže nainštalovať aplikáciu ako službu, pričom interne na jej spustenie bude používať práve forever.

Začnime tým, že si oba nástroje cez npm nainštalujete:

sudo npm install -g forever
sudo npm install -g forever-service

Teraz máte nainštalované oba skvelé nástroje, nemáte však ešte nainštalovanú samotnú službu, ktorá sa bude spúšťať vždy pri reštarte zariadenie a môžete ju samozrejme spustiť aj manuálne.

Služba musí byť pomenovaná a vytvorí sa v adresári /etc/init.d a ako názov môžete použiť napríklad názov vašej aplikácie. V našom prípade ju teda nazveme myfirstapp.

Už pri inštalácii nastavíme nejaké parametre. Konkrétne nastavíme, že chceme aby forever monitoroval adresár aplikácie (cez -f parameter s hodnotou " -w") a pri detekcii zmeny reštartoval aplikáciu. Tak si zabezpečíte, že ak aplikáciu zmeníte, automaticky sa zreštartuje a bude prístupná nová verzia.

Tiež nastavíme PATH (cez parameter -e), ktorý bude kombináciou aktuálneho PATH a /usr/local/bin adresára. To zabezpečí, že skript bude vedieť nájsť Node.js. No a tiež nastavíme, ako sa volá javascript súbor, ktorý má byť spustený (parameter --script).

sudo forever-service install myfirstapp -f " -w" -e "PATH=/usr/local/bin:\$PATH" --script server.js 

Spúštajte tento príkaz stále z adresára vašej aplikácie. Ak sa inštalácia podarila, máte vyhraté a môžete službu spustiť:

sudo service myfirstapp start

Alebo len reštartnete zariadenie cez sudo reboot) a služba sa pri štarte spustí sama automaticky.

Nezabudnite si po štarte služby alebo reštarte zariadenia overiť, že vám služba beží (t.j. skúste si zase otvoriť stránku vašej aplikácie)

A čo s portom? A čo tak viac aplikácií?

Skvelé otázky!

Aplikácia vám beží na porte 8101, čo nie je moc super, ak ju chcete mať verejne prístupnú, vtedy ju budete zrejme chcieť bežať na porte 80. Nevraviac o tom, že môžete chcieť na jednom Raspberry bežať viac aplikácií a všetky na porte 80. Alebo na porte 443 ak chcete SSL.

Na to sa hodí použiť reverznú proxy, napríklad nginx. No a na jej konfiguráciu sa pozrieme zase nabudúce. Takže, ostaňte naladení...

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.