2.10.1. Общая информация о Node.js
Внимание!
Полноценная работа Node.js поддерживается только на бизнес-хостинге. На виртуальном хостинге Node.js можно использовать только в консоли и нельзя запускать сайты и приложения, которые должны слушать порты и быть доступны извне. При смене тарифа с бизнес-хостинга на виртуальный хостинг сайты на Node.js перестанут работать.Схема работы Node.js на хостинге
Node.js работает на хостинге так же, как на VPS или выделенном сервере, но с проксированием HTTP-трафика в Node.js-приложение.
Проксирование HTTP-трафика необходимо для возможности защиты вашего приложение от DDoS-атак и предоставления вам дополнительных возможностей нашего хостинга, например установка бесплатного SSL-сертификата от Let's Encrypt, кеширование статических файлов и т. д. Без проксирования HTTP-трафик не дойдёт к вашему приложению. Если HTTP-трафик вам не нужен, можете запускать приложение без него — всё будет работать.
Доступно два типа проксирования:
- По сокету. При запуске приложения создаётся сокет-файл, в который проксируется весь HTTP-трафик. Преимущество такого подхода — интерфейс сокета сам по себе работает быстрее проксирования по IP-адресу, недостаток — не все популярные фрeймворки умеют запускать HTTP-сервер по сокету и в настройках принимают только параметры
--hostи--port. Если у вас есть возможность запустить HTTP-сервер по сокету — советуем сделать именно это, если такой возможности нет — используйте проксирование по IP-адресу. - По IP-адресу. HTTP-трафик проксируется через локальный IP-адрес. Это организовано следующим образом. Мы выдаём вам уникальный локальный IP-адрес вида
127.*.*.*, где*— любое число от 0 до 255, и порт по умолчанию —3000. Вы в настройках своего приложения указываете эти значения. В зависимости от вашего фреймворка эти параметры могут указываться по-разному, но в большинстве — это параметры запуска приложения--hostи--port. Примечание При наличии выделенного IP на него напрямую можно принимать любой вид трафика по любому порту. Для использования выделенного IP его нужно явно указывать вторым параметром вserver.listen(port, ip).
Тип проксирования выбирается в настройках сайта при включении Node.js (см. ниже). Данные для использования выбранного типа выводятся на странице настроек Node.js. Также они содержатся в переменных окружения: process.env.PORT и process.env.HOST (соответственно, путь к сокету и пустое значение при проксировании по сокету или порт и IP-адрес при проксировании по IP-адресу).
Порядок обработки запроса:
- Запрос поступает на общий сервер через порт 80 или 443.
- На основе имени хоста перенаправляется приложению в соответствии с выбранным типом проксирования — на сокет нужного сайта или локальный IP-адрес.
- Приложение получает данные, обрабатывает их и возвращает ответ.
Порядок запуска приложения
- Откройте раздел «Настройки сайта».
- Выберите веб-сервер Node.js, нужную версию, тип проксирования HTTP-трафика и сохраните изменения:

- Разместите файлы вашего приложения в корневом каталоге сайта — загрузите файлы готового проекта или установите с помощью npm.
- Добавьте скрипт с командой
startвpackage.json. - Нажмите «Перезапустить» в настройках Node.js.
Возможные проблемы:
- При запуске HTTP-сервера не с нашим сокетом (при проксировании по сокету) — приложение продолжит работу, но на сайте будет ошибка 502.
- При запуске HTTP-сервера не с нашим IP-адресом и портом (при проксировании по IP-адресу) — приложение завершит работу через пару секунд с кодом ошибки
9. - При запуске HTTP-сервера только с портом, без указания хоста (при проксировании по IP-адресу) — приложение займёт порт глобально и будет мешать запуску приложений на других хостах в пределах хостинг-аккаунта. Решение — указать хост в
app.listen(). - Ошибка 502 в общем случае означает, что мы не можем найти, куда проксировать ваш трафик. Обычно это происходит, когда приложение запускается с некорректным IP-адресом, портом или сокетом (см. выше), либо когда запуск приложения завершился неудачей.
- При падении приложения из-за какой-либо внутренней ошибки наша система Supervisor отследит это и попытается перезапустить приложение в течении 10 секунд. Она будет предпринимать попытки до тех пор, пока ваше приложение не запустится и не начнёт работать.
Если вам нужно запустить приложение из консоли и вы используете проксирование по IP-адресу, то при запуске явно указываете IP-адрес и порт:
HOST=127.*.*.* PORT=3000 node index.js
Вместо 127.*.*.* и 3000 подставьте IP-адрес и порт со страницы настроек Node.js.
Общая информация
Примечания:
- Если node и npm не видны в консоли — убедитесь, что в хостинг-аккаунте существуют файлы
.bashrcи.bash_profileи они не содержат ошибок.
npm
npm — пакетный менеджер Node.js. Позволяет устанавливать дополнительные пакеты напрямую на хостинге. Для использования достаточно подключиться по SSH и в каталоге сайта выполнить необходимые команды.
Команды:
npm -v— просмотр текущей версии npm.npm install пакет(илиnpm i пакет) — установка пакета. После установки появится подкаталогnode_modules, в котором будет находится установленный модуль.npm uninstall пакет— удаление пакета.
package.json
package.json — файл конфигурации и управления пакетами npm.
Параметры:
name(обязательный) — название приложения маленькими латинскими буквами без пробелов, для разделения слов можно использовать символы-и_.description— описание приложения.dependencies— секция с информацией о всех пакетах, используемых приложением.
Команда npm init — создаёт файл с нуля. Перед созданием запрашиваются все необходимые данные. В конце нужно ознакомиться с содержимым будущего файла и если всё в порядке, ввести yes. Примечание Можно на все вопросы просто нажимать Enter, тогда будет создан файл со стандартным содержимым.
Настройки Node.js
Управление работой приложениея Node.js выполняется в разделе «Настройки Node.js».
Статус приложения
Блок «Статус приложения»:
- «Статус приложения» — текущий статус работы сервиса Node.js:
- «Запущено» — сервис запущен и работает.
- «Остановлено» — не запущен (например, из-за отсутствия
package.json) или остановлен из-за возникшей ошибки.
- «Команда для запуска» — наличие в файле
package.jsonскрипта с командойstart:- «Присутствует» — скрипт найден.
- «Отсутствует» — скрипт не найден.
- «Принудительный перезапуск» — перезапуск сервиса. ⚠️ Обязательно нужно нажимать после любых изменений файлов.
- «Принудительная остановка» — остановка сервиса. Кнопка отображается только при запущенном приложении.
Основные настройки
Блок «Основные настройки»:
- Путь к сокету или IP-адрес и порт (в зависимости от типа проксирования).
- Имя переменной окружения с путём к сокету или переменных с портом и IP-адресом (в зависимости от типа проксирования). Примечание Принудительно передаётся в каждое приложение при его запуске.
- Пример кода, который должен быть в приложении, для прослушивания трафика сайта.
Запуск приложения
Блок «Запуск приложения» — содержит команду, которую нужно добавить в package.json для запуска приложения (./index.js в команде — путь к главному файлу приложения, название файла может быть любым):
Ваш package.json
Блок «Ваш package.json» — показывает текущее содержимое файла package.json из корневого каталога сайта (обновляется при открытии или перезагрузке страницы настроек):
При обнаружении в файле синтаксических ошибок в блоке будет выводится сообщение «Файл содержит ошибки». Если сообщение об ошибке выводится при работающем приложении, значит приложение было запущено до появления ошибки в файле.
Логи приложения
Блок «Логи приложения» — вывод логов приложения в реальном времени. Включает информацию, которую приложение в процессе работы выводит в консоль.
Полный лог находится в файле вида ~/.system/nodejs/logs/www.example.com.log, где вместо www.example.com будет название вашего сайта.
Примеры приложений
Hello, World!
- В корневом каталоге сайта создайте два файла:
- Файл конфигурации
package.json:{ "name": "node", "version": "1.0.0", "scripts": { "start": "node ./index.js" } } - Файл приложения
index.js:const HTTP = require('http'); const WebServer = HTTP.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!'); }); WebServer.listen(process.env.HOST, process.env.PORT, () => { console.log(`Server is running.`); });
- В настройках Node.js нажмите «Перезапустить».
- Откройте сайт в браузере — в случае успеха должен выводиться текст «Hello, World!».
С использованием npm и фреймворка express
- Подключитесь к хостингу по SSH.
- Перейдите в корневой каталог сайта (в команде используйте свои данные):
cd example.com/www - Инициализируйте npm и установите фреймворк express:
npm init && npm i express - В корневом каталоге сайта создайте файл приложения
index.js:const express = require("express"); const app = express(); app.get("/", function(request, response){ response.end("Hello from Express!"); }); app.listen(process.env.PORT); - Отредактируйте файл
package.jsonи добавьте в него команду запуска:"scripts": { "start": "node ./index.js" }При добавлении команды соблюдайте синтаксис JSON!
Команду нужно добавлять не просто в конец файла, а с соблюдением стандартного синтаксиса формата JSON:- Секция
scriptsне должна дублироваться. Если она уже есть в файле, добавьте командуstartтуда. - В конце предыдущей строки на том же уровне вложенности должна быть запятая.
- Порядок вложенности скобок должен быть корректным.
- В настройках Node.js нажмите «Перезапустить».
- Откройте сайт в браузере — в случае успеха должен выводиться текст «Hello from Express!».
але в прикладі для Express "app.listen(process.env.PORT);" вказано тільки порт...