====== 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).