RU
UAH

Простой Node.js-сервер на Express для ISPmanager хостинга.

Что вы получите

Node.js Express Мини-приложение на Express, которое:

  • корректно слушает порт из переменной окружения PORT (как требует общий хостинг)
  • отдаёт главную страницу и статику
  • имеет health-endpoint /health
  • корректно обрабатывает 404 и 500

Подходит для быстрого старта, тестов и простых лендингов/мини-сервисов.

Структура проекта

my-express-app/
|-- package.json
|-- app.js
|-- .env (опционально, для локального запуска)
|-- public/
| `-- style.css
`-- views/
    `-- index.html

Папки public и views можно переименовать; в коде это настраивается.

Создаём package.json


{
  "name": "my-express-app",
  "version": "1.0.0",
  "description": "Simple Express server for shared hosting (ISPmanager).",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "start:prod": "NODE_ENV=production node app.js"
  },
  "engines": {
    "node": ">=18.x"
  },
  "dependencies": {
    "express": "^4.19.2",
    "morgan": "^1.10.0"
  }
}


Пояснения:

scripts.start — команда, которую удобно указывать в панели запуска приложения. engines.node — подсказывает желаемую версию Node.js (в ISPmanager всё равно выбирается вручную).

Пишем сервер app.js


	
// app.js
const express = require('express');
const path = require('path');
const morgan = require('morgan');

const app = express();

// 1) Порт: на shared-хостинге его задаёт панель (переменная окружения PORT)
const PORT = process.env.PORT || 3000;

// 2) Логи запросов (удобно при отладке)
app.use(morgan(process.env.NODE_ENV === 'production' ? 'combined' : 'dev'));

// 3) Отдаём статику из /public
app.use(express.static(path.join(__dirname, 'public')));

// 4) Главная страница (простой html из /views/index.html)
app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

// 5) Health-check для мониторинга
app.get('/health', (req, res) => {
  res.status(200).json({ status: 'ok', uptime: process.uptime() });
});

// 6) 404 — если маршрут не найден
app.use((req, res, next) => {
  res.status(404).send('404 Not Found');
});

// 7) 500 — базовый обработчик ошибок
app.use((err, req, res, next) => {
  console.error('Unhandled error:', err);
  res.status(500).send('500 Internal Server Error');
});

// 8) Старт сервера
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
	

Простая главная страница views/index.html


<!doctype html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <title>Express на shared-хостинге</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <link href="/style.css" rel="stylesheet" />
</head>
<body>
  <main>
    <h1>Express работает</h1>
    <p>Это минимальный сервер на Node.js (Express) для shared-хостинга.</p>
    <ul>
      <li>Главная: <code>/</code></li>
      <li>Health: <code>/health</code></li>
      <li>Статика: <code>/public</code> (подключено как <code>/style.css</code>)</li>
    </ul>
  </main>
</body>
</html>

Node.js
Node.js Хостинг
Запусти проект за пару кликов!
Бесплатный SSLСовременные серверы7 дней теста бесплатно
Перейти к тарифам

Мини-стили public/style.css


html, body {
  margin: 0;
  padding: 0;
  font: 16px/1.5 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
  background: #0f172a;
  color: #e2e8f0;
}
main {
  max-width: 720px;
  margin: 12vh auto;
  padding: 24px;
  background: #111827;
  border-radius: 16px;
  box-shadow: 0 10px 30px rgba(0,0,0,.25);
}
h1 { margin-top: 0; font-size: 28px; }
code { background: #1f2937; padding: 2px 6px; border-radius: 6px; }	

Опционально .env для локального запуска

На проде порт задаёт панель, но локально удобно так:


PORT=3000
NODE_ENV=development

В ISPmanager .env обычно не обязателен. Не забудьте не коммитить секреты.

Деплой на shared-хостинг в ISPmanager

  • Создайте сайт/домен в ISPmanager (раздел «WWW-домены»).
  • Загрузите проект (через файловый менеджер, Git или SFTP) в корень сайта/в папку приложения.
  • Установите зависимости: откройте терминал/SSH - cd my-express-app - npm install.
  • Node.js-приложение:
    • В разделе Node.js укажите:
      • Версию Node.js (LTS/актуальная)
      • Стартовый файл: app.js
      • Команда запуска (если требуется): npm start или просто node app.js
      • Переменные окружения: обычно PORT подставляется автоматически панелью; если требуется — добавьте вручную (например, PORT=8080).
    • Привяжите приложение к домену/поддомену (панель сама настроит прокси веб-сервера к вашему процессу)
  • HTTPS: включите Let’s Encrypt в карточке домена
  • Перезапуск: используйте кнопку «Перезапустить» в приложении Node.js (или перезапуск через панель) после обновлений

Если панель просит указать порт руками — задайте, например, 8080, но слушать в коде нужно process.env.PORT (панель проксирует к нему).

Частые вопросы

На shared-хостинге прямой доступ к порту обычно закрыт: запросы идут через веб-сервер (Nginx/Apache) по домену. Используйте домен, а не :порт.
В ISPmanager есть просмотр логов приложения. Плюс morgan логирует в stdout — его видно в логах процесса.
Залили изменения - npm install (если менялись зависимости) - перезапуск процесса в панели.

Мини-чек-лист перед продом

Приложение слушает process.env.PORT.
Статические файлы раздаются из public/.
Есть /health для проверки статуса.
404 и 500 обрабатываются.
Включён HTTPS (Let’s Encrypt).

Реквизиты: Украина, 61202, Харьков, пр. Людвига Свободы 26/298.
ФО-П Харитинов Олег Сергеевич
IBAN: UA073052990000026001005905889
МФО 305299
ИНН 2961615658
ПАТ КБ "ПриватБанк"
mail:
Документы:
Служба поддержки: телефон + 380 57 7209279
создать тикет

Выберите язык