Для перевірки роботи Ваших проектів на 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).