У меня есть приложение Laravel на сервере Ubuntu, работающее nginx.
Я хочу настроить систему компакт-дисков, подобную Netlify, для stati c сайтов, чтобы на каждом git push
сервер должен автоматически pull
и запускать сценарии build
, что было бы неплохо ?.
Я настраиваю GitHub webhook так, чтобы на каждом pu sh он запускал сценарий bash с именем deploy.sh
на сервере.
Это мой deploy.sh
:
#!/bin/bash
# activate maintenance mode
php artisan down
# update source code
git pull
npm run build
# update PHP dependencies
#composer install --no-interaction --no-dev --prefer-dist
php artisan migrate --force
php artisan up
Пока все хорошо.
Но сценарий завершается ошибкой при сценарии npm run build
, и Я получаю этот вывод:
> npm run production
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn sh
npm ERR! file sh
npm ERR! path sh
npm ERR! errno ENOENT
npm ERR! @ build: `npm run production`
npm ERR! spawn sh ENOENT
npm ERR!
npm ERR! Failed at the @ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Когда я запускаю скрипт в терминале [через ssh] вручную, он работает, даже как пользователь www-data
!
Я тестировал его запуск как www-data
пользователь, запустив sudo -H -u www-data ./deploy.sh
, и это сработало! Так что я озадачен тем, почему он не работает при запуске webhook [который запускается от имени пользователя www-data
, что я подтвердил, вставив whoami
в скрипт] ...
Любая помощь будет принята с благодарностью , как я пытаюсь понять это уже давно ...