84 votes

Beanstalk: déploiement de Node.js - node-gyp échoue car l'autorisation est refusée

Le déploiement d'un Node.js application (Nœud 6, mnp 5) à Beanstalk échoue avec:

gyp ERR! la pile d'Erreur: EACCES: le refus d'une autorisation, mkdir '/tmp/déploiement/application/node_modules/heapdump/build"

si l'erreur n'est pas spécifique au package, n'importe quel nœud-gyp d'échec de l'appel.

L'événement d'ERREUR dans la Console AWS se lit comme suit:

[Exemple: i-12345] echec de la Commande sur l'instance. De retour code: 1 Sortie: (TRONQUÉE).../opt/elasticbeanstalk/containerfiles/ebnode.py", de la ligne de 180, dans npm_install élever e sous-processus.CalledProcessError: Commande '['/opt/elasticbeanstalk/node-installer/node-v6.10.0-linux-x64/bin/mnp', '--production', 'install']' a retourné non nulle de sortie d'état 1. Crochet /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh a échoué. Pour plus d' de détails, consultez le fichier /var/log/eb-activité.journal à l'aide de la console ou EB CLI.

et eb-activity.log contenus susmentionnés mnp erreur.

L'application a été déployé manuellement en téléchargeant un .fichier zip qui ne comprennent pas l' node_modules. I. e. il n'a pas été déployée sur l' eb outil de ligne de commande.

232voto

Jakub Holý Points 941

Solution

La solution est d'ajouter le fichier .npmrc de la demande avec le contenu:

# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5
unsafe-perm=true

(Ou de la configuration de mnp donc, de toute autre manière. (Si paramètre npm_config_unsafe_perm=true en /opt/elasticbeanstalk/env.vars n'a pas de travail pour moi.)

Explication

npm install est géré par l'utilisateur root mais l' node-gyp processus, il déclenche pour certains paquets, est exécuté par l'utilisateur par défaut ec2-user. Cet utilisateur n'a pas accès à l' /tmp/deployment/application/node_modules/ répertoire créé par le npm install et la propriété de root. (Et il est probable manque également de l'accès à l' /tmp/.npm et /tmp/.config créé par le même.) En activant unsafe-perm nous force npm pour exécuter nœud-gyp également en tant que root, en évitant le problème.

(Personnellement, je préfère courir tous en tant que ec2-user plutôt que d' root mais je suppose que ce serait plus impliqué :-))

Crédits

unreal0 a m'a indiqué la solution

Questions connexes

2voto

malik Points 17

j'ai corrigé avec la configuration d'aws sur l'instance. t2.micro => t2.small ou un plus grand. entrer la description du lien ici

1voto

Bira Points 1037

Nous devons faire 2 choses ici.

Premier cas: créez-le si vous n'avez pas déjà de dossier .ebextensions à la racine de votre projet. Créez ensuite un fichier dans .ebextensions nommé 01_fix_permissions.config.

Ensuite, activez ensuite PROXY set -xe et /opt/elasticbeanstalk/bin/healthd-track-pidfile --proxy nginx

 files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/49_change_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
  #!/usr/bin/env bash
  sudo chown -R ec2-user:ec2-user tmp/
  set -xe
  /opt/elasticbeanstalk/bin/healthd-track-pidfile --proxy nginx
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X