O Docker é a solução usual atualmente, mas não é adequado - por conta própria - para um ambiente multiusuário.
Você pode aumentar de tamanho - com algo como o Kubernetes ou o OpenShift, mas para um pequeno VPS que provavelmente é muito complexo.
Whuckery desagradável como pm2, supervisord, para sempre, etc., são utilizáveis, mas em grande parte os tornam obsoletos.
Considere a mudança para serviços
Um exemplo trivial (que provavelmente exigirá expansão):
$ cat $HOME/.config/systemd/user/nodejs-against-humanity.service
[Unit]
Description=NodeJS Against Humanity
[Service]
ExecStart=/home/error/nodejs-against-humanity/server.js
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/home/error/nodejs-against-humanity
[Install]
WantedBy=default.target
Um usuário pode colocar uma unidade de usuário em $HOME/.config/systemd/user
e o administrador pode colocar unidades de usuário que podem ser usadas por todos os usuários (o que é incomum, mas às vezes útil) em /etc/systemd/user
.
O usuário pode, então, gerenciar o serviço com os comandos usuais do systemd com o sinalizador --user
adicionado, por exemplo,
$ systemctl --user enable nodejs-against-humanity
Created symlink from /home/error/.config/systemd/user/default.target.wants/nodejs-against-humanity.service to /home/error/.config/systemd/user/nodejs-against-humanity.service.
$ systemctl --user start nodejs-against-humanity
Observe que, para que os serviços do usuário sejam iniciados na inicialização, o root deve ativar o linger para esse usuário.
$ sudo loginctl enable-linger username