单个VPS上的多节点应用的工业标准?

我有一个VPS,在逆向代理之后运行多个节点应用程序。 每个应用程序由不同的用户通过pm2运行(即每个用户自己运行pm2),应用程序特定的环境variables在该用户的.bashrc中设置。 代码更新通过git进行控制,所有更新后的逻辑移动到post-receive钩子。

现在这个configuration工作正常。 然而,我确实有一种唠叨的感觉,那就是有一种广为人知和被接受的解决scheme,我不知何故错过了 – 大多数在线指南要么假设一个用户使用pm2来运行多个应用程序,要么build议docker。

在单个服务器上运行多个节点应用程序是否有一种可接受的方式 – 即代码位置和版本控制,用户angular色,pipe理软件?

Docker是目前常用的解决scheme,但它并不适用于多用户环境。

你可以用Kubernetes或OpenShift这样的方式来扩展,但是对于一个小小的VPS来说,这可能太复杂了。

像pm2,supervisord,永远等恶心hackery是可用的,但系统很大程度上使他们过时了。

考虑转向系统用户服务 ,每个用户可以随意控制。 我用这个方法在NodeJS,Go和Ruby on Rails中运行服务。 它几乎适用于任何你能想到的事情。

一个简单的例子(这可能需要扩展):

$ 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 

用户可以在$HOME/.config/systemd/user放置一个用户单元,并且pipe理员可以在/etc/systemd/user放置所有用户都可以使用的用户单元(这很less见,但有时是有用的)。

然后,用户可以使用通常的systemd命令来pipe理服务,例如添加--user标志

 $ 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 

请注意,为了在启动时启动用户服务,root必须为该用户启用延迟。

 $ sudo loginctl enable-linger username