Vps

單個 VPS 上的多個節點應用程序的工業標準?

  • July 28, 2016

我有一個在反向代理後面執行多個節點應用程序的 VPS。每個應用程序由不同的使用者通過 pm2 執行(即每個使用者自己執行 pm2),應用程序特定的環境變數在該使用者的 .bashrc 中設置。程式碼更新是通過 git 控制的,所有更新後的邏輯都移動到 post-receive 掛鉤。

目前,此配置工作正常。然而,我確實有一種揮之不去的感覺,即我不知何故錯過了一個廣為人知和接受的解決方案——大多數線上指南要麼假設一個使用者使用 pm2 執行多個應用程序,要麼建議使用 docker。

是否有在單個伺服器上執行多個節點應用程序的可接受方式 - 即程式碼位置和版本控制、使用者角色、管理軟體?

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

引用自:https://serverfault.com/questions/792418