web-dev-qa-db-fra.com

Comment laisser le serveur Node.js sur EC2 fonctionner pour toujours?

Comme vous pouvez le constater par ma question, je suis nouveau dans ce domaine ...

J'ai construit mon premier site Web, j'ai installé mon premier serveur Node.js pour le servir, puis j'ai tout poussé en direct sur EC2.

J'ai tout testé sur mon adresse IP EC2 et tout semble fonctionner.

Jusqu'à présent, j'ai testé mon application localement, il est donc logique que chaque fois que je ferme le terminal, app.js cesse de fonctionner, donc rien ne sera servi sur localhost.

Maintenant que mon serveur est sur EC2, la même chose se produit ("évidemment" on pourrait dire ..) chaque fois que je ferme mon terminal.

Donc, ma question est de savoir comment garder mon serveur Node.js en cours d'exécution sur EC2 pendant comme ... pour toujours .. pour que mon site reste en ligne ... pour toujours :)

J'ai lu quelque chose sur un module de nœud appelé "pour toujours" mais je me demande (étant nouveau et tout ..) pourquoi cette fonctionnalité "pour toujours" n'est-elle pas un paramètre par défaut du système Node.js-EC2?

Je veux dire, corrigez-moi si je me trompe, mais ce n'est pas la raison de mettre en place un serveur Web et de le pousser en direct pour qu'il reste en vie pour toujours? N'est-ce pas ce que les serveurs sont censés faire de toute façon (écouter infiniment les requêtes)? Et si c'est le cas, pourquoi avons-nous besoin de modules/paramètres supplémentaires pour y parvenir?

Merci pour votre aide .. Comme vous pouvez le voir, je cherche non seulement une solution mais aussi une explication car je suis vraiment confus .. :-)

MODIFIER (quelques détails dont vous pourriez avoir besoin) - Après avoir installé mon application sur EC2, voici les étapes que je suis en train de suivre sur le terminal (l'application fonctionne sur Amazon Linux au fait) :

  • Je tape ssh -i xxxxxxxxxxx.pem [email protected] sur le terminal

  • Après avoir ouvert une session sur la machine Amazon, je vais dans le dossier approprié et exécute le noeud app.js

  • Il y a 3 dossiers dans la machine: node, node_modules et *name of my app*

  • app.js Réside dans *name of my app*

  • Après cela, le site est mis en ligne sur mon IP EC2

  • Une fois que je ferme le terminal, tout est éteint

52
Sprout Coder

Avant d'appeler Node.js, exécutez la commande:

screen

Cela créera un environnement persistant qui permettra à votre processus de continuer à fonctionner après votre déconnexion.

Lorsque vous vous reconnectez, vous pouvez utiliser cette commande pour vous reconnecter à cet environnement:

screen -r

Voici un lien aléatoire pour en savoir plus sur l'écran:

http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

Cependant, cela ne vous aidera pas si votre instance EC2 redémarre. Il existe de nombreuses façons de procéder. Ajouter votre commande de démarrage à /etc/rc.local est un moyen. Voici un lien vers un guide Amazon qui comprend l'ajout de quelque chose à /etc/rc.local.

http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html

J'espère que cela t'aides,

James

59
James Wilson

J'ai travaillé avec la réponse valide pendant un certain temps, mais parfois, l'écran se termine sans raison, l'écran n'a pas de chargeur d'équilibre et d'autres fonctionnalités qui, dans un environnement de production, devraient vous intéresser.J'utilise actuellement un composant npm pour faire ce travail.

https://www.npmjs.com/package/pm2

C'est tellement simple à utiliser.

$ npm install pm2 -g

puis lancez votre application avec pm2 comme ceci

$ pm2 start app.js

Dans le lien ci-dessus, vous pouvez trouver différentes tâches à effectuer si vous en avez besoin.

J'espère que cela aidera les débutants comme moi.

26
Juan Camilo Mejia

Il y a une meilleure façon. Utilisez forever.js.

Voir ici: https://github.com/foreverjs/forever

Ceci est un joli tutoriel pour savoir comment utiliser chkconfig avec forever sur CENTOS.

http://aronduby.com/starting-node-forever-scripts-at-boot-w-centos/

13
Joseph Juhnke

Je suis très en retard pour rejoindre le fil et semble son problème de base avec chaque débutant. Suivez les instructions ci-dessous pour configurer correctement votre premier serveur.

suivez l'étape sur l'instance ec2 (avant de faire cela, assurez-vous d'avoir un script de démarrage pour pm2 dans votre fichier package.json):

npm install pm2 -g

pm2 startup systemd

Voir la sortie et à la dernière ligne ça doit être comme ..

Vous devez exécuter cette commande en tant que root. Exécutez la commande suivante: Sudo env PATH = $ PATH:/usr/bin/usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp/home/sammy

Prenez la dernière ligne de commande et exécutez à nouveau avec le privilège root.

(avant d'exécuter la commande suivante, fournissez un nouveau script de démarrage pour pm2 dans votre fichier package.json, par exemple: "pm2-start": "pm2 start ./bin/www")

npm run pm2-start

pour plus d'informations suivez le lien.

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04

2

Ou utilisez tmux Entrez simplement un serveur de noeud d'exécution d'écran tmux Ctrl + b Appuyez sur D et vous avez terminé.

2
Pritam Roy