» »

PM2 (Node.js Process Manager) in uporabniki

PM2 (Node.js Process Manager) in uporabniki

dunda ::

Na Ubuntu strežniku bo tekla Node.js aplikacija. Za njen zagon bo skrbel PM2, tukaj pa se pojavlja vprašanje.
PM2 svoje stvari (morda nekoliko nesrečno) shranjuje v ~/.pm2
Ker za sistemske stvari skrbi Janez, je se torej zadeva shrani v /home/janez/.pm2
Mimogrede, če Janez pri zagonu uporabi SUDO, se nič ne spremeni glede te lokacije, le sama aplikacija teče kot ROOT.

Sedaj pa nastopita Polde in Lojze, ki sta razvijalca in se jima pogosto pojavi potreba, da restartata aplikacijo v omenjenem PM2. Ampak - ker je zadevo pognal administrator Janez, Polde in Lojze ne vidita enakega seznama.
Ima kdo izkušnje, kako je to najbolje rešiti?
Morda narediti novega uporabnika za PM2, ki ga potem vsi uporabljajo za nadzor/zagon PM2 aplikacij?
Teoretično bi lahko zadevo poganjali (pač po prijavi) kot ROOT, vendar se poskušamo temu izogniti.
https://www.kacnje.eu

cesnja ::

Priporocal bi (vsaj kvazi) CD pipeline, ki priblizno prepreci potrebo po rocnem upravljanju z aplikacijo na strezniku. Za poenostavitev samega deploya se na takem nivoju pogosto uporablja Docker.

dunda ::

Tnx.
Dockerja (v razvojni fazi) ni predvidenega, verjetno pa še pride na vrsto.
Tudi CD pipeline je za sedaj še vedno "overkill". Gre za zgodnjo fazo razvoja, ampak tisto zgoraj navedeno pa naj moti.
https://www.kacnje.eu

c3p0 ::

App zaganjat kot root je big no-no, razvoj gor ali dol. Najlažje bo, če bodo vsi isti user. Docker pa tudi reši problem.

dunda ::

Ja, zagotovo. Zato tega ne bi počeli.
https://www.kacnje.eu

HotBurek ::

Ne vem, če čisto reši, je pa ena izmed opciji.

V folder /etc/systemd/system se kreira file (npr. nodejs.service), ki poganja JS kodo kot service. Tole je primerćić:

[Unit]
Description=Node.js Hello World Http Server
[Service]
PIDFile=/tmp/nodejs-99.pid
#User=<Your Username>
#Group=<Your User Group>
Restart=always
KillSignal=SIGQUIT
WorkingDirectory=/var/nodejs/
ExecStart=/usr/bin/node /var/nodejs/hello.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodejs
[Install]
WantedBy=multi-user.target


V /var/nodejs/hello.js sem pa imel tole (testiral Varnish cache):

var http = require("http");

http.createServer(function (req, res) {

	res.writeHead(200, {"Content-Type": "text/html"});

	var date = new Date(Date.now());

	res.write("<!DOCTYPE html>");
	res.write("<html lang=\"en\">");
	res.write("<head>");
	res.write("<meta charset=\"utf-8\">")
	res.write("</head>");
	res.write("<body>");
	res.write("Hello World from NodeJS...");
	res.write("<br>");
	res.write("time=" + String(date));
	res.write("</body>");
	res.write("</html>");
	res.end("");

	console.log("Request: " + String(date));

}).listen(8081, "127.0.0.1");

//console.log("Server running at http://127.0.0.1:8081/");


Za dostop do Node.js serverja sem uporabil Nginx, ki je dostopen na public, in dela proxy requeste na lokalni Node.js server. Sample nginx config:

location / {
		proxy_pass http://127.0.0.1:8081/;
		proxy_redirect off;
		proxy_http_version 1.1;
		proxy_buffering off;

		proxy_hide_header via;

		#set_real_ip_from 127.0.0.1;
		#real_ip_header X-Forwarded-For;
		#real_ip_recursive on;

		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		#proxy_set_header X-Forwarded-Host $host;
		#proxy_set_header X-Forwarded-Proto $scheme;
        }


Pa še za iptables, če uporabljaš, je potrebno odpret port:

-A INPUT -i lo -p tcp -m tcp --dport 8081 -j ACCEPT
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

dunda ::

Ja, tole je po svoje zanimivo, ker se človek reši PM2 (ki pa ima nekaj zanimivih funkcionalnosti).
Ja nič, v nekaj bo treba zagristi :-)
https://www.kacnje.eu


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Apache in Node.JS

Oddelek: Izdelava spletišč
91946 (1632) dunda
»

Dva http serverja (prot 80) na ist router

Oddelek: Izdelava spletišč
81423 (1002) Stari89
»

1 IP več Strežnikov

Oddelek: Pomoč in nasveti
242408 (1859) Mesar
»

[js] json kompresija

Oddelek: Programiranje
223758 (3107) infiniteLoop
»

nginx proxy pokvari delovanje joomla strani

Oddelek: Izdelava spletišč
5994 (939) Lonsarg

Več podobnih tem