Назад | Перейти на главную страницу

Как использовать NVM для переключения версий узла для пользователя Apache (www-data) - пользователя с сильно ограниченной функциональностью?

Я вызываю сценарий узла из PHP на моем веб-сервере Ubuntu, как в

// The following PHP executes in the context of the Apache user - 'www-data'
//
$execstring = "node " . $args;
exec($execstring, $output, $return_value);

Как уже отмечалось, код PHP выполняется в контексте пользователя Apache, который www-data по умолчанию в Ubuntu.

Я хотел бы иметь возможность использовать nvm для переключения версий узла для www-data пользователь.

(Примечание: я мог бы переключить версии узла без с помощью nvm указав полный путь к другой установке узла - я еще не пробовал, но это не мой вопрос.)

Следуя инструкциям Вот, Устанавливаю и использую nvm довольно легко для Другой пользователи:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

и

nvm install 4.1.2

Я обнаружил, что должен установить nvm отдельно для каждого пользователя. Это означает, что nvm не устанавливается для www-data пользователя, когда я запускаю указанную выше команду как пользователь входа (ubuntu); и, наоборот, переключение моей версии Node для авторизованного пользователя (ubuntu) не влияет на www-data пользователь.

Еще одна важная деталь: www-data пользователь особенный. Функциональность этого пользователя сильно ограничена. Чтобы переключиться на www-data пользователю в оболочке требуется эта специальная команда:

sudo su www-data -s /bin/sh 

(... И даже указанная выше команда не будет работать без других, предыдущих специальных шагов, не упомянутых здесь, чтобы разрешить приглашение оболочки для www-data пользователь.)

При входе в систему как www-data пользователь, однако, хотя я, кажется, могу установить nvm используя указанную ранее команду, я не могу бегать nvm. (Ошибка nvm not found.)

Пытаясь преодолеть это, я совершил грубую ошибку, последовав предложению Вот чтобы попытаться переключить версию узла глобально (т. е. для всех пользователей) при входе в систему как (я думаю, но сейчас забываю) root пользователь (ой!):

// Danger!  Do not do this!
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

К сожалению, выполнение указанной выше команды вызвало мой sudo доступ к перерыву, и теперь я, по-видимому, должен перестроить сервер с нуля.

У меня вопрос: как мне установить и использовать nvm как пользователь Apache (www-data), чтобы позволить веб-серверу запускать процесс Node данной версии и, таким образом, контролировать, к какой версии Node получает доступ веб-сервер - с удобством использования nvm?

Короткий ответ: нельзя.

NVM - это сценарий оболочки, который просто устанавливает переменные среды (в основном изменяя ваш PATH), чтобы изменить активный node версия. По сути, они не сохраняются за пределами времени жизни или дерева процессов вызывающей оболочки.

Хотя вы должны иметь возможность запускать свой веб-сервер с определенными переменными среды, вы не можете использовать NVM для управления ими, поскольку любой вызов nvm будет вызываться в подпроцессе вашего веб-сервера и отбрасываться, как только команда завершается.