Node.js — это среда выполнения JavaScript-приложений, работающая на сервере.
Настройка сайта
Чтобы включить Node.js для сайта, при создании или редактировании сайта:
В поле Обработчик выберите Node.js.
Укажите Версию Node.js. Версия будет установлена только для пользователя — владельца сайта. Доступна последняя версия Node.js и LTS-версии, начиная с 12.13.0.
Выберите Способ подключения:
- Сокет файл — приложение Node.js будет использовать для работы Unix-сокеты.
- Порт — приложение Node.js будет использовать для работы TCP-порт;
Панель управления автоматически выберет свободный TCP-порт для Node.js. Поиск свободного порта начинается со значения, указанного в параметре NodeJsBackendBind конфигурационного файла ispmanager. Значение параметра по умолчанию — 127.0.0.1:10000. Для работы Node.js через Unix-сокет будет создана директория /var/www/<имя_пользователя>/data/nodejs/.Чтобы передать настройки в файл сервера Node.js, используйте переменные окружения:
- PORT — для номера порта;
- SOCKET — для файла сокета.
Содержимое файла сервера по умолчанию
const http = require('http');
const fs = require('fs');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html;charset=utf-8');
const data = fs.readFileSync(process.env.INDEX_PATH, 'utf8');
res.end(data);
});
if ("SOCKET" in process.env) {
const socket = process.env.SOCKET;
// Socket must be removed before starting server. This action is required. Otherwise server will not start if socket exists.
if (fs.existsSync(socket)) {
fs.unlinkSync(socket);
}
server.listen(socket, () => {
fs.chmodSync(socket,0660);
console.log(`Listening ${socket}`);
});
} else if ("PORT" in process.env) {
const hostname = process.env.INSTANCE_HOST;
const port = process.env.PORT;
server.listen(port, hostname, () => {
console.log(`Listening http://${hostname}:${port}/`);
});
}
Конфигурационный файл
Приложение Node.js содержит конфигурационный файл package.json. Конфигурационный файл используется для установки зависимостей через npm и управления запуском приложения. Подробнее о формате конфигурационного файла см. в официальной документации Node.js.
Содержимое package.json по умолчанию
{
"name": "doc.test",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Чтобы изменить конфигурационный файл, перейдите в Сайты → выберите сайт → кнопка Файлы конфигурации. Чтобы изменить путь к приложению сайта, укажите нужный путь в параметрах main и start.
Не рекомендуем менять файлы конфигурации, если вы полностью не уверены в своих действиях. Перед сохранением конфигурации панель управления проверяет только синтаксис файлов, а не корректность настроек.
Чтобы установить пакеты, указанные в конфигурационном файле, перейдите в Сайты → выберите сайт → меню → Npm install.
Диагностика приложения
Служебные каталоги
При работе с сайтами с Node.js в домашней директории пользователя создаются служебные каталоги используемых утилит:
/var/www/<имя пользователя>data/.npm/ — данные пакетного менеджера Node.js;
/var/www/<имя пользователя>data/.nvm/ — установленные версии Node.js;
/var/www/<имя пользователя>/data/.pm2/ — данные менеджера процессов pm2.
Эти директории нужны для корректной работы Node.js. Если их удалить, директории будут пересозданы при следующем редактировании сайта, но часть информации может быть утеряна.
Управление сайтом через shell-клиент
Чтобы открыть shell-клиент, перейдите в Cайты → выберите сайт → меню → Shell-клиент.
При запуске shell-клиента панель управления автоматически:
- откроет домашнюю директорию сайта;
- добавит пути к Node.js для выбранного сайта в переменную PATH.
Особенности работы
- При выборе обработчика Node.js установка CMS или конструктора сайта недоступна.
- Если содержимое сайта с Node.js изменилось, нужно перезапустить приложение сайта для применения изменений: Сайты → выберите сайт → меню → Перезапустить.
- При восстановлении сайта с Node.js из резервной копии панель управления попытается использовать сохранённые настройки порта или сокета. Если порт или сокет занят, для сайта будет выделен новый порт или сокет.