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?

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.

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 Skype grupi-chatiga.

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.

Rohkem küsimusi ei ole? Hakkame siis tööle!
(kui on küsimusi – võid küsida siinsamas kommentaarisabas või saata peeter@zone.ee või liituda Skype grupi-chatiga)

Ära mine õnge – petukirjad õngitsevad Zone e-posti kasutajatunnuseid

Täna on hakanud levima õngitsemis-kirjad, mille “postkasti suurendamise” link viib Zone veebimeili sisselogimise lehega sarnasele lehele – sinna kasutajatunnuse ja parooli sisestamise järel lähevad need mõistagi joonelt kurikaelte kasutusse.

Käitumisjuhised nagu ikka:

  • ära logi mistahes teenusesse sisse e-postile tulnud lingi kaudu – turvalisem on teadaolev aadress ise brauserisse tippida, nt www.zone.ee või webmail.zone.ee
  • ära kliki kahtlastes kirjades olevatel linkidel ja ära ava saadetud faile, kui pole saatjas 100% kindel – arvuti nakatamiseks piisab ka “korraks vaatamisest”
  • kui sulle tundub, et oled oma kasutajatunnused kahtlasse kohta sisestanud – siis muuda koheselt parool; kõhkluse korral võid alati võtta ühendust ka meie klienditoega info@zone.ee.

Kiri ise näeb välja näiteks selline:

Dear Valued Subscribers

The size limit of 20 MB for your mailbox has been exceeded. Incoming mail is currently being rejected. You are required to upgrade your mailbox size to 2GB within 24 hours or your account will be suspended.

Upgrade Mailbox

Note that mailbox upgrade is free.

Sincerely yours,
Customer Service

Klikkides kirjas oleval lingil satud lehele, mis on 1:1 kopeeritud meie veebimeili esilehelt – aga nagu näha, on samas serveris ka teiste teenusepakkujate lehtede koopiad:

Sisestades lehele kasutajatunnused suunatakse sind edasi päris-Zone lehele, aga mõistagi ilma mingi sisselogimiseta.

Täiendatud: “tehnikahuvilistele noortele” on vahest hea teada, et õngitsemislehed on laetud üles ühte Magento veebipoodi, milles on kasutusel toote-info importimise laiendus nimega Magmi – paraku võimaldavad selle vanemad versioonid pluginatena üles laadida mistahes koodi (CVE-2014-8770), probleem on kõrvaldatud versioonis 0.7.20 (2014.a oktoobris).

Huvitava seigana võib esile tuua aga seda, et õngitsejate poolt üle võetud veebipood asub Austraalias ehk ajatsoonis, kus probleemi avastamise ajal on sügav talve-öö.

Mida selle teadmisega pihta hakata?

  • kui sul on veebileht, siis vastutad ka selle uuendamise ja turvamise eest – sageli on mõistlik selleks sõlmida veebilehe tegijaga pikemaajaline hooldusleping ning jälgida selle täitmist
  • kui oled veebilehe tegija, siis anna oma töö kliendile üle piinlikult puhtaks tehtuna – ei ühtki üleliigset pluginat, ajutist test-versiooni või vana veebi juppe vedelemas; ligipääsu-õigused minimaalsele tööd võimaldavale tasemele, paroolid tugevaks

Voog on värskem ja sõbralikum

Voogi logo

Tükk aega pole kirjutanud meie hea partneri Edicy sisuhaldustarkvarast Voog.

Täna parandan selle vea, sest Voog annab põhjust endast kõneleda. Nimelt jõudsid Edicy-l mõne aja eest lõpule mitmed arendused, mis tõid endaga kaasa suuremaid ja väiksemaid uuendusi nii selle fantastilise tööriista välimuses kui ka “kõhus”.

Suuremaid muutusi on kaks.

Voogi kasutajaliides on senisest värskem. Peamenüü on muutunud kompaktsemaks ja lihtsamini hoomatavaks. Varem domineerinud ikoonidele on lisandunud rohkelt funktsiooni selgitavaid tekste, mis teeb veebilehe sisuelementide ning nendega seotud tööriistade leidmise palju mugavamaks.

Voog sisuhaldus

Teine uuendus puudutab lehe disaini ja küljendamise tööriista, mis pakub kombinatsioonis uute lehemallidega sujuvamat kasutajakogemust.

Enam ei pea tavakasutaja Voogiga kodulehe kujunduses muudatuste tegemiseks HTML-i, JavaScripti või CSS-i olemusse süvenema. Disainiga seotu on seetõttu palju lihtsamini muudetav.

Voogi arendajad ise ütlevad selle kohta nii:

“Muuhulgas on võimalik muuta terve veebilehe fonti ja kirjastiile. Samuti saab muuta kujunduse mõõtmeid — päise- ja sisualade laiust, peamenüü suurust, lisaks ka pisemaid detaile nagu tabelite piirjooned, vormide stiilid jne. Kasutaja jaoks lihtsasti mõistetavate menüüde kaudu saab kontrollida kogu lehe värviskeemi.”

Algajale kasutajale on äärmiselt oluline, et kodulehe muutmisega eksperimenteerimine on muudetud turvalisemaks ja tavainimesele sõbralikumaks. Muudatusi saab ükshaaval tagasi võtta või ühe nupuvajutusega terve kujunduse algseadetele lähtestada.

Seega, kui varem ei ole Voogi proovinud või on eelmisest katsetusest hulk aega möödas, tasub kindlasti uuesti proovida.

Voogi saab ühe nupuvajutusega oma kodulehel kasutusele võtta “Minu Zone” haldusliideses asuvas Zone+ rakenduste poes. Esimene kuu Voogi kasutamist on tasuta.

Rege rauta suvel!

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.

Kuidas kontrollida väljuva e-posti SPF+DKIM+DMARC toimimist?

E-posti saatja tuvastamine muutub spämmiga võitlemise tõttu üha olulisemaks ning tehniline lahendus on “paneme domeenile ranged SPF+DKIM+DMARC reeglid peale, välistame võõrastel meie nimel kirjade saatmise ja kõik on jälle hästi”.

Kuidas aga kontrollida, et lisatu tõesti toimib ning kõik saadetud kirjad kohale jõuavad?

Hästi lühidalt: kõik kolm on DNSi ehk domeeni nimeserverisse lisatavad kirjed. SPF on nimekiri serveritest, mis tohivad sinu domeeninimega e-posti saata. DKIM lisab väljuvale e-postile digitempli, mis võimaldab vastuvõtjal kontrollida saatja õigust domeeni nimel posti saata. DMARC kinnitab, et SPF ja/või DKIM on kasutusel ning võimaldab tellida raporteid väärkasutuse või reeglitele mitte vastavate kirjade kohta.

Üsna lihtne on mõni e-posti saatmise kanal ära unustada ja tekitada olukord, kus osa varem saadetud kirjadest spämmiks loetakse. Sageli on korraga kasutusel veebimeil, e-postiprogrammid arvutis ja mobiilseadmes – aga kirju võivad meie nimel saata veel ka:

  • automaatvastajad, kirjade edastajad, myyk@ või info@ postigrupid
  • e-posti-turunduse lahendus (nt Mailchimp, Mailbow, Sendsmaily)
  • majandustarkvara pilves (nt Erply, Directo) või kasutaja arvutis
  • kliendisuhtlusega seotud tarkvara (nt Pipedrive, Kayako, Zendesk, Intercom)
  • veebiserver (nt kontaktivorm või e-poe ostukinnitused)
  • tootmislahendused, kliimaseadme monitooring jne

Väga mugav lahendus testimiseks on mail-tester.com – lehe külastamisel kuvatakse sulle unikaalne aadress, saates sinna test-kirja saad tulemuseks hinde ja selgitused:

perfektne-skoor

Kui midagi 10/10 tulemusest puudu jääb, kuvatakse selgitust ja soovitusi.

Nii näeb näiteks välja tulemus, kui saatja tuvastamist võimaldavad kirjed on seadistamata ning skoor 7/10:

mailtester-soovitused

Aga proovime teistpidi, lisame domeenile soovitatud SPFi ja saadame kirja välja ühest mujal asuvast arvutist – näiteks on raamatupidaja “palgaprogramm” või Outlook seadistatud kasutama internetiühenduse pakkuja postiserverit, müügimehed saadavad pakkumisi välja läbi teenusepakkuja serveris töötava veebipõhise CRM-tarkvara vms:

bad-mail-go-home

Nagu näha, on olukord muutunud raamatupidaja või müügimehe jaoks hullemaks ja see on ka põhjus, miks me ei saa, taha ega tohi “jõuga” kõigile klientidele SPF’i lisada – küll aga tegime selle ise lisamise võimalikult lihtsaks ning aitasime mail-tester.com eestindada.

Tegevusplaan võiks olla selline:
  1. tee nimekiri kõigist lahendustest, mis võivad sinu domeeni nimel posti saata – milline SMTP-server on kasutajate arvutites-telefonides seadistatud, millist tarkvara nad veel kasutavad (küsi kõigil, ka laomehelt), kontaktivormid veebis, uudiskiri, e-pood jne
  2. kui tundub, et kõik kasutavad Zone servereid – siis võid SPF+DKIM+DMARC toed sisse lülitada ja asuda umbes veerand tunni pärast testima (selle aja peale peaksid kõik Zone nimeserverid andma sama tulemust)
  3. kui kasutad ka muid teenuseid, siis uuri nende käest järgi soovituslik SPF kirjele lisatav IP-aadress või “include:” ning kohanda SPF-kirjet vastavalt, DKIM lubamisel arvesta, et see puudutab ainult Zone serverite kaudu saadetavaid kirju
  4. TESTI – võta mail-tester.com pealt test-aadress ning saada sinna kiri oma Outlook’ist või Mail’ist. Kontrolli tulemust. Saada mobiilist (võid kasutada sama aadressi või genereerida uue – lehte värksendades näed alati viimati saadetud kirja tulemust). Tee oma e-poest proovitellimus registreerides kliendi test-eposti aadressiga. Lase laomehel saata üks saateleht, test-aadressile mõistagi. Jne.

Kui mõni saatja ei sobi, siis kohenda SPF-kirjet. Selle sisu formaat on väga lihtne, näiteks lisades MailChimpi serverid ja ühe konkreetse IP:

v=spf1 a mx include:_spf.zone.eu include:servers.mcsv.net ip4:xxx.xxx.xxx.xxx ~all
  • v=spf1 – SPF-kirje tunnus
  • a – saatmine lubatud kõigilt domeenis A-kirjet omavatelt IP-aadressidelt
  • mx – saatmine lubatud kõigist domeeni posti-serveritest
  • include:_spf.zone.eu – saatmine lubatud kõigist Zone Media serveritest
  • include:servers.mcsv.net – saatmine lubatud MailChimpi serveritest
  • ip4:xxx.xxx.xxx.xxx – saatmine lubatud IP-aadressilt xxx.xxx.xxx.xxx
  • ~all – kõik ülejäänud aadressid ei ole otseselt keelatud

Kui oled täiesti kindel, et kogu väljuv post kasutab ainult SPF-kirjes olevaid aadresse, võid ~all asemele panna ka -all – see ütleb üheselt, et nimekirjas mitte olevatest serveritest tulev post tuleks spämmiks lugeda. Enne SPF (ja DMARC) kirjete rangemaks keeramist tuleks aga ette võtta DMARC pakutav võimalus koguda raporteid domeeni nimel saadetava ja reeglitele mittevastava posti kohta ning siis liikuda edasi samm-haaval.

Zone serverite jaoks on SPF+DKIM+DMARC lisamine ja kohandamine lihtne, sisuliselt kolm klikki:

Olgu lisatud, et seadistused jõustuvad ca 15 minuti jooksul ning DKIM digitempel lisatakse veebimeilist ja Zone SMTP kaudu saadetavatele kirjadele, Pakett II ja III puhul ka veebiserverist saadetavatele. Teiste teenuste DKIM-kirjed saab lisada tavapärasel viisil ehk nimeserverite alt.