====== Install Node.js on Ubuntu 18.04 ======
===== Introduction =====
* 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, perfect for data-intensive real-time applications that run across distributed devices.
* RADIUSdesk uses Node.js because of its support for Websocket. Websocket is a technology that is supported by the latest versions of all the major browsers which allow you to display data in real-time.
* We will make use of Socket.IO as a wrapper to Websocket which runs on Node.js to read FreeRADIUS log file and debug output of FreeRADIUS in real-time.
* To Summarize: Node.js → Websocket → Soket.IO → Client.
===== Install Node.js and dependencies =====
* Install the latest Node.js. This package will also include the npm package manager for Node.js.
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
* We need to install the following Node.js packages globally.
* Note that we are using an older version of socket.io (0.9.x) instead of the latest 1.x.
* Also note that there might be some warings during the install of these packages. Thats normal.
sudo npm -g install tail
sudo npm -g install socket.io@0.9.x
sudo npm -g install connect
sudo npm -g install mysql
sudo npm -g install forever
===== Add start-up script =====
* Everything is now installed that we will need to enable us to serve the FreeRADIUS log file in real-time using Node.js, Websocket and Socet.IO.
* We need to install a start-up file, start the Node.js server up and confirm that it works.
* The sample start-up script is found under ///usr/share/nginx/html/cake2/rd_cake/Setup/Node.js///.
#The systemd startup file
sudo cp /usr/share/nginx/html/cake2/rd_cake/Setup/Node.js/nodejs-socket-io.service /lib/systemd/system/
# add a sym link to node
sudo ln -s /usr/bin/nodejs /usr/bin/node
#Enable it
sudo systemctl enable nodejs-socket-io.service
#Start it
sudo systemctl start nodejs-socket-io.service
===== Test the Node.js server =====
* Confirm that it is running on port 8000 by requesting the client side Socket.io library.
* Confirm it is running by checking the log file output:
sudo cat /var/log/nodejs-socket-io.log
#Result in....
info: socket.io started
Up and running on port 8000
* Request the following URL and ensure that you are served with some JavaScript. (Replace the IP Address to that of the RADIUSdesk server) http://127.0.0.1:8000/socket.io/socket.io.js
===== Things to remember about Websocket =====
* Websocket is not supported in IE version 9 and below.
* Remember that this is running on port 8000 and some firewalls may block it.
* You are welcome to alter the port on which Node.js serve by editing the ///rd_cake/Setup/Node.js/Logfile.node.js// file.
* The start-up script calls //Logfile.node.js// during start-up. Depending on the web server you run; the absolute path of this script will change accordingly. Be sure to update this script as well if you change servers (Nginx VS Apache).
* Although this Node.js server serves the FreeRADIUS log file; it will only be visible if the requester provides the token belonging to root. All other users will not be allowed to see this log file through the Node.js server.
===== Next steps =====
* If you are simply looking for a RADIUS server; you are done.
* If you are deploying CoovaChilli Captive Portals or Mikrotik Hotspots you must try the [[ Getting Started:18_install_ubuntu_dynamic_login|Dynamic Login Pages ]](optional but recommended).
* If your server has two network cards and you want to install CoovaChilli on it as a captive portal; follow these instructions:
* [[getting_started:18_install_ubuntu_coovachilli | Install CoovaChilli ]] (optional).