Traditional Linux/Unix server application deployment uses an init script to manage background processes. They are to start every time the system boots and cleanly shut down when the system is halted. While it's a simple model, the specifics of this vary widely from one operating system (OS) to another.
A common method is for the init process to manage background processes using shell scripts in the /etc/init.d directory. Other OSes use other process managers, such as upstart or launchd.
The Node.js project itself does not include any scripts to manage server processes on any OS. Node.js is more like a construction kit, with the pieces and parts to build servers, and is not a complete polished server framework itself. Implementing a complete web service based on Node.js means creating the scripting to integrate with process management on your OS. It's up to us to develop those scripts.
Web services have to be:
- Reliable: For example, to auto-restart when the server process crashes
- Manageable: Meaning it integrates well with system management practices
- Observable: Meaning the administrator must be able to get status and activity information from the service
To demonstrate what's involved, let's use PM2 to implement background server process management for Notes. PM2 detects the system type and can automatically integrate itself with the process management system. It will create an LSB-style init script (http://wiki.debian.org/LSBInitScripts), or other scripts, as required by the process management system on your server.
For this deployment, we'll set up a single Ubuntu 17.10 server. You should provision a Virtual Private Server (VPS) from a hosting provider and do all installation and configuration there. Renting a small machine instance from one of the major providers for the time needed to go through this chapter will only cost a couple of dollars.
You can also do the tasks in this section using VirtualBox on your laptop. Simply install Debian or Ubuntu as a virtual machine in VirtualBox, then follow the instructions in this section. It won't be quite the same as using a remote VPS hosting provider, but does not require renting a server.
Both the Notes and user authentication services will be on that server, along with a single MySQL instance. While our goal is a strong separation between FrontNet and AuthNet, with two MySQL instances, we won't do so at this time.