Перейти до вмісту
КонтактПоштаПанель клієнта

Хостинг і сервер

Як запустити застосунок Node.js у Plesk?

Коротка відповідь: у Plesk застосунок Node.js запускає розширення Node.js Toolkit. Ви вказуєте каталог застосунку (Application Root), публічний каталог (Document Root) і стартовий файл (наприклад, app.js), обираєте версію Node.js, встановлюєте залежності кнопкою NPM install і запускаєте застосунок. Процесом керує Phusion Passenger. Вам не потрібен власний VPS чи ручне налаштування nginx, а новий застосунок запрацює одразу, як тільки вебсервер завантажить нову конфігурацію. Нижче — повна інструкція, приклад застосунку та найпоширеніші проблеми.

Як Plesk запускає застосунок Node.js

Node.js Toolkit не запускає застосунок у фоні через pm2 чи systemd. Натомість він додає до конфігурації вебсервера директиви Phusion Passenger. При першому запиті Passenger запускає процес Node.js, передає йому порт через змінну PORT і спрямовує на нього трафік із домену. Невикористовуваний процес може вимкнутися і запуститься знову при наступному зверненні.

Звідси випливають три практичні правила:

  • застосунок слухає порт зі змінної process.env.PORT, а не жорстко заданий 3000;
  • статичні файли з публічного каталогу віддає вебсервер, а решту адрес отримує застосунок;
  • зміна конфігурації запрацює лише після перезавантаження вебсервера, яке Plesk виконує із затримкою (у нас — до 30 хвилин).

Підготовка домену або субдомену

Застосунок зручніше запускати на окремому субдомені, наприклад app.twojafirma.pl. Головна сторінка на WordPress тоді працює далі без змін. Створіть субдомен у розділі Сайти та домени → Додати субдомен і як кореневий каталог документів вкажіть публічний каталог застосунку, наприклад app/public. Каталог застосунку (app) у такому разі лежить поза публічним каталогом, тож файли .env чи node_modules неможливо завантажити через браузер.

Мінімальний застосунок і package.json

Найпростіший робочий застосунок не потребує жодних бібліотек. Збережіть його як app/app.js:

const http = require('http');

const port = process.env.PORT || 3000;   // port podaje Passenger

http.createServer((req, res) => {
  res.setHeader('Content-Type', 'application/json; charset=utf-8');
  res.end(JSON.stringify({ ok: true, node: process.version, path: req.url }));
}).listen(port);

З бібліотекою Express застосунок виглядає подібно. Залежності описує app/package.json:

{
  "name": "moja-aplikacja",
  "version": "1.0.0",
  "private": true,
  "main": "app.js",
  "scripts": {
    "build": "echo \"brak kroku budowania\""
  },
  "dependencies": {
    "express": "^4.21.2"
  }
}
const express = require('express');
const app = express();

app.get('/', (req, res) => res.json({ ok: true }));
app.listen(process.env.PORT || 3000);

Налаштування в Node.js Toolkit

У панелі домену відкрийте Node.js і натисніть Увімкнути Node.js. Найважливіші поля:

Таблицю можна прогортати горизонтально.

ПолеЩо вказати
Node.js Versionверсія, сумісна із застосунком; для нових проєктів обирайте версію LTS
Package Managernpm або Yarn — відповідно до lock-файлу в проєкті
Document Rootпублічний каталог, наприклад /app/public
Application Rootкаталог із package.json, наприклад /app
Application Startup Fileстартовий файл, наприклад app.js або server.js
Application Modeproduction для робочого сайту
Custom environment variablesзмінні застосунку (опис нижче)

Після збереження Plesk згенерує конфігурацію Passenger. Якщо в публічному каталозі лежить типовий файл index.html, створений під час налаштування субдомену, видаліть його. Вебсервер віддаватиме саме його замість відповіді застосунку, і здаватиметься, що Node.js не працює.

Залежності: NPM install і скрипти

Кнопка NPM install встановлює залежності з package.json у каталозі застосунку. Run script запускає скрипт із секції scripts, наприклад build для застосунку з кроком компіляції (TypeScript, Next.js у продакшн-режимі). За наявності доступу SSH те саме можна зробити з консолі, не забувши вказати потрібну версію Node.js:

cd ~/app
export PATH=/opt/plesk/node/24/bin:$PATH
node -v
npm ci --omit=dev

Бібліотеки, що компілюються під час встановлення (наприклад, bcrypt, sharp у старіших версіях), потребують інструментів збірки. На спільному хостингу вони не завжди доступні, тож перед вибором бібліотеки перевірте, чи має вона готові бінарники або версію на чистому JavaScript (наприклад, bcryptjs).

Змінні середовища

Паролі, адреси баз даних і ключі API вказуйте в Custom environment variables або у файлі .env у каталозі застосунку (поза публічним каталогом). Не тримайте їх у репозиторії. Приклад зчитування:

const dbUrl = process.env.DATABASE_URL;
if (!dbUrl) throw new Error('Brak DATABASE_URL');

Як скласти DATABASE_URL для бази даних із панелі, показуємо в статті про базу PostgreSQL у Plesk.

Перезапуск і логи

Після завантаження нової версії коду застосунок потрібно перезапустити:

  • у панелі: Restart App;
  • через SSH або файловий менеджер: створіть або оновіть файл tmp/restart.txt у каталозі застосунку — Passenger перезапустить процес при найближчому запиті.
mkdir -p ~/app/tmp && touch ~/app/tmp/restart.txt

Помилки запуску (наприклад, відсутній модуль, неправильний стартовий файл) Passenger виводить на сторінці помилки та в логах домену (Логи у панелі). Те, що застосунок виводить через console.log, також потрапляє в лог вебсервера.

Розгортання з Git

У пакетах із розширенням Git можна підключити репозиторій до каталогу застосунку і розгортати зміни вручну або автоматично після git push. У діях після розгортання (deployment actions) додайте встановлення залежностей і перезапуск, наприклад:

npm ci --omit=dev && mkdir -p tmp && touch tmp/restart.txt

Найпоширеніші проблеми

  • Бачите типову сторінку Plesk замість застосунку — у публічному каталозі є index.html; видаліть його.
  • Зміни в конфігурації не діють — вебсервер ще не завантажив нову конфігурацію; зачекайте на перезавантаження або зверніться до підтримки хостингу.
  • «Cannot find module» — залежності не встановлені в каталозі застосунку, або Application Root вказує на інший каталог, ніж той, де лежить package.json.
  • Застосунок слухає порт, але нічого не відповідає — порт заданий жорстко замість process.env.PORT.
  • «The application process exited prematurely» — помилка під час запуску застосунку або в середовищі виконання; деталі — в логах. На хостингу з ізоляцією акаунтів (CageFS) причиною буває й конфігурація Passenger на боці сервера — тоді потрібна допомога підтримки хостингу.
  • Застосунок працює локально, а на сервері — ні — інша версія Node.js; встановіть у панелі ту саму версію, яку використовуєте локально, і вкажіть її в package.json ("engines").

FAQ

Чи потрібен для Node.js VPS?

Не завжди. API, адміністративна панель чи невеликий сервіс на Express працюють у Plesk на хостингу з Node.js Toolkit. VPS має сенс для довготривалих фонових процесів, WebSocket-з'єднань із великим навантаженням або нестандартних системних служб.

Чи можу я запустити Next.js?

Так, як застосунок Node.js: зберіть проєкт (npm run build) і вкажіть стартовий файл продакшн-сервера. Повністю статичну версію (output: 'export' у конфігурації Next.js) достатньо завантажити в публічний каталог.

Як перезапустити застосунок без панелі?

Створіть або оновіть файл tmp/restart.txt у каталозі застосунку.

Де зберігати паролі до бази даних?

У змінних середовища застосунку або у файлі .env поза публічним каталогом — ніколи в репозиторії.

Технічна перевірка: 17.09.2026, Plesk Obsidian 18.0.80, Node.js Toolkit 2.5, Node.js 24.21 і 26.8, Passenger 6.1. Пов'язані статті: PostgreSQL у Plesk, Docker і Docker Compose у Plesk, застосунок Ruby у Plesk. Пакети: хостинг NVMe (Business) і NVMe Performance і Pro.