Node.js le programme d'installation pour faciliter le déploiement et la mise à jour
Nous sommes en train de développer un site web (TYPO3 sous Apache) pour un client qui est pris en charge par un nœud.js/socket.io application qui fournit en temps réel des mises à jour du contenu de la CMS.
Comme c'est notre premier node.js projet je n'ai pas de meilleures pratiques pour aller lorsqu'il s'agit de "la parfait" donc j'ai passé quelques temps à la recherche des techniques de déploiement.
Un couple de questions restent pour moi de réaliser une bonne installation:
-
Est facile pour le client de déployer. Ceci est très important parce que notre site sera intégré dans leur "live" de TYPO3 installation qui sert une abondance de sites web et est en cours d'exécution sur des serveurs qui ne sont pas gérés par le client, mais d'un autre (centralisé) l'organisation qui fait des appels de soutien et de modifications du serveur, un processus lent.
-
Devrait être facile à mettre à jour. Comme mentionné demandant le redémarrage de faire des modifications de serveur est un processus lent, donc idéalement le nœud de l'installation doit redémarrer /mise à jour lorsqu'elle reçoit des modifications qui sont poussés sur le live de l'installation à l'aide de
git
.
Déploiement
La un consensus général semble être d'utiliser forever
quand il s'agit de déployer nœud applications pour les garder en cours d'exécution. J'ai testé forever
, et il semble bien fonctionner lorsqu'elles sont installées par npm install forever -g
(global). Ce serait d'exiger l'assistance extérieure à l'échelle mondiale installer sur le live à l'environnement, donc je préfère qu'elle soit exécutée à partir de l'application node_modules
répertoire, mais je n'ai pas été en mesure de créer un solide wrapper pour le faire.
En outre, forever
fonctionne très bien, mais il doit être démarré manuellement. Quelle serait la meilleure approche pour s'assurer qu'il obtient commencé sur le serveur de démarrage et continue de fonctionner?
- Un simple
init.d
script? - L'écriture d'un chien de garde wrapper?
- Un TYPO3 planificateur de tâche qui vérifie
forever
statut?
Développement rapide /Redémarrer sur la mise à jour
Nous sommes actuellement dans la phase de développement du projet et à chaque fois que je modifie le node.js application, j'ai redémarrer manuellement node
ou forever
. Cela fonctionne, mais c'est loin d'être idéale.
Il y a plusieurs petites npm
modules qui permettent de rechercher des modifications de fichier et redémarrez node
sur les changements détectés, comme:
- Nodemon
- Node.js Superviseur
- Bounce
- Nodules (qui ne nécessite pas le redémarrage de nœud, donc peut-être plus facile à combiner avec
forever
) - Jusqu'
Quelqu'un a une expérience avec l'un de ces?
Mise à jour: Pourquoi ne pas simplement utiliser les armes?
La Cluster module offre des fonctionnalités similaires à travers le recharger mécanisme, mais ne fonctionne pas avec le Noeud de 0,5+. Le core Cluster module (Nœud de 0,6+) qui l'a remplacé n'a pas toutes ces fonctionnalités, mais ne fournit de clustering. Qui à son tour ne joue pas bien avec la prise.io. Au moins non sans l'aide de Redis (qui est un problème pour nous, car on ne peut pas forcer une autre prereq service à la clientèle).
--
Évidemment j'essaie de trouver le plus stable de la solution qui allie la mise à jour de redémarrage avec forever
avant de remettre le projet au client et j'espère vraiment que quelqu'un a produit une combinaison éprouvée des techniques.
- et à personne d'autre de la pensée de Groupe: il n'a pas été mis à jour dans les trois dernières années.
Vous devez vous connecter pour publier un commentaire.
Combinant toutes les connaissances recueillies (un Grand merci à Julien Chevalier pour les idées) et les méthodes d'essai la semaine dernière, j'ai décidé de s'installer pour le déploiement de la solution décrite ci-dessous (j'ai pensé que je pourrais être sympa de partager pour aider les autres avec des questions comparables):
Auto-redémarrage sur des erreurs de script et rechargement automatique sur les modifications de script est gérée par jamais, comme il comprend également un script montre, aussi longtemps que c'est Toujours engendré à partir de l'intérieur d'un node.js script.
Pour ce faire, j'ai ajouté un
server.js
pour le lancement de laapp.js
script en fait, nous voulons exécuter:server.js
Cette montre tous les fichiers dans le répertoire de l'application pour des changements et redémarre le script qui s'exécute dans
forever
dès qu'on change. Parce que les journaux et pidfile sont dans des sous-répertoires de l'application, ceux-ci doivent être ignorés dans le fichier de la montre, ou le script boucle redémarre:.foreverignore
Au démarrage lors du démarrage du système et nous permettant de contrôler facilement le service à l'aide de
start node-app
etstop node-app
nous utilisons Ubuntu Arriviste.J'ai combiné deux exemples (cette et cette un) dans un qui fait le travail très bien:
/etc/init/node-app.conf
Comme Kevin sagement mentionne dans son article, il est déconseillé d'exécuter nœud en tant que root, nous allons le changer pour
exec sudo -u www-data /usr/local/bin/node
quand nous nous dirigeons vers les nouveaux serveurs la semaine prochaine.Donc,
forever
se met en marche automatiquement parnode server.js
qui est lancé parupstart
, et surveille les incidents et les changements du fichier, en gardant l'ensemble de l'installation de fonctionner aussi longtemps que nous le voulons.J'espère que cela aide quelqu'un.
sudo start node-app
. J'ai dû enleverexpect fork
parce que mon nœud n'a pas de fourche, de sorte que Upstart a été en attente pour un SIGCHLD qui ne viendrait jamais. Réponse très bien, merci beaucoup!Depuis ma dernière réponse est pour l'avenir! Voici quelques autres liens pour aider:
Il ne semble pas encore être une réponse parfaite, mais il y a beaucoup de personnes en cours d'exécution production Nœud instances. J'espère que cela va vous diriger dans la bonne direction.
upstart
solution que j'ai disparu à la fin (voir ma propre réponse pour la solution combinée). Apprécions grandement votre recherche!Vous pourriez être mieux, à des fins de production, de regarder quelque chose comme Cluster. Vous ne pourriez pas vouloir le cluster de fonctionnalités, mais il comprend également d'autres fonctionnalités de production tels que zéro temps d'arrêt redémarre, l'enregistrement, les ouvriers, etc.
Comme vous le dites, c'est Toujours OK pour le test mais n'a pas vraiment de ce qu'il faut pour une utilisation en production.
Me semble que je me souviens vaguement d'un Cluster ou quelque chose de similaire peut être adoptée dans le Nœud lui-même venir v0.7