До основного вмісту

Node.js на хостингу cPanel: встановлення і запуск застосунку

Хостинг та cPanel · 19.04.2026 · 4 хв читання
Ілюстрація до статті «Node.js на хостингу cPanel: встановлення і запуск застосунку»

Сучасний shared хостинг із cPanel підтримує Node.js через Apache Passenger. Це дозволяє запускати Express, Next.js та інші застосунки Node.js без оренди VPS — Passenger сам керує процесом Node.js так само, як зазвичай керує воркерами PHP-FPM. Головна відмінність від класичного деплою на VPS у тому, що вам не потрібно самостійно налаштовувати reverse proxy чи systemd-сервіс — увесь життєвий цикл процесу (запуск, перезапуск при падінні, зупинка при простої) бере на себе Apache через модуль mod_passenger.

Запуск Node.js через cPanel

Крок 1: Setup Node.js App

cPanel → Software → Setup Node.js App → Create Application.

ПолеПриклад
Node.js version20.x LTS
Application modeProduction
Application rootmyapp
Application URLexample.com/app або subdomain
Application startup fileapp.js

Крок 2: Завантажити файли

# Структура застосунку в ~/myapp/
myapp/
├── app.js         (точка входу)
├── package.json
└── node_modules/  (створиться під час npm install)

Крок 3: Встановити залежності

У Setup Node.js App натисніть «Run NPM Install» або через SSH:

cd ~/myapp
npm install

Крок 4: Мінімальний app.js

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.send('Hello from Node.js on cPanel!');
});

app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

Типова помилка запуску

Якщо залежності не встановлені або вказано неправильний стартовий файл, під час звернення до сайту з'являється стандартна сторінка Passenger із текстом:

Web application could not be started

Error: Cannot find module 'express'
Require stack:
- /home/user/myapp/app.js

Це означає, що npm install не виконувався в тій самій версії Node.js, що вказана в Setup Node.js App, або папка node_modules була скопійована з іншого сервера — нативні модулі з бінарними залежностями (наприклад, bcrypt, sharp) збираються під конкретну версію Node.js і архітектуру і не переносяться між середовищами. Рішення — видалити node_modules і виконати npm install заново через інтерфейс Setup Node.js App, який активує потрібне середовище автоматично.

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

В інтерфейсі Setup Node.js App → Add Variable:

NODE_ENV=production
DATABASE_URL=mysql://user:pass@localhost/dbname
API_KEY=your_secret_key

Passenger автоматично керує процесом — перезапускає при збої, не потрібен PM2. Порт призначається автоматично через змінну process.env.PORT — не хардкодьте 3000 чи будь-який інший порт у production, інакше застосунок не запуститься, якщо цей порт вже зайнятий іншим сайтом на сервері.

Проксування через .htaccess для нестандартного шляху

# Якщо Application URL вказує на підпапку, а не корінь домену,
# Setup Node.js App створює .htaccess автоматично:
PassengerAppRoot "/home/user/myapp"
PassengerBaseURI "/app"
PassengerAppType node
PassengerStartupFile app.js

Ці директиви прописуються в .htaccess кореня домену чи підпапки — редагувати їх вручну зазвичай не потрібно, але якщо файл випадково видалено чи перезаписано іншим деплоєм, застосунок перестане відкриватися з помилкою 404, хоча процес Node.js продовжує працювати у фоні. У такому разі допомагає повторне збереження налаштувань у Setup Node.js App — інтерфейс перезаписує .htaccess із правильними директивами без потреби чіпати файл вручну.

Коли Node.js на shared-хостингу не підходить

  • Застосунку потрібні постійні WebSocket-з'єднання з великою кількістю одночасних клієнтів — Passenger на shared-тарифах обмежує кількість процесів і не розрахований на тисячі довгоживучих сокетів
  • Потрібні фонові завдання і черги (cron-воркери, обробка відео) — LVE обмежує CPU і пам'ять процесу, тривалі обчислення будуть примусово зупинені
  • Потрібен root-доступ для встановлення системних залежностей нативних модулів — на shared-хостингу немає sudo, компіляція деяких пакетів із C++ біндингами може не пройти
  • Проєкт використовує Docker або потребує конкретну версію інфраструктури (Redis, RabbitMQ) на тому самому сервері — shared-хостинг із cPanel таких сервісів не надає, потрібен VPS

Перевірка результату

curl -I https://example.com/app/
# Очікуємо: HTTP/1.1 200 OK

# Логи застосунку знаходяться в:
~/nodevenv/myapp/20/logs/

Якщо curl повертає 502 Bad Gateway, значить процес Node.js впав одразу після старту — дивіться вивід в інтерфейсі Setup Node.js App або в логах Passenger, там буде точний stack trace помилки, а не лише загальне повідомлення «application could not be started», яке бачить відвідувач сайту. Детальніше про розбір логів помилок у cPanel — у статті логи помилок у cPanel, а про SSH-доступ для налагодження — у статті SSH-доступ на хостингу cPanel.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці