Quelle est la meilleure façon de déployer Node.js?
J'ai un VPS Dreamhost (c'est ce qu'ils appellent une machine virtuelle ), et j'ai pu installer Node.js et configurer un proxy. Cela fonctionne très bien tant que je garde ouverte la connexion SSH avec laquelle j'ai démarré le nœud.
node.js
service
deployment
daemon
respectTheCode
la source
la source
Réponses:
Réponse de 2016 : presque toutes les distributions Linux sont livrées avec systemd, ce qui signifie que pour toujours, monit, PM2, etc. ne sont plus nécessaires - votre système d'exploitation gère déjà ces tâches .
Créez un
myapp.service
fichier (en remplaçant 'myapp' par le nom de votre application, évidemment):Notez que 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
/etc/systemd/system
dossier.Parlez à systemd du nouveau service avec
systemctl daemon-reload
.Commencez avec
systemctl start myapp
.Activez-le pour démarrer au démarrage avec
systemctl enable myapp
.Voir les journaux avec
journalctl -u myapp
Ceci est tiré de Comment nous déployons les applications de nœuds sur Linux, édition 2018 , qui comprend également des commandes pour générer un AWS / DigitalOcean / Azure CloudConfig pour construire des serveurs Linux / nœuds (y compris le
.service
fichier).la source
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
vous devrez peut-être exécutersystemctl daemon-reload
(systemd vous indiquera normalement si cela est nécessaire). TBH, il vaut mieux poser cette question séparément./etc/systemd/system
, vous pouvez simplement l'utilisersystemctl enable /full/path/to/myapp.service
, ce qui crée un lien symbolique/etc/systemd/system
pour vous.node
est appelé par/var/www/myapp/app.js
lui-même. Sous Unix, si vous rendez un fichier exécutable, la première ligne commençant par#!/some/file
le fichier sera interprétée avec ce binaire. L'interprète Unix de Google pour en savoir plus.Utilisez Forever . Il exécute les programmes Node.js dans des processus séparés et les redémarre en cas de mort.
Usage:
forever start example.js
pour démarrer un processus.forever list
pour voir la liste de tous les processus démarrés pour toujoursforever stop example.js
pour arrêter le processus ouforever stop 0
pour arrêter le processus avec l'index 0 (comme indiqué parforever list
).la source
forever stop 0
a eu une erreur et les choses se sont effondrées. J'ai essayé de le faire sans root sur son propre utilisateur afin de pouvoir nettoyer facilement une fois que j'ai trouvé la bonne solution. C'est peut-être mon problème. J'y reviendrai un peu plus.J'ai écrit sur ma méthode de déploiement ici: Déploiement des applications node.js
En bref:
la source
pm2 fait les tours.
Les fonctionnalités sont les suivantes: surveillance, rechargement de code à chaud, équilibreur de charge intégré, script de démarrage automatique et processus de résurrection / vidage.
la source
Vous pouvez utiliser
monit
,forever
,upstart
ousystemd
pour démarrer votre serveur.Vous pouvez utiliser Varnish ou HAProxy au lieu de Nginx (Nginx est connu pour ne pas fonctionner avec les websockets).
En tant que solution rapide et sale , vous pouvez utiliser
nohup node your_app.js &
pour éviter que votre application se terminant par votre serveur, maisforever
,monit
et d' autres solutions proposées sont mieux.la source
J'ai créé un script Upstart actuellement utilisé pour mes applications:
Personnalisez tout avant #########, créez un fichier dans /etc/init/your-service.conf et collez-le là.
Ensuite vous pouvez:
la source
J'ai écrit un guide assez complet pour déployer Node.js, avec des exemples de fichiers:
Tutoriel: Comment déployer des applications Node.js, avec des exemples
Il couvre des choses comme http-proxy, SSL et Socket.IO .
la source
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.
la source
Si vous avez un accès root, vous feriez mieux de configurer un démon pour qu'il fonctionne sain et sauf en arrière-plan. Vous pouvez lire comment faire exactement cela pour Debian et Ubuntu dans le billet de blog Run Node.js as a Service on Ubuntu .
la source
Forever fera l'affaire.
@Kevin: Vous devriez pouvoir tuer correctement les processus. Je revérifierais un peu la documentation. Si vous pouvez reproduire l'erreur, ce serait bien de la publier comme un problème sur GitHub.
la source
Essaye ça: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Un excellent guide détaillé pour le déploiement des applications Node.js avec Capistrano, Upstart et Nginx
la source
Comme l'a dit Box9, Forever est un bon choix pour le code de production. Mais il est également possible de maintenir un processus en cours même si la connexion SSH est fermée du client.
Bien que ce ne soit pas nécessairement une bonne idée pour la production, cela est très pratique lorsque vous êtes au milieu de longues sessions de débogage, ou pour suivre la sortie de la console de processus longs, ou chaque fois que cela est utile pour déconnecter votre connexion SSH, mais garder le terminal en vie sur le serveur pour vous reconnecter plus tard (comme démarrer l'application Node.js à la maison et vous reconnecter à 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 du shell pour maintenir le processus en cours 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 package pour votre distribution si Linux, ou utilisez MacPorts si OS X).
Cela fonctionne comme suit:
Vous pouvez avoir plusieurs sessions d'écran qui s'exécutent simultanément comme ceci si vous en avez besoin, et vous pouvez vous connecter à n'importe laquelle depuis n'importe quel client. Lisez la documentation en ligne pour toutes les options.
la source
nohup
etforever
Forever est une bonne option pour garder les applications en cours d'exécution (et c'est npm installable en tant que module, ce qui est bien).
Mais pour un «déploiement» plus sérieux - des choses comme la gestion à distance du déploiement, du redémarrage, de l'exécution de commandes, etc. - j'utiliserais capistrano avec l'extension de nœud.
https://github.com/loopj/capistrano-node-deploy
la source
https://paastor.com est un service relativement nouveau qui fait 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 le faisait au moment de la publication.
la source
Dans votre cas, vous pouvez utiliser le démon upstart . 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 .
la source
Essayez node-deploy-server . Il s'agit d'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.
la source