C'est une vieille question, mais elle est bien classée sur Google. Je ne peux presque pas croire aux réponses les plus votées, car l'exécution d'un processus node.js dans une session d'écran, avec &
ou même avec le nohup
drapeau - tous - sont juste des solutions de contournement.
Surtout la solution screen / tmux, qui devrait vraiment être considérée comme une solution amateur . Screen et Tmux ne sont pas destinés à maintenir le fonctionnement des processus, mais à multiplexer des sessions de terminal. C'est très bien, lorsque vous exécutez un script sur votre serveur et que vous souhaitez vous déconnecter. Mais pour un serveur node.js, vous ne voulez pas que votre processus soit attaché à une session de terminal. C'est trop fragile. Pour continuer à fonctionner, vous devez démonifier le processus!
Il existe de nombreux bons outils pour le faire.
PM2 : http://pm2.keymetrics.io/
# basic usage
$ npm install pm2 -g
$ pm2 start server.js
# you can even define how many processes you want in cluster mode:
$ pm2 start server.js -i 4
# you can start various processes, with complex startup settings
# using an ecosystem.json file (with env variables, custom args, etc):
$ pm2 start ecosystem.json
Un gros avantage que je vois en faveur de PM2 est qu'il peut générer le script de démarrage du système pour rendre le processus persistant entre les redémarrages:
$ pm2 startup [platform]
Où platform
peut être ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.
forever.js : https://github.com/foreverjs/forever
# basic usage
$ npm install forever -g
$ forever start app.js
# you can run from a json configuration as well, for
# more complex environments or multi-apps
$ forever start development.json
Scripts d'initialisation :
Je ne vais pas entrer dans les détails sur la façon d'écrire un script d'initialisation, car je ne suis pas un expert dans ce sujet et ce serait trop long pour cette réponse, mais en gros, ce sont de simples scripts shell, déclenchés par des événements du système d'exploitation. Vous pouvez en savoir plus à ce sujet ici
Docker :
Exécutez simplement votre serveur dans un conteneur Docker avec -d
option et, voilá , vous avez un serveur node.js démonisé!
Voici un exemple de Dockerfile (du guide officiel de node.js ):
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
Créez ensuite votre image et exécutez votre conteneur:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
J'espère que cela aidera quelqu'un à atterrir sur cette page. Utilisez toujours l'outil approprié pour le travail. Cela vous évitera beaucoup de maux de tête et au fil des heures!
exit
. Lorsque je ferme la fenêtre Putty, cela échoue.