По хорошему вам сначала нужно узнать все env переменные которые у вас в юзере есть из которого вы запускаете из консоли сборщик. для этого введите
env
Потом подсуньте вывод PATH в putenv и пути до ноды и npm в соотвествующие переменные.
Вот пример рабочего сборщика на нашем проекте (запускается из браузера при совпадении в GET секретного ключа который сами укажите):
<?php
ini_set('output_buffering', '0');
$documentRoot = dirname(dirname(__DIR__));
putenv('LANG=C');
putenv('LC_ALL=C');
putenv('PATH=/home/gituser/.nvm/versions/node/v16.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin');
putenv("SHELL=/bin/bash");
putenv("HOME=/home/gituser");
putenv("COMPOSER_HOME=$documentRoot/.composer");
$key = 'MY_SECRET_KEY';
$php = '/usr/bin/php';
$composer = "$php /usr/local/bin/composer";
$node = "~/.nvm/versions/node/v16.13.0/bin/node";
$npm = "~/.nvm/versions/node/v16.13.0/bin/npm";
if (isset($_GET['key']) && @$_GET['key'] == $key)
{
echo '<pre> Update...'.PHP_EOL;
$cmd_arr = [
"cd $documentRoot && $node $npm i",
"cd $documentRoot && gulp build --env=prod",
];
foreach ($cmd_arr as $cmd){
echo PHP_EOL.PHP_EOL."<b>$cmd</b>".PHP_EOL;
system("{ $cmd; } 2>&1");
flush();
}
echo '<hr> Done.'.PHP_EOL;
exit;
}
header('HTTP/1.1 404 Not Found');
echo '404 Not Found.';