Я вызываю сценарий узла из 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
будет вызываться в подпроцессе вашего веб-сервера и отбрасываться, как только команда завершается.