Расширение AWS Elastic Beanstalk ebextension не выполняет сценарий оболочки для использования установки npm

Мне нужно установить отдельную структуру, которую я создал внутри своего приложения node js, работающего на эластичном beanstalk.

Я пытался поместить скрипты в свой основной файл package.json, но при его установке получаю ошибки прав доступа.

Поэтому я создал файл конфигурации и попытался запустить npm install из container_commands. Он не хотел запускать npm, так как сказал, что команда отсутствует. Я попытался добавить правильные переменные пути среды в npm, которые работают, если сделать это вручную через ssh, но выдал ту же ошибку, что не смог найти команду npm.

Итак, наконец.

Я создал bash-скрипт через расширение ebextension, которое устанавливает приложение, и я запускаю этот скрипт из container_commands.

Скрипт создается правильно, но никогда не запускается. Если я подключаюсь к экземплярам по ssh и запускаю его вручную, как sudo, он работает. Приложение развертывается без ошибок, но кажется, что оно никогда не выполняет скрипт, я знаю это, потому что папки node_modules никогда не создаются.

Я не уверен, где искать ошибки для этого в моих журналах, и когда я попытался, я не нашел ничего полезного.

Вот мое расширение:

files:
    "/tmp/install_application.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash
            export PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
            eval "cd /var/app/current/library/server && npm install --production"
            eval "cd /var/app/current && npm install --production"

container_commands:
    00-install-application:
    command: "sh /tmp/install_application.sh"

person k.ueckermann    schedule 10.06.2016    source источник
comment
Измените команду на su -c 'sh /tmp/install_application.sh' - root, и теперь попробуйте, это сработает.   -  person error2007s    schedule 10.06.2016
comment
Спасибо @ error2007s, я попробовал, но из eb deploy не получилось. Когда я попробовал это через ssh, он хотел, чтобы я ввел пароль. Я думаю, именно поэтому он не работал из eb deploy. Во всяком случае вокруг этого?   -  person k.ueckermann    schedule 11.06.2016
comment
Я также пробовал sudo su -c 'sh /tmp/install_application.sh' - root, но это не сработало.   -  person k.ueckermann    schedule 11.06.2016


Ответы (1)


Мне удалось найти ответ на этот вопрос. У меня было несколько проблем со сценарием.

  1. Старые скрипты все еще были в папках хуков с предыдущих попыток.
  2. Я запускал сценарий еще до того, как проект был разархивирован, или я запускал сценарий после того, как проект был развернут.
  3. Я устанавливал модули в конечный пункт назначения /var/app/current, который перезаписывался после установки развернутого приложения.

Вот окончательный сценарий.

files:
   "/opt/elasticbeanstalk/hooks/appdeploy/enact/00-install-application.sh":
   mode: "000755"
   owner: root
   group: root
   content: |
       #!/bin/bash
       PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
       cd "/tmp/deployment/application/library/server"
       npm install --production
person k.ueckermann    schedule 16.06.2016