Node.js
Node.js is a cross platform, open source, javascript server environment.
This guide will walk through installing Node.js behind nginx and using Monit to keep Node instances alive. Since Node.js is a single-process application, the goal is to launch multiple instances of the application and load balance using nginx.
Installation
USE flags
USE flags for net-libs/nodejs A JavaScript runtime built on Chrome's V8 JavaScript engine
corepack
|
Enable the experimental corepack package management tool |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
icu
|
Enable ICU (Internationalization Components for Unicode) support, using dev-libs/icu |
inspector
|
Enable V8 inspector |
lto
|
Build with link-time optimisation |
npm
|
Enable NPM package manager |
pax-kernel
|
Enable building under a PaX enabled kernel |
snapshot
|
Enable snapshot creation for faster startup |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
system-icu
|
Use system dev-libs/icu instead of the bundled version |
system-ssl
|
Use system OpenSSL instead of the bundled one |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
npm
Node.js has a USE flag to include npm, the Node.js package manager. npm is necessary to install a Node.js application's dependencies, which are defined in a file named package.json. The USE can be disabled if npm is not necessary locally, or prefer to only install an alternative, for example, sys-apps/yarn.
Web application daemons with nginx and monit
Packages
Node.js typically responds directly to HTTP requests by running a server. Node.js works best with multiple instances running behind a load-balancing gateway, such as nginx.
Use app-admin/monit for spawning Node.js servers.
root #
emerge --ask monit nginx nodejs
Configure Monit
/etc/monit.d/my-app
Auto restart NodeJS Appcheck process mysql with pidfile /var/run/my-app/mysqld.pid
start program = "/bin/bash -c 'rc-service mysql start'"
stop program = "/bin/bash -c 'rc-service mysql stop'"
Configure Nginx
/etc/nginx/nginx.conf
Nginx Confighttp {
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
Web application with openrc runscript
/etc/init.d/nodejs-server
Sample init.d file for a Node.js daemon#!/sbin/openrc-run
user="nobody"
group="nobody"
command="/usr/bin/node"
directory="/opt/${RC_SVCNAME}"
command_args="httpd.js"
command_user="${user}:${group}"
command_background="yes"
pidfile="/run/${RC_SVCNAME}.pid"
output_log="/var/log/${RC_SVCNAME}.log"
error_log="${output_log}"
depend() {
use net
}