Quel est le meilleur moyen de déployer Node.js?
J'ai un VPS Dreamhost (c'est ce qu'ils appellent un VM ), et j'ai pu installer Node.js et configurer un proxy. Cela fonctionne très bien tant que je garde la connexion SSH avec laquelle j'ai démarré le noeud avec open.
2016 answer : presque toutes les distributions Linux sont livrées avec systemd, ce qui signifie pour toujours, monit, PM2, etc. ne sont pas plus nécessaire - votre système d'exploitation gère déjà ces tâches .
Créez un fichier myapp.service
(En remplaçant évidemment "myapp" par le nom de votre application):
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
Notez si vous êtes nouveau sur Unix: /var/www/myapp/app.js
Devrait avoir #!/usr/bin/env node
Sur la toute première ligne.
Copiez votre fichier de service dans le dossier /etc/systemd/system
.
Parlez à Systemd du nouveau service avec systemctl daemon-reload
.
Commencez avec systemctl start myapp
.
Activez-le au démarrage avec systemctl enable myapp
.
Voir les journaux avec journalctl -u myapp
Cela provient de Comment nous déployons les applications de nœud sur Linux, édition 2018, qui inclut également des commandes permettant de générer un AWS/DigitalOcean./Azure CloudConfig pour créer des serveurs Linux/nœud (y compris le fichier .service
).
Utilisez Forever . Il exécute les programmes Node.js dans des processus distincts et les redémarre le cas échéant.
Usage:
forever start example.js
pour démarrer un processus.forever list
pour voir la liste de tous les processus lancés depuis toujoursforever stop example.js
pour arrêter le processus, ou forever stop 0
pour arrêter le processus avec l'index 0 (comme indiqué par forever list
).J'ai écrit à propos de ma méthode de déploiement ici: Déploiement d'applications node.js
En bref:
pm2 fait les astuces.
Les fonctions sont les suivantes: surveillance, rechargement de code à chaud, équilibreur de charge intégré, script de démarrage automatique et processus de résurrection/dump.
Vous pouvez utiliser monit
, forever
, upstart
ou systemd
pour démarrer votre serveur.
Vous pouvez utiliser Varnish ou HAProxy à la place de Nginx (il est connu que Nginx ne fonctionne pas avec les websockets).
Comme solution rapide et sale, vous pouvez utiliser Nohup node your_app.js &
pour éviter que votre application ne se termine avec votre serveur, mais forever
, monit
et les autres solutions proposées sont préférables.
J'ai créé un script Upstart actuellement utilisé pour mes applications:
description "YOUR APP NAME"
author "Capy - http://ecapy.com"
env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"
######################################################
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 99 5
pre-start script
mkdir -p $PID_PATH
mkdir -p /var/log/node
end script
script
export NODE_ENV=$SERVER_ENV
exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script
post-start script
echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script
Personnalisez tout avant ##########, créez un fichier dans /etc/init/your-service.conf et collez-le à cet endroit.
Ensuite vous pouvez:
start your-service
stop your-service
restart your-service
status your-service
J'ai écrit un guide assez complet sur le déploiement de Node.js, avec des fichiers d'exemple:
Tutoriel: Comment déployer des applications Node.js, avec exemples
Si vous avez un accès root, vous feriez mieux de configurer un démon pour qu'il soit sain et sauf en arrière-plan. Vous pouvez lire comment faire cela pour Debian et bunt dans un article de blog Exécuter Node.js en tant que service sur Ubunt.
Voici un article plus long sur la résolution de ce problème avec systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Quelques points à garder à l'esprit:
Toutes ces choses se font facilement avec systemd.
Forever fera l'affaire.
@ Kevin: Vous devriez être capable de tuer les processus bien. Je revérifierais un peu la documentation. Si vous parvenez à reproduire l'erreur, nous vous conseillons de la publier comme un problème sur GitHub.
Comme Box9 l'a dit, Forever est un bon choix pour le code de production. Mais il est également possible de garder un processus en marche même si la connexion SSH est fermée à partir du client.
Bien que cela ne soit pas forcément une bonne idée pour la production, cela est très pratique lorsque vous êtes au milieu de longues sessions de débogage, ou que vous suivez la sortie de la console sur de longs processus, ou qu’il est utile de déconnecter votre connexion SSH, tout en maintenant le terminal actif sur le serveur. pour vous reconnecter plus tard (par exemple, démarrez l'application Node.js à la maison et reconnectez-vous à la console plus tard au travail pour vérifier comment les choses se passent).
En supposant que votre serveur est une boîte * nix, vous pouvez utiliser la commande screen de l'environnement de ligne de commande Shell pour que le processus reste actif même si le client SSH est fermé. Vous pouvez télécharger/installer l’écran à partir du Web s’il n’est pas déjà installé (recherchez un paquet pour votre distribution sous Linux, ou utilisez MacPorts sous OS X).
Cela fonctionne comme suit:
Si vous avez besoin de plusieurs sessions d'écran simultanées, vous pouvez vous connecter à n'importe quelle session à partir de n'importe quel client. Lisez la documentation en ligne pour toutes les options.
Essayez ceci: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html =
Un guide complet et détaillé pour le déploiement d'applications Node.js avec Capistrano, Upstart et Nginx
https://paastor.com est un service relativement nouveau qui effectue le déploiement pour vous, sur un VPS ou un autre serveur. Il y a une CLI pour pousser le code. Paastor a un niveau gratuit, du moins il l’a fait au moment de l’afficher.
Essayez node-deploy-server . C'est un ensemble d'outils complexes pour déployer une application sur vos serveurs privés. Il est écrit dans Node.js et utilise npm pour l’installation.
Forever est une bonne option pour garder les applications en marche (et c'est npm installable en tant que module agréable).
Mais pour un "déploiement" plus sérieux, comme la gestion à distance du déploiement, le redémarrage, l'exécution de commandes, etc., j'utiliserais capistrano avec l'extension de noeud.
Dans votre cas, vous pouvez utiliser le démon pstart . Pour une solution de déploiement complète, je peux suggérer capistrano . Deux guides utiles sont Comment configurer Node.js env et Comment déployer via capistrano + upstart.