RHEL7: How to install a NodeJS service.

Share this link

Presentation

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js‘ package ecosystem, npm, is the largest ecosystem of open source libraries in the world (source NodeJS website).

Installation Procedure

There are several ways to install NodeJS (see the Digital Ocean tutorial in the links below). Here, only the binary installation will be presented.

To install the EPEL repository, type:

# yum install -y epel-release

To install the NodeJS software, type:

# yum install -y nodejs

The title of this tutorial is slightly misleading. NodeJS is not a service by itself: it’s an engine.
Also, there is no unit file after the installation, you only get the node engine binary (/usr/bin/node) and the npm JavaScript tool (/usr/bin/npm) used to install additional JavaScript libraries.
To get a real service, you will need to put together the node engine, your Javascript code and a unit file.

Configuration Procedure

In this tutorial, it will be assumed that the JavaScript code is located in the /opt/nodejs directory and start with the main.js script.

Create the nodejs user & group:

# adduser -r nodejs

Note: The -r option normally adds system user & group with uid/gid<1000 and doesn’t create any home directory.

Configure the permissions:

# chown -R nodejs:nodejs /opt/nodejs

Create the /etc/systemd/system/nodejs.service unit file and paste the following lines into:

[Unit]
Description=My NodeJS Service
After=syslog.target network.target

[Service]
EnvironmentFile=/etc/default/nodejs
User=nodejs
Group=nodejs
WorkingDirectory=/opt/nodejs
ExecStart=/bin/node main.js
Restart=on-failure
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Note1: According to this article, the NodeJS process when stopped exits with the code 143 when the default signal handler hasn’t been overriden (SuccessExitStatus=143). This is the “normal” behavior.
Note2: Remember that the code is in the /opt/nodejs directory (WorkingDirectory=/opt/nodejs) and start with the main.js script (ExecStart=/bin/node main.js).

Create the /etc/default/nodejs environment file and paste the following line into:

NODE_ENV=production
PORT=80

Note: Your NodeJS service certainly requires other environment variables. Write them into this same file.

Start and enable at boot the NodeJS service:

# systemctl start nodejs && systemctl enable nodejs

Add a rule to the firewall:

# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

Additional Resources

The Digital Ocean website offers a tutorial on How to install Node.js on a CentOS 7 server.
Andrew Voce provides a tutorial on How to protect a NodeJS service behind a Nginx reverse proxy for better security.
The Nginx website provides some tips to increase NodeJS application performances.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

RHCSA7: Task of the day

Allowed time: 3 minutes.
Check that you've got no SELinux policy violations.

RHCE7: Task of the day

Allowed time: 15 minutes.
Configure a httpd server with a password protected directory under the /var/www/html/private directory.

Poll for favorite RHEL 7 book

What is your favorite RHEL 7 book to prepare RHCSA & RHCE exams?

View Results

Loading ... Loading ...

Poll for most difficult RHCSA 7 topic

What do you think is the most difficult RHCSA 7 topic?

View Results

Loading ... Loading ...

Poll for most difficult RHCE 7 topic

What do you think is the most difficult RHCE 7 topic?

View Results

Loading ... Loading ...