Node.js veebirakendused nüüd Zone virtuaalserveris – kauba peale PM2, mod_proxy ja portide suunamine

Võimalus käsurealt Node.js rakenduste käivitamiseks tekkis Zone virtuaalserverites umbes aasta tagasi koos SSH-ligipääsu lubamisega – aga kuna kogu veebiliikluse võttis enda peale Apache, puudus võimalus neile internetist ligi pääseda. Ekstreemsemad kasutajad aga leidsid omal käel lahendusi – passiivse FTP jaoks on mingi pordivahemik ikkagi avatud, mod_proxy abil saab liiklust suunata ja cron’i saab panna skripti, mis tagab rakenduse käigushoidmise. Katsetamiseks “intellektuaalselt huvitav nipp”, aga selle abil kaugele ei purjeta.

Kui aga hakkasime kasutajate huvist tulenevalt Node.js veebirakenduste jaoks head lahendust otsima – algselt plaanitud kiire nädalavahetuse-häkatonina – jõudsime oluliselt laiemat kasutust omavate komponentideni virtuaalserveri halduses:

  • Erinevate rakenduste seadistamise ja serveri restardil automaatse käivitamise võimalus (seda kasutab juba meie Redis-vahemälu lahendus.)
  • PM2 protsessihaldur, mille abil saab käivitada ja hallata Node.js rakendusi (aga ka näiteks PHP või shelli skripte).
  • Apache mod_proxy seadistus, mis võimaldab suunata veebiliikluse (ehk port 80 ja HTTPS puhul ka 443) kasutaja rakenduse poolt kuulatavasse porti.
  • Portide suunamine (port forwarding), mis võimaldab virtuaalserverile eraldatud IP kasutamisel avada ja suunata väliseid porte (>1024) ja sobib mh WebSocket’it implementeerivate rakenduste jaoks.

Kuidas seda kõike kohe omal nahal järgi proovida?

Sellest videost leiab “Hello world” rakenduse käivitamise näite – keerulisemad juhud nagu tuntumate raamistike kasutamine, Websockets’i tugi jms saavad oma videoõpetused veidi hiljem.

Meetod 1 – mod_proxy

Alustaks ühest väga lihtsast Node.js “Hello World!” rakendusest – teen testimise tarbeks virtuaalserveri halduses uue alamdomeeni node.miljonivaade.eu ja määran sinna lisandunud parameetri mod_proxy sihtpordi väärtuseks 8080. Selle tulemusel hakkab Apache toimima reverse proxy‘na ehk kõik porti 80 tulevad HTTP päringud suunatakse edasi localhost’i porti 8080.

node-subdomain-dip

Kui domeenil või alamdomeenil on lubatud ka HTTPS, saab selle seadistada samamoodi (või kasutada HTTP seadeid) – seejuures on oluline arvestada, et nagu reverse proxy puhul sageli tavaks, toimub turvaline SSL ühendus kasutaja ja Apache vahel, sealt edasi Node.js rakenduseni liigub lahtine HTTP päring.

Seejärel laen üles app.js koodi (asukohaks ei pea olema alamdomeeni kodukataloog):

var http = require("http");

http.createServer(function (request, response) {
 response.writeHead(200, {'Content-Type': 'text/plain'});
 response.end('Hello World! I am a Node.js app :-)\n');
}).listen(8080);

Nagu näha, tekitab see porti 8080 kuulava veebiserveri ning tagamaks selle käivitamise ka pärast tõrget või füüsilise serveri restarti, on vaja see lisada PM2 protsessihaldurisse (Veebiserver › Node.js ja PM2):

node-add-app

Rakendusi saab lisada nii .js kui PM2 rakenduse deklaratsiooni .json või .yml failina, mis lubab seadistada kõiki PM2 parameetreid, käivitada korraga mitut rakendust jpm.

Kasutada olev summaarne mälukogus sõltub virtuaalserveri paketist ning seda saab jagada mitme rakenduse vahel omal äranägemisel.

Protsessi lisamise järel võib minna kuni 3 minutit selle tegeliku käivitumiseni, olekut näeb lehe uuestilaadimisel (tulevikus loodetavasti ka ilma laadimiseta). Ja kui see on “Käivitatud”, siis võib testima asuda:

hello-there

Edaspidi saab rakendust samast kohast virtuaalserveri halduses peatada, muuta, kustutada ja restartida.

Meetod 2 – port forwarding

Selle lihtsa mod_proxy lahenduse puhul ei toimi aga WebSocket ühendused, nende jaoks oleks vaja kogu välisesse porti tulev liiklus rakendusele suunata.

Selleks lisasime virtuaalserveri haldusesse pordi suunamise võimaluse – tõsi, selle kasutamiseks on vaja eraldi IP-aadressi, mida pakub Pakett III (üks aadress sisaldub hinnas, selle aktiveerimiseks tuleb saata kiri klienditoele). Olgu siinkohal mainitud, et portide suunamine kasutamine torrenti- või mänguserveri, proxy vms teenuse jaoks on rangelt keelatud seoses võimalike juriidiliste ja serveri koormuse küsimustega. Kui kahtled plaanitava kasutuse lubatavuses, siis kirjuta palun meie kasutajatoele ning kirjelda oma rakendust ja eeldatavat kasutajate hulka.

Demoks sobib kenasti socket.io näidis-chat, mille paigaldan serveris vabalt valitud asukohta, tehes SSH abil vajalikud npm install’id ja seadistan seejärel PM2 abil käivitatavaks:

node-app-list

Kui nüüd ülevalpool olevat alamdomeeni seadistust uuesti vaadata, hakkab loodetavasti silma, et seal on alamdomeenile eraldi IP-aadress juba määratud (217.146.71.171) ning mul pole vaja teha muud, kui lisada vastav pordi suunamine näidis-chatis kasutusel oleva port 3000 jaoks:

node-port-forward

Pordi suunamise rakendumine võib aega võtta kuni 10 minutit. Selle ajaga jõuab teha väikse kohvipausi ja minnes seejärel aadressile node.miljonivaade.eu:3000 … on tulemuseks toimiv chat:

weirdo-chat

Mis edasi?

Edasi võiks proovida näiteks rakenduse käivitamist mitte .js, vaid .json abil – kui lisada sama “Hello, World” rakenduse kataloogi selline app.json, muuta vastavalt PM2 seadistuses rakenduse asukoht ja see taaskäivitada …

{
 "apps" : [{
 "name" : "hello-world",
 "script" : "app.js",
 "watch" : true,
 "cwd" : "/data02/virt33390/domeenid/www.miljonivaade.eu/nodetest",
 }]
}

… siis hakkab PM2 jälgima parameeteriga cwd määratud kataloogis toimuvaid failimuutusi ja restardib rakenduse automaatselt. Mugav harjutamise või arenduse käigus, aga ilmselt tasuks production’is mitte peale unustada. Samuti “te ei usu, mis juhtub”, kui watch’iga rakendus midagi ise enda kataloogi kirjutab, näiteks logifaili: rakendus ‘retarditakse’ ehk PM2 proovib kümmekond korda restartida ja loeb siis asja lootusetuks.

Kui PM2 käivitusprotsessis miski nihu läheb – või on soov katsetada ilma virtuaalserveri haldust mängu segamata – siis saab sellele ligi ka SSH abil. Olulisemad käsud leiab PM2 spikrist, samas on kirjas ka kataloogistruktuur, mille PM2 tekitab virtuaalserveri kodukataloogi alla (sealt leiab nii rakenduste kui PM2 logid).

pm2-list

Ja kuna PM2 on tehtud Keymetrics’i poolt … siis saab ühe käsuga lisada ka nende monitooringu (lihtsam vaade tasuta, paremad tööriistad ja teavitused raha eest):

pm2-keymetrics

Ja edasi edasi?

Uuri, proovi, katseta – ilmselt on paslik seda lahendust hetkel beetaks lugeda ning anda meile teada sellest, mis ei toimi oodatud viisil, vajaks muutmist või lisamist. Või siis mis toimib väga hästi ja lahendab tegelikke probleeme 🙂

Teada võib anda otse siinsamas kommentaari-sabas, meie FB-lehel, kirjutades peeter@zone.ee või liitudes meie slack.zone.eu kanaliga.

Korduma Kippuvad Küsimused

Mis Node.js versiooni kasutate? Hetkel on selleks 6.3.0, edaspidi hakkame hoidma kõiki servereid värskeima LTS peal.

Palju mälu kasutada saab? Sõltub paketist – I, II ja III vastavalt 512MB, 768MB ja 1024MB. Mälupiir on hetkel soft limit ehk toimub “proaktiivne monitooring” ja piiritundetud kasutajad kutsutakse küberneetiliselt korrale.

Ma saan selle PM2 ju ise kah SSHs käima tõmmata? Tõsi, aga siis ei ole tagatud rakenduste taaskäivitumine serveri restardi puhul.

Miks te PM2 valisite, xyz on palju parem? Sellepärast, et.

Kas Node.js binaarsed moodulid ei olegi toetatud? Kuna oleme otsustanud kompilaatoreid virtuaalserverites mitte pakkuda, puudub ka võimalus binaarseid mooduleid paigaldamise käigus kompileerida. Meie hinnangul saab suurem osa Node.js rakendustest ilma hakkama.

Rohkem küsimusi ei ole? Hakkame siis tööle!
(kui on küsimusi – võid liituda Skype grupi-chatiga)

Redis annab professionaali veebile vunki

 

Redis logo

Jätkame kodulehe kiiruse parandamist võimaldavate vahendite lisamist klientide tööriistakohvrisse. Seekord on tegu maiuspalaga professionaalidele, sest Virtuaalserveri klientidele on saadaval Redis, maailma üks populaarsemaid NoSQL andmebaasimootoreid ja värskendavalt kirbe juurvilja nimekaim.

Redis võimaldab rakendusele luua täielikult serveri põhimälus asuva fantastiliselt kiire puhvri ehk ‘cache’, milles võib hoida objekte, mida on veebilehe kuvamiseks tihti vaja.

TL;DR – Zone lisab Redise toe, et saaksid oma e-poe või kodulehe kiiremaks teha. Redise lisamiseks Virtuaalserverisse on vaja klikkida vaid ühel nupul, juhendi selle leidmiseks leiad käesoleva postituse lõpuosast.

Redis on kiire, paindlik ja stabiilne tarkvara. Veebirakenduste kontekstis on selle peamised kasutuslood seotud võimalusega andmeid ülikiiresti kirjutada ja lugeda, mis on eriti oluline e-kaubanduse kontekstis.

Veel mõnd aega tagasi kasutati sarnaseks funktsiooniks Memcached nimelist jubinat. Kuna Redisel on viimase ees palju olulisi eeliseid, siis on kaalukauss kogu maailmas kaldunud viimase, kui kaasaegse ja täisverelise NoSQL andmebaasimootori kasuks.

Redise kasutamist toetavad läbi sisseehitatud toe või laienduste paljud populaarsed sisuhaldusvahendid ning e-kaubanduse platvormid nagu näiteks WordPress, Drupal, Magento jt. Kuna Redis on professionaali tööriist, siis ei pruugi selle kasutuselevõtt kõikidel platvormidel olla nii lihtsaks tehtud, kui näiteks Magentos.

Veebirakendused, mis Redist toetavad hoiavad seal tihti:

  • kasutaja sessiooni;
  • ostukorvi;
  • külastusajalugu;
  • ostusoovitusi;
  • tootekataloogi andmed;
  • analüütikat;
    jms.

Redise tugi on Virtuaalserveri klientidele olemas alates teenuspaketist II. Mälu on selles Redisele eraldatud 256 MB ja III paketis 512 MB.

Redise leiab “Minu Zone” keskkonnas asuvas Virtuaalserveri juhtpaneelis, alajaotuses “Andmebaasid/kasutajad”:

Mõne PHP rakenduse puhul võib olla vajalik ka Redise PHP laienduse sisse lülitamine:

activate_redis_php

Redis ja muud kasutuslood

Redisel on teisigi populaarseid kasutuslugusid, mis seotud kvantitatiivsete andmete kogumise, mõõtmise ja töötlemisega, aga ka kommunikatsioonikanalite loomisega erinevate süsteemide vahel (http://redis.io/topics/pubsub). Need erinevad aga puhverdamisest peamiselt selles osas, et nõuavad ka Redise andmete kettale salvestamise võimalust (‘persistence’), mida me hetkel veel ei paku.

Kui sul on huvi ‘persistence’ kasutamise vastu, sest sul on ägedaid mõtteid, kuidas tahaksid seda kasutada, siis anna meile neist teada, et saaksime Redise toe arendamise järgmises etapis sellega arvestada.

3 tehnoloogiat, mis aitavad kirjad kindlalt kohale toimetada

tookindel_epost_wHiljuti karmistas Google kogemata paariks tunniks oma e-posti teenuse GMail reegleid ja näitas maailmale, kuidas e-posti legitiimsuse kontrolli tõsiselt suhtutakse. Tulemuseks oli kuni 50% sisenevate kirjade blokeerimine väikettevõtetelt, kuna nende kirjade autentsuses ei olnud võimalik veenduda.

Väljakutse vastu võetud! Täna lihtsustasime kolme tehnoloogia kasutuselevõttu, mis aitavad e-posti juhuslikku rämpspostiks märkimist vältida.

Võitlus müra- ja rämpspostivabama interneti nimel nõuab aina enam ohvreid ausate infoedastajate hulgast. Mida tihedamaks muutuvad rämpsposti püüdmisel võrgusilmad, seda rohkem jääb nendesse kinni olulisi kirju, ausaid pakkumisi ja väärtuslikke uudiskirju. Võin vaid oletada, kui palju jääb tänu e-kirjade väärklassifitseerimisele ettevõtetel tulu saamata.

TL;DR – selleks, et e-kirjad prügikasti ei potsataks, tuleb vajutada kolme nuppu, video postituse lõpus. Kui nupud vajutatud, siis loe edasi: Kuidas kontrollida väljuva e-posti SPF+DKIM+DMARC toimimist?

SPF

SPF ehk Sender Policy Framework pakub domeeni omanikule võimalust spetsiaalselt vormindatud DNS kirje abil seadistada milliste serverite või andmesidevõrkude kaudu tema domeenist kirju välja saadetakse. Ühtlasi laseb see määrata, kuidas kirju käitlevad serverid peaks suhtuma tundmatust allikast pärit kirjadesse.

DKIM

Krüptograafilise kinnituse e-kirja pärituolu kohta annab tehnoloogia nimega DKIM ehk DomainKeys Identified Mail. DKIM põhineb avaliku võtme krüptol. Domeeni omaniku käsutuses on võtmepaar, mille avalik osa avaldatakse DNS kirjena ja privaatse osaga allkirjastatakse kõik domeenist väljuvad e-kirjad.

DKIM annab vastuvõtjale SPF-ist veelgi täielikuma kindluse kirja saatja seose kohta kasutatud domeeniga. Ühtlasi moodustatakse kirja mitmete komponentide alusel digitempel, mille kontrollimine aitab kirja saajal veenduda selles, et saadetud kirja pole teekonnal muudetud.

Mis seejuures kõige meeldivam, kirjade digitaalne signeerimine võib täielikult toimuda serveris. DKIM on seetõttu kasutaja seisukohast lihtsalt kasutusele võetav, kuna ei nõua tööjaamas lisatarkvara või erilist e-posti kliendi häälestust.

DMARC

DMARC ehk Domain-based Message Authentication Reporting and Conformance põimib SPF ja DKIM tehnoloogia ühtseks e-posti aadresside võltsimist välistavaks poliitikaks.

DMARC poliitikaga saab e-posti vastuvõtja serverile teada anda, et SPF ja/või DKIM kontrollide ebaõnnestumisel tuleb valida üks järgmistest tegevustest:

  • e-kiri panna karantiini (rämpsposti postkasti);
  • e-kiri tagasi lükata;
  • e-kiri läbi lasta, kuid saata selliste kirjade kohta domeeni haldajale raport.

SPF + DKIM + DMARC ja Zone.ee

Ülalnimetatud tehnoloogiate juurutamine on varasemalt nii meil kui ka mujal olnud eelkõige edasijõudnu tasandil tehniliste oskustega inimeste või organisatsioonide päralt.

Nüüd oleme Zones toonud nende kasutuselevõtu tavakasutaja käeulatuses. Valmistasime “Minu Zone” keskkonda loonud lihtsa kasutajaliidese, mis võimaldab Zone serveriteenuse kasutajal efektiivse e-posti turvapoliitika jõustada vaid kolme klikiga.

Eelpoolmainitud tehnoloogiate aktiveerimisel lisatakse kliendi DNS tsooni SPF kirjed, mis teatavad maailmale, et Zone võrgust tulnud kirju võib usaldada rohkem, kui mujalt saabunuid. Ühtlasi luuakse kliendile krüptograafiline DKIM võti, millega allkirjastatakse kõik Zone serveritest lähtuvad kirjad.

Kui nii SPF kui ka DKIM on aktiveeritud, siis jõustatakse ka DMARC poliitika, mis teatab maailmale, et kirjad mis ei vasta SPF-is ja DKIM-is kirjeldatule, tuleks panna karantiini, ehk rämpsposti hulka.

Kui SPF ja DKIM on sisse lülitatud, siis loe edasi: Kuidas kontrollida väljuva e-posti SPF+DKIM+DMARC toimimist?

Ainus mille eest klient peab hoolt kandma, on see et ta tulevikus saadakski reaalselt oma kirjad välja just Zone serverite kaudu.

Loodan väga, et loodud võimalus aitab meie klientidel oluliselt maandada legitiimsete kirjade rämpsuks klassifitseerimise riski ja aitab neil nii konkurentsivõimelisemaks ja edukamaks saada.

P.S. See launch oli meil plaanitud järgmisesse nädalasse, aga seoses teema aktuaalsusega (eilne Gmaili intsident), kulutasime hilisõhtuseid töötunde, et asi kiiremini üles saaks.

Teenuspakettide värskendus

Eile jõustusid Zone Virtuaalserveri uued teenuspaketid, mis tõstavad pakutavate ressursside mahtu 2-5 korda nii senistel kui uutel klientidel – hinnad seejuures ei muutu. Ja nagu televiisoris öeldakse “Aga see ei ole veel kõik!” – juba kaks kuud on kõik Virtuaalserverid kasutanud kiireid SSD-kettaid.

Sellega jõuab finišini aasta kestnud fantastiline kiirendus, mis on läbi uute tehnoloogiate juurutamise loonud ettevõtjatele uusi võimalusi kodulehtede turvalisuse ja kiiruse parandamiseks.

paketivarskendus-2016-05

Pildilt ja hinnakirja lehelt ei hakka silma, aga I pakett on saanud piiramata arvu postkaste ja andmeliiklust, detailide lehelt leiab lisaks suurema koguse (suuremaid) andmebaase ja postiliste.

Tuletame korraks meelde, mis selle spurdi käigus 2015. aastal tehtud sai:

  • tõime HTTPS ühenduse odavamasse teenuspaketti;
  • kasvatasime oluliselt füüsiliste andmesideühenduste kiirust;
  • lisasime PHP 7 toe, mis võimaldas muuta ühilduvad kodulehed kuni 100% kiiremaks;
  • alustasime tasuta Let’s Encrypt TLS/SSL turvasertifikaatide pakkumise katseperioodi;
  • tõime turule soodsa veebilehe turvamonitooringu Nimbusecilt.

Käesoleval aastal pole me lasknud hool raugeda ja mul rõõm kanda ette järgmist:

  • oleme kõigisse Virtuaalservereid teenindavatesse serveritesse lisanud SSD andmekandjad;
  • kuulutasime tasuta Let’s Encrypt TLS/SSL turvasertifikaadid Zone.ee platvormi osaks;
  • lisasime kogu Zone taristusse unikaalsed teenustõkestusrünnete tuvastamise, tõrje, analüüsi ja raporteerimise vahendid;
  • lisasime kõigile HTTPS toega Virtuaalserveri teenuspakettidele HTTP/2 toe.

Virtuaalserveritele eraldatud ressursside kasvatamine on loogiline jätk nendele tegevustele. Teenuspakettide mitmekordistunud parameetritega saab tutvuda Virtuaalserverite lehel.

Ühtlasi kasutan võimalust avalikult kiita meie operatsioonide meeskonda, kes on suutnud paketiuuenduste ootuses meie näljasetele andmekeskusetele sisse sööta tohutu hulga SSD kettaid ja öiseid töötunde.

Respect!

See ei ole kaugeltki kõik - kokku läks Virtuaalservereid majutavatesse serveritesse
Ka see ei olnud kaugeltki kõik – lihtsalt esimene tarne 🙂

 

Järgmine veebilehtede turbonupp sisse lülitatud: HTTP/2

Turbo Boost

Eelmisel aastal kirjutasin, et lisasime oma platvormi PHP 7. versiooni toe ja see on justkui veebilehe “turbonupp”. Täna teavitan, et oleme oma platvormi juhtpaneeli lisanud veel ühe funktsionaalsuse, mida ka võiks “turbonupuna” kirjeldada ja selleks on HTTP/2.

Loe edasi “Järgmine veebilehtede turbonupp sisse lülitatud: HTTP/2”