NodeJS
Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Node Repo
You can install the latest versions of node direct from their repository.
See this page for to help add the repos to SME: https://wiki.contribs.org/Extrarepositories
yum install smeserver-extrarepositories-node signal-event yum-modify config set UnsavedChanges no
This will add a set of Node repos to your yum_repositories database. Node v4-v11
You can now install a version of node from the repo eg:
yum --enablerepo=node8 install nodejs8.9.4
yum --enablerepo=node11 install nodejs11.8.0
Remember that this installs the base RPM but you can switch versions using the 'n' version manager
npm install -g n
For help:
n -h
For available versions: n ls
Test
node -v
Port Redirect for each application
Each Node application you build must run on a different port. This can be configured in app.js
If you want to redirect an external URL to the app port using a reverse proxy you can do the following
a) create that external domain on SME web interface for domain as www.your.externaldomain.tld
b) create a new variable (NodePort) to specify that port
db domains setprop www.your.externadomain.tld NodePort 3003
c) use a custom fragment template file /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/VirtualHosts/27ProxyNodeJS with:
{ use esmith::DomainsDB; my $domains = esmith::DomainsDB->open_ro; my $nodeport = $domains->get_prop($virtualHost, "NodePort") || "disabled"; return " # skipping NodeJS redirect - no NodePort parameter\n" unless not $nodeport eq "disabled"; $OUT .= " # NodeJS port redirect\n" unless $nodeport eq 'disabled'; $OUT .= " ProxyPreserveHost On\n" unless $nodeport eq 'disabled'; $OUT .= " ProxyRequests Off\n" unless $nodeport eq 'disabled'; $OUT .= " ProxyPass / http://localhost:$nodeport/\n" unless $nodeport eq 'disabled'; $OUT .= " ProxyPassReverse / http://localhost:$nodeport/\n" unless $nodeport eq 'disabled'; }
Now just expand templates and restart
expand-template /etc/httpd/conf/httpd.conf /etc/init.d/httpd-e-smith restart
You should be able to access your app externally using http://www.your.externaldomain.tld
It's possible to access using SME with one LetsEncrypt certificate by directory/port