单个 VPS 上多个节点应用程序的行业标准?

单个 VPS 上多个节点应用程序的行业标准?

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

目前,此配置运行良好。然而,我总有一种感觉,似乎有一个广为人知且被接受的解决方案,而我却不知为何错过了——大多数在线指南要么假设一个用户使用 pm2 来运行多个应用程序,要么建议使用 docker。

是否有一种在单个服务器上运行多个节点应用程序的可接受方法 - 例如代码位置和版本控制、用户角色、管理软件?

答案1

Docker 是目前常见的解决方案,但它本身并不适合多用户环境。

您可以使用 Kubernetes 或 OpenShift 之类的工具进行扩展,但对于小型 VPS 来说,这可能太复杂了。

像 pm2、supervisord、forever 等恶意黑客技术虽然可用,但 systemd 在很大程度上使它们过时了。

考虑迁移到systemd用户服务,每个用户可以随意控制。我用这种方法在 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,而管理员可以将所有用户可用的用户单元(这并不常见,但有时很有帮助)放置在 中/etc/systemd/user

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

$ 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 必须为该用户启用 linger。

$ sudo loginctl enable-linger username

相关内容