web-dev-qa-db-fra.com

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

Le déploiement d'une application Node.js (Node 6, npm 5) sur Beanstalk échoue avec:

gyp ERR! Erreur de pile: EACCES: autorisation refusée, mkdir '/ tmp/deployment/application/node_modules/heapdump/build'

bien que l'erreur ne soit pas spécifique à un package, tout appel node-gyp échoue.

L'événement ERROR dans la console AWS se lit comme suit:

[Instance: i-12345] La commande a échoué sur l'instance. Code de retour: 1 Sortie: (TRUNCATED) .../opt/elasticbeanstalk/containerfiles/ebnode.py ", ligne 180, dans npm_install, augmentez le sous-processus.CalledProcessError: Commande '['/opt/elasticbeanstalk/node-install/node- v6.10.0-linux-x64/bin/npm ',' --production ',' install ']' a renvoyé un statut de sortie différent de zéro 1. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh a échoué. Pour plus de détails, consultez /var/log/eb-activity.log à l'aide de la console ou de l'interface de ligne de commande EB.

et eb-activity.log contenait l'erreur npm susmentionnée.

L'application a été déployée manuellement en téléchargeant un fichier .Zip n'incluant pas node_modules. C'est à dire. il n'a pas été déployé via l'outil de ligne de commande eb.

58
Jakub Holý

Solution

La solution consiste à ajouter le fichier .npmrc À l'application 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 configurer npm de toute autre manière. (Bien que le réglage de npm_config_unsafe_perm=true Dans /opt/elasticbeanstalk/env.vars N'ait pas fonctionné pour moi.)

Explication

npm install Est exécuté par l'utilisateur root mais le processus node-gyp Qu'il déclenche pour certains packages est exécuté par l'utilisateur par défaut ec2-user. Cet utilisateur n'a pas accès au répertoire /tmp/deployment/application/node_modules/ Créé par l'installation npm et appartenant à root. (Et il manque aussi probablement l'accès à /tmp/.npm Et à /tmp/.config Créés par le même.) En activant unsafe-perm, Nous forçons npm à exécuter node-gyp également en tant que root, évitant ainsi le problème. .

(Personnellement, je préférerais que tous fonctionnent comme ec2-user Plutôt que root mais je suppose que cela serait plus impliqué :-))

Crédits

nreal0 m'a indiqué la solution

Questions connexes

162
Jakub Holý

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 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
0
Bira

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

0
malik