Table of Contents
- Create swap partition
- Install Yarn
- Install your Node.js application
- Install Process Manager 2
- Add your application as a process
- Automatically start your application on boot
- Deploying new versions of the application
- Example usage
Node.js applications are popular for their ability to scale. Running multiple concurrent processes on multiple servers yields lower latency and greater uptime. When managing multiple servers, it is easiest to have Node.js applications automatically restart if they crash. This tutorial will show you how to quickly set up application persistence from a blank Ubuntu 16.04 instance.
- Create An ITWeb.Services instance of any size with Ubuntu 16.04 LTS x64.
- If you are not the root user, run
sudo -sand type in your password. Root access is required to modify the startup file so that the process manager starts on boot.
- Make sure Node.js is installed on the instance, and that the version of Node.js is 8.9.3 LTS or later, which is required for the persistence manager to run smoothly. Use
node -vto check the version installed. If Node.js is not on the correct version, the following commands will install it.
$ sudo apt-get update $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - $ sudo apt-get install -y nodejs
Create swap partition
https://www.itweb.services/tutorials/linux-guides/setup-swap-file-on-linux”>swap partition would be beneficial to performance. For an automated version of the swap tutorial, use the commands below.
$ git clone https://github.com/teamtofu/server-tools.git tools $ bash ./tools/swap.sh
Generally speaking, using swap would not be necessary for instances with 4 GB of RAM or more when setting up persistent applications, although it may improve the applications’ performance. RAM is more responsive than swap, so instances with more RAM will tend yield better results regardless of swap.
Yarn is an easy to use package manager from Facebook for Node.js packages. It is faster than NPM and also deterministic, which is especially useful when deploying multiple servers.
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list $ sudo apt-get update && sudo apt-get install yarn
However, NPM can be used instead of Yarn, and it has comparable commands to all of those in this tutorial.
Install your Node.js application
If your application is hosted in a git repository, clone it and use
yarn install. Your application should have a server entry file, usually
index.js, which will be used in the next steps.
Install Process Manager 2
Process Manager 2 is the package which will auto-restart the application. Process Manager 2 is very popular, and it is used by Microsoft, PayPal, and Intuit, so it is secure and reliable.
$ yarn global add pm2
Add your application as a process
The application will be daemonized (run in the background) and auto-restarted with the start command.
$ pm2 start [path to your entry.js] -i max
If you want to launch the maximum number of processes automatically, pass the
-i max argument. If the sole use of this IT Web Services instance is to serve the application, then this is recommended. For IT Web Services instances with more than one CPU, multiple processes will be launched, and Process Manager 2 will act as the load balancer for all of these individual processes.
Automatically start your application on boot
After starting the app, save the application’s configuration. Then, run the startup command to automatically run Process Manager 2 in the background when Ubuntu boots up. For Ubuntu 16.04, Process Manager 2 will bind to
$ pm2 save $ pm2 startup
Now if your Node.js application crashes due to an error it will restart, and if Ubuntu crashes for any reason, the process will automatically restart with Ubuntu. The processes can be restarted with
pm2 gracefulReload all and Process Manager 2 can be restarted with
pm2 update. To stop Process Manager 2 from starting on boot, run
reboot and checking to see if your application is served after Ubuntu boots up. If the application is for the web and served over port
curl http://localhost/ will show the HTML for the starting page. In the case that it does not work, the command
pm2 status will show the running processes, and the start command can be reissued.
Deploying new versions of the application
If the application is updated, such as by pulling a git repository, then a command must be issued to update the running application processes.
$ pm2 update
Parse Server, a popular open-source platform as a service, serves as a backend for an application. The backend may crash due to errors in code or volume of requests, but the application will experience no downtime because the other servers (and/or processes) continue to run, and the Parse Server process is quickly restarted.
Do you need help setting up this on your own service?
Please contact us and we’ll provide you the best possible quote!