Norme indussortingelle pour les applications à plusieurs nœuds sur un VPS unique?

J'ai un VPS qui exécute plusieurs applications de nœud derrière un proxy inverse. Chaque application est exécutée via pm2 par un user différent (c'est-à-dire que chaque user exécute pm2 seul), les variables d'environnement spécifiques à l'application sont définies dans le file .bashrc de cet user. Les mises à jour de code sont contrôlées via git, toutes les logiques de post-mise à jour sont déplacées vers le crochet post-receive.

Cette configuration fonctionne bien, pour l'instant. Cependant, je ressens avec inquiétude qu'il existe une solution largement connue et acceptée que j'ai en quelque sorte manquée: la plupart des guides en ligne supposent qu'un user utilise pm2 pour exécuter plusieurs applications ou suggérer un docker.

Existe-t-il une manière acceptée d'exécuter plusieurs applications de nœud sur un seul server – c'est-à-dire l'location du code et le contrôle de la version, les rôles user, les logiciels de gestion?

Docker est la solution habituelle ces jours-ci, mais ce n'est pas bien adapté – à lui seul – à un environnement multi-users.

Vous pouvez progressivement augmenter – avec quelque chose comme Kubernetes ou OpenShift, mais pour un peu de VPS qui est probablement trop complexe.

Les horribles fourgonnettes comme pm2, superviseur, pour toujours, etc., sont utilisables, mais systématiquement les rendent obsolètes.

Envisagez de passer à des services users système , que chaque user peut contrôler à volonté. J'ai exécuté des services dans NodeJS, Go et Ruby on Rails avec cette méthode. Il est adapté pour pratiquement tout ce que vous pouvez penser.

Un exemple sortingvial (qui nécessitera probablement une extension):

$ 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 

Un user peut placer une unité user dans $HOME/.config/systemd/user , et l'administrateur peut placer des unités user utilisables par tous les users (ce qui est rare, mais parfois utile) dans /etc/systemd/user .

L'user peut ensuite gérer le service avec les commands systemd habituelles avec l'indicateur --user ajouté, par exemple

 $ 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 

Notez que pour que les services users puissent être démarrés au démarrage, la racine doit permettre de perdurer pour cet user.

 $ sudo loginctl enable-linger username