Padrão industrial para aplicativos de vários nós em um único VPS?

2

Eu tenho um VPS que executa vários aplicativos de nó por trás de um proxy reverso. Cada aplicativo é executado via pm2 por um usuário diferente (ou seja, cada usuário executa o pm2 por conta própria), variáveis de ambiente específicas do aplicativo são definidas no .bashrc desse usuário. As atualizações de código são controladas via git, toda a lógica pós-atualização é movida para o gancho pós-recebimento.

Esta configuração funciona bem, por enquanto. No entanto, tenho uma sensação incômoda de que existe uma solução amplamente conhecida e aceita que, de alguma forma, perdi - a maioria dos guias on-line supõe que um usuário usa o pm2 para executar vários aplicativos ou sugere o docker.

Existe uma maneira aceita de executar vários aplicativos de nó em um único servidor - ou seja, localização de código e controle de versão, funções de usuário, software de gerenciamento?

    
por monday 28.07.2016 / 10:41

1 resposta

2

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 do systemd , que cada usuário pode controlar à vontade. Eu executei serviços no NodeJS, Go e Ruby on Rails com este método. É adequado para praticamente qualquer coisa que você possa imaginar.

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
    
por 28.07.2016 / 11:23