Spuštění Node Apps s Forever

Úvod

Pro mnoho lidí je skutečné spuštění kódu v produkčním prostředí dodatečným nápadem a právě psaní kódu je místo, kde je skutečný problém. I když to podle mých zkušeností většinou platí, nalezení spolehlivého a snadného způsobu spuštění aplikace může být samo o sobě docela obtížné.

Při spouštění aplikací je třeba zvážit několik věcí.

  • Kam půjdou výstupy/protokoly?
  • Co se stane, když aplikace selže?
  • Jak mohu sledovat všechny procesy démona?
  • Jak poskytnu konfigurace pro každý proces?

Zde je uzel forever balíček je opravdu užitečný. Pomůže vám snadno zvládnout všechny výše uvedené problémy a další, které popíšu v několika následujících částech.

Co je to navždy?

forever je nástroj příkazového řádku pro aplikace Node napsaný výhradně v JavaScriptu. Účelem je zjednodušit váš život v produkčním prostředí správou (spouštění, zastavování, restartování atd.) procesů uzlů a jejich konfigurací. Můžete jej použít na příkazovém řádku nebo programově (přes forever-monitor ) v kódu uzlu.

Tyto konfigurace můžete zadat pomocí příkazového řádku nebo konfiguračního souboru JSON. Osobně preferuji soubor JSON, protože můžete nakonfigurovat více procesů Node v jednom souboru, což usnadňuje spouštění všech vašich procesů najednou. Tímto způsobem neváhám rozdělit velký monolit na více nezávislých služeb, protože jejich správa bude mnohem jednodušší díky utilitám jako forever .

Funguje to tak, že běží server Flatiron jako proces démona pro správu vašich dalších procesů démona, takže pokud/když váš kód selže a zhroutí, forever bude tam, aby jej automaticky restartoval a doufejme, že zabráníte prostojům vašich uživatelů. Spuštěn forever se serverem Flatiron je snadný způsob, jak udržet utilitu v provozu a zároveň sledovat vstup uživatele, a díky pluginu CLI to bylo snadné pro forever vývojáři dělat. Pokud se chystáte vytvořit program jako forever (tj. dlouhotrvající proces démona, který přijímá uživatelské příkazy), pak bych velmi doporučil, abyste to udělali tímto způsobem. Všechno to hodně zjednoduší.

Komunikace mezi procesy probíhá přes sokety, o které se stará vysokoúrovňový nssocket knihovna. Soubory soketů, které umožňují opětovné otevření komunikace mezi procesy, se nacházejí v [forever.root]/socks . Přirozeně jsou zprávy mezi procesy serializovány jako JSON. Je to další užitečná knihovna, kterou si můžete vyzkoušet, pokud někdy budete chtít komunikaci soketu založenou na událostech.

Měl bych poznamenat jednu důležitou vlastnost o forever (a další nástroje pro správu procesů jemu podobné) spočívá v tom, že jej můžete použít i pro aplikace mimo uzly, jako je Python, Ruby atd. -c , nebo příkazový příznak (který uvidíte později), řekněme forever jak spustit aplikaci. Pomocí tohoto mu můžete říci, aby pro spuštění použil jakýkoli jiný interpret, jako je Python:

$ forever start -c python py_script.py

Takže i když se vám Node nelíbí nebo jen potřebujete pro projekt použít jiný jazyk, mějte na paměti, že je to pro vás stále užitečné.

Jak používat Forever

Ok, přejdeme k důležité části, jak tu zatracenou věc skutečně používat. Začněme jednoduchým příkladem, jako je spouštění a zastavování webové aplikace. V našem příkladu budeme spouštět a zastavovat expresní server "hello world":

// index.js

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(8080);

Nainstalujte forever s npm install forever -g a spusťte server pomocí:

$ forever start -a index.js

Tím se spustí aplikace Express jako proces na pozadí. -a flag připojí protokoly k výchozímu souboru protokolu umístěnému v forever kořenový adresář (~/.forever ve výchozím nastavení na systémech Unix). Nebudete moci start aplikaci bez tohoto příznaku, pokud soubor protokolu již existuje.

Zkontrolujte běžící proces pomocí forever list :

info:    Forever processes running
data:        uid  command                                         script   forever pid   id logfile                        uptime      
data:    [0] moMB /Users/scott/.nvm/versions/node/v4.1.2/bin/node index.js 21389   21390    /Users/scott/.forever/moMB.log 0:0:0:3.345

Chcete-li proces zastavit, stačí na něj odkazovat pomocí id (21390 ), uid (moMB ), pid (21389 ), index (0 ), nebo název skriptu (index.js ):

$ forever stop index.js

I když je to hezké, mohlo by to být lepší. index.js není pro naši aplikaci příliš unikátní a PID je těžké si zapamatovat, tak proč mu dávat lepší jméno? Tímto způsobem nemusíte stále spouštět forever list abyste získali informace o běžícím procesu.

$ forever start -a --uid myapp index.js

Nyní to můžete zastavit pomocí:

$ forever stop myapp

Dva argumenty na příkazovém řádku nejsou tak špatné, ale může to být trochu moc, když začnete přidávat argumenty pro soubory protokolu, různé spustitelné soubory Node, pracovní adresáře a další. Takže místo zadávání všeho na příkazovém řádku můžete použít konfigurační soubor JSON takto:

Zdarma e-kniha:Git Essentials

Prohlédněte si našeho praktického průvodce učením Git s osvědčenými postupy, průmyslově uznávanými standardy a přiloženým cheat sheetem. Přestaňte používat příkazy Google Git a skutečně se naučte to!

{
    // Comments are allowed!
    "uid": "myapp",
    "append": true,
    "watch": true,
    "script": "index.js",
    "sourceDir": "/home/scott/myapp",
    "command": /Users/scott/.nvm/versions/node/v4.1.2/bin/node
}

Za předpokladu, že tento soubor je ve vašem aktuálním pracovním adresáři a má název forever.json , použijte jej takto:

$ forever start ./forever.json

Jak vidíte, můžete dokonce říct forever jakou verzi Node použít, což je opravdu výhodné, když máte na jednom serveru více aplikací, které vyžadují různé verze (například větev io.js).

[
  {
    // App using Node v0.11.8
    "uid": "myapp1",
    "append": true,
    "watch": true,
    "script": "index.js",
    "sourceDir": "/Users/scott/myapp1",
    "command": "/Users/scott/.nvm/versions/node/v0.11.8/bin/node"
  },
  {
    // App using io.js
    "uid": "myapp2",
    "append": true,
    "watch": true,
    "script": "index.js",
    "sourceDir": "/Users/scott/myapp2",
    "command": "/Users/scott/.nvm/versions/io.js/v2.2.1/bin/node",
    "args": ["--port", "8080"]
  }
]

Závěr

Existuje několik nástrojů, které vám pomohou spouštět aplikace Node, zejména forever a pm2 . Zkoušel jsem obojí a myslel jsem forever použití bylo o něco snazší (většinou jen proto, že je jednodušší a má méně funkcí/možností, o které se musíte starat), zatímco pm2 je silnější. Pokud jste opravdu ambiciózní, můžete vyzkoušet pm2 clusterový režim nebo rozhraní API, které vám pomůže sledovat metriky vaší spuštěné aplikace.

Jaké další zajímavé konfigurace a využití máte pro nástroje řízení procesů, jako je forever ? Dejte nám vědět v komentářích!