JavaScript

Как поставить node.js на обычный хостинг с PHP?

ВАЖНАЯ ПОПРАВКА #1: в скрине ошибка, нужно писать touch .bash_profile (с точкой)
ВАЖНАЯ ПОПРАВКА #2: да, сайт, который будет обслуживать node должен быть за пределами веб-корня желательно

Можно и относительно просто.
Некоторые говорят что это невозможно, но это не совсем так. Эта невозможность была вполне оправдана 10 лет назад, когда все сайты располагались на 1 сервере и их обслуживал 1 веб-сервер. Однако, времена поменялись и теперь, благодаря CloudLinux, каждый клиент на sharedе имеет свою "выделенную" инстанцию с возможностью там запускать различное ПО, которое не PHP. Разве что ПО не должно требовать root и CloudLinux не предоставляет пакетного менеджера и супервайзера служб, но это не нужно.
Так же, стоит всё равно учесть что в мир может смотреть только веб-сервер и на его поведение повлиять не получится, поэтому помимо установки Node.js необходимо будет также написать и прокси на PHP.
Стоит также отметить, что для таких целей уже придумали Node.php, но его ф-циональность слишком велика и непотребна, поэтому в этом ответе будет освещён ручной путь настройки.

Итак, шаг 1) установить NVM
Для установки NVM достаточно убедится что в папке home существует .bash-profile иначе ничего не получиться.
Для этого выполняем команду touch:

После чего можно приступить к самой установке и выполнить это:

Когда установка завершится, нужно выйти из Shell и войти снова.

Шаг 2) установить node
всё просто: nvm install node.
после завершения установки нужно опять выйти и войти.

Шаг 3) запустить node
чтобы node не отключался после выхода из Shell-клиента, нужно написать команду вот таким образом: nohup node index.js&
Таким образом, node не получит SIGHUP при выходе и останется живым а & запустит команду паралельно и вы сможете дальше пользоватся терминалом, что является важным.
После этого нужно выполнить команду disown чтобы открепить процесс с nohup от текущей сессии, после этого можно уже спокойно выходить из неё.

Шаг 4) Настройка прокси
дальше нужно создать index.php в папке с сайтом (не та папка, в которой работает node, а та, которую обслуживает web-сервер) и наполнить его таким содержимым: https://hastebin.com/ocapiyinig.xml
В этом файле можно отредактировать настройки BASE_URL (где нужно указать localhost и порт, на котором работает нода) и PROXY_PATH (сюда можно написать путь по которому располагается сам файл с прокси).
Шаг 4.1) вы могли заметить, что путь берётся из $_SERVER["REQUEST_URI"], а значит все запросы нужно перенаправить через .htaccess к index.php:

Такая конфигурация будет перенаправлять к index.php только те запросы, которые не идут к реальным ресурсам, поэтому вы также сможете отдавать статику (картиночки, например) без всяческих проблем.

Шаг 5) наслаждаемся
Поздравляем! Node.js работает у вас! Теперь вы можете попробовать так поставить MongoDB и PostgreSQL (так можно, да), хотя у вас есть MySQL от хостинга наверное.

Шаг 6) задумываемся
А зачем это вообще? Неужто хостинг с Node.js дороже? Наверное.
А забанят ли за такое? Вам выделяют потоки, которые вы можете использовать как хотите, так что за такое не забанят (меня во всяком случае ещё не забанили + есть много хостингов которые не предоставляют Node в тарифах но имеют инструкцию как поставить MEAN себе на тариф).
Шаг 6.1) Как выключить Node потом?
выполняем top и находим код процесса:

а потом: kill -9 241365
ЕХ
Евгений Храмков
10 636
Лучший ответ
А что мешает взять виртуальный хостинг с Node.JS? Таких сейчас немало.

То, что копипастит Mash - это если у тебя на хостинг VPS/VDS (виртуальный выделенный сервер, которым ты сам управляешь).

А если обычный виртуальный хостинг с PHP и MySQL, то ничего не получится: никто не разрешит тебе выполнить самовольно залитую на хостинг программу (а Node.JS - это именно программа: интерпретатор JavaScript). Ты можешь запускать только те программы, которые предоставляет хостер.

И даже через PHP не получится: на типичном виртуальном хостинге возможность запуска из PHP внешних программ обычно заблокирована.
Нельзя. Разве что закинуть бинарник, скомпилированный для той же версии линукса с теми же библиотеками, что на хостинге, и вызывать его из php-скрипта, но вряд ли это будет нормально работать.
МC
Марат C
79 615