Zápisník experimentátora
Hierarchy: Node.js
V tomto článku si ukážeme, jak nainstalovat Node.js aplikaci do Windows jako službu. To zajistí, že po zapnutí počítače bude aplikace spuštěna. Tento postup využívá balíček PM2.
Ze stránky https://nodejs.org/ si stáhněte instalační program. Máte na výběr několik možností. Za běžných okolností se snažte instalovat tu verzi, při které vidíte upozornění Recommended For Most Users.
PM2 (https://pm2.keymetrics.io/) je proces manažer pro programy napsané v Node.js.
Při instalaci ve Windows je důležité nejprve nastavit proměnnou prostředí PM2_HOME do takového adresáře, který je viditelný pro všechny procesy. Je vhodné použít takový adresář, který se při správě automaticky spuštěných aplikací bude dobře hledat. Například pokud máte aplikaci apx nainstalovanou v d:\app\apx
, nastavit tuto proměnnou na adresář d:\app\pm2
. Nezapomeňte tento adresář vytvořit na disku.
Nastavování proměnné se bude lišit podle verze Windows na serveru. Zde je několik možných příkladů.
Spusťte si cmd.exe
ako admin.
npm install pm2 -g
pm2 install pm2-logrotate
Po instalaci uvidíte v příkazovém řádku toto. Je spuštěn modul pm2-logrotate a seznam aplikací je prázdný.
V adresáři PM2_HOME
vzniklo několik souborů. V souboru pm2.log najdete doplňující informace o startu. Když do PM2 přidáte nějaké aplikace, jejich seznam i s nastavením prostředí se zapíše do souboru dump.pm2. V adresáři logs
se budou objevovat logy. Pokud vznikne nějaký problém, pak určitě zkontrolujte obsah tohoto adresáře.
V této chvíli máme nainstalované vše potřebné k používání PM2. Po restartu počítače se ale PM2 automaticky nenastartuje. Je třeba ještě doplnit Windows službu, která ho spustí při startu.
Oficiální dokumentace je v tomto bodě velmi stručná a nedočtete se v ní aktuální informace. Doporučený balíček je pm2-windows-service. Ten ale není dlouhodobě udržován a proto je třeba místo něj použít @innomizetech/pm2-windows-service. Původní balíček obsahuje odkazy na zastaralé balíčky a během instalace na novějších Windows se zasekne.
Program pm2-service-install se bude ptát několik otázek. Na všechny odpovídejte ne. Program to sice doporučuje, ale na správný běh vám stačí pouze nastavení proměnné PM2_HOME. To nastavení proměnných totiž ovlivňuje spouštění aplikací přes PM2 a je lepší všechny aplikace ovládat jen přes PM2. Během instalace se zobrazí i poměrně dlouhá cesta do adresáře. Je dobré, pokud si ji zapamatujete, protože v tom adresáři najdete další log, který obsahuje informace o tom, jak se služba Windows spustila. Obvykle ho nebudete potřebovat, ale někdy se stane, že se Windows restartují, případně si vynucují pouze restart služeb a pokud máte v aplikacích chyby a nejsou dobře navrženy pro zpracování restartů, pak můžete v tomto logu nalézt užitečné informace o restartech.
npm i @innomizetech/pm2-windows-service -g
pm2-service-install
Nyní máte systém připraven tak, aby se i po restartu Windows Node.js aplikace spustila. Jednotlivé aplikace je vhodné do PM2 přidávat pomocí vygenerovaného souboru ecosystem.config.js. V tomto souboru si nastavíte všechny parametry pro aplikaci, které potřebujete. V adresáři, kde máte aplikaci nainstalovanou, si ji do PM2 přidáte příkazem.
pm2 start ecosystem.config.js
pm2 save
Příklad souboru, který používám na to, aby se aplikace sama restartovala při změnách, ignorovala změny v některých adresářích a nespouštěla se jako šílená v případě chyby je v následující ukázce.
module.exports = {
apps: [{
name: 'optivusapi',
script: './bin/www',
watch: true,
watch_delay: 30000,
ignore_watch: ["node_modules", "logs", "log"],
restart_delay: 6000,
max_memory_restart: '300M',
env: {
NODE_ENV: 'production'
}
}]
};
03.04.2020