Tässä pieni katsaus työkaluihin Node.js-sovellusten ajamiseen tuotantoympäristöissä. Olen kerännyt tähän muutaman relevantin moduulin tuotantoympäristöihin liittyen ja käyn läpi lyhyesti, mitä ne tekevät.

ModuuliKuvaus
Supervisor Supervisor on työkalu yksittäisen Node.js-palvelimen automaattiseen uudelleenkäynnistelyyn. Se käynnistää prosessin uudelleen, jos prosessi kuolee tai jos sen lähdekoodi päivittyy levyllä. Sopii siis myös kehityskäytön aikana siihen, ettei palvelinta tarvitse käynnistää käsin uudelleen koko ajan.
Always Always tekee suunnilleen saman kuin Supervisor. Tällä projektilla on kuitenkin vähemmän aktiviteettia GitHubissa kuin Supervisorilla.
Cluster Cluster on Node.js:n sisäänrakennettu moduuli, jonka avulla voi hyödyntää useampaa CPU-ydintä. Master-prosessi käynnistää palvelimesta useita rinnakkaisia worker-prosesseja, jotka voivat kuunnella esimerkiksi samaa TCP-porttia. Worker-prosessit voivat myös kommunikoida master-prosessin kanssa ja keskenään.
Upstart Upstart on Ubuntun sisäänrakennettu palvelinprosessien hallintajärjestelmä. Se käynnistää bootin yhteydessä kaikki palvelimet, joilla on konfiguraatio /etc/init-hakemistossa. Lisäksi se käynnistää kaatuneen palvelimen automaattisesti uudelleen (respawn).
Forever Forever hallinnoi palvelinprosesseja samaan tapaan kuin Upstart. Palvelimia käynnistetään ja pysäytetään komentamalla forever start, forever stop, forever list, jne. Omasta mielestäni Foreverille ei ole tarvetta, kun Upstart on jo käytössä.
Foreman Foreman helpottaa sellaisten web-sovellusten käynnistämistä, jotka koostuvat useasta erilaisesta rinnakkaisesta palvelimesta. Procfile-tiedosto määrittelee, mitkä kaikki palvelinprosessit käynnistetään kerralla yhdellä "foreman start" -komennolla. Tämä helpottaa sovelluksen ajamista kehitysympäristössä yhdessä terminaalissa. Lisäksi Foreman integroituu Upstartiin niin, että Procfile voidaan konvertoida palvelimella Upstartin conf-tiedostoksi. Foreman on Ruby-gem ja alkujaan Rails-sovellusten ajamiseen suunniteltu.
Node Foreman Node Foreman on Node.js:lle tehty versio Foremanista. Se toimii pitkälti samalla tavalla kuin alkuperäinen Ruby-versiokin, mutta ei edellytä Rubyn ja Foreman-gemin asentamista. Lisäksi se tukee joitakin Node.js:n lisäominaisuuksia, kuten package.json-konfiguraatiota ilman erillistä Procfileä.

Mitä näistä itse käyttäisin

Paras yhdistelmä näyttäisi olevan Supervisor + Cluster + Node Foreman + Upstart:

  • Supervisor huolehtii kehityksen aikana siitä, että palvelin käynnistyy uudelleen lähdekoodia muokatessa.
  • Cluster hyödyntää tuotannossa useampaa CPU-ydintä.
  • Node Foreman käynnistää tarvittaessa useita erilaisia palvelinprosesseja rinnakkain ja generoi Upstart-konfiguraatiot automaattisesti Procfileistä.
  • Upstart pyörittää palvelimia Ubuntun käyttöjärjestelmätasolla ja käynnistää ne bootissa. Lisäksi respawn käynnistää tarvittaessa prosessit uudelleen siltä varalta, että Supervisor kaatuisi.

Jos jollain on kokemuksia tästä mallista tai paremmista ratkaisuista, niin olisi mielenkiintoista kuulla kommenteissa.