How do I run a Node.js application as its own process?
daemon, deployment, node.js, service
Solution
2016 answer: nearly every Linux distribution comes with systemd, which means forever, monit, PM2, etc. are no longer necessary - your OS already handles these tasks.
Make a `myapp.service` file (replacing 'myapp' with your app's name, obviously):
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
Note if you're new to Unix: `/var/www/myapp/app.js` should have `#!/usr/bin/env node` on the very first line and have the executable mode turned on `chmod +x myapp.js`.
Copy your service file into the `/etc/systemd/system` folder.
Tell systemd about the new service with `systemctl daemon-reload`.
Start it with `systemctl start myapp`.
Enable it to run on boot with `systemctl enable myapp`.
See logs with `journalctl -u myapp`
This is taken from How we deploy node apps on Linux, 2018 edition, which also includes commands to generate an AWS/DigitalOcean/Azure CloudConfig to build Linux/node servers (including the `.service` file).
Problem
What is the best way to deploy Node.js? I have a Dreamhost VPS (that's what they call a VM), and I have been able to install Node.js and set up a proxy. This works great as long as I keep the SSH connection that I started node with open.