Для проверки работы Ваших проектов на наших VDS предлагаем Вам льготный период, оформите заказ на 3 дня.
Мини-приложение на Express, которое:
Подходит для быстрого старта, тестов и простых лендингов/мини-сервисов.
my-express-app/ |-- package.json |-- app.js |-- .env (опционально, для локального запуска) |-- public/ | `-- style.css `-- views/ `-- index.html
Папки public и views можно переименовать; в коде это настраивается.
{ "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" } }
// 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}`); });
<!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>
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; }
На проде порт задаёт панель, но локально удобно так:
PORT=3000 NODE_ENV=development
В ISPmanager .env обычно не обязателен. Не забудьте не коммитить секреты.
Если панель просит указать порт руками — задайте, например, 8080, но слушать в коде нужно process.env.PORT (панель проксирует к нему).
Приложение слушает process.env.PORT. Статические файлы раздаются из public/. Есть /health для проверки статуса. 404 и 500 обрабатываются. Включён HTTPS (Let’s Encrypt).