2.10.1. Загальна інформація про Node.js
Увага!
Повноцінна робота Node.js підтримується тільки на бізнес-хостингу. На віртуальному хостингу Node.js можна використовувати лише в консолі, і не можна запускати сайти та застосунки, які мають прослуховувати порти та бути доступними ззовні. При зміні тарифу з бізнес-хостингу на віртуальний хостинг сайти на Node.js перестануть працювати.Схема роботи Node.js на хостингу
Node.js працює на хостингу так само, як на VPS або виділеному сервері, але з проксуванням HTTP-трафіку в Node.js- застосунок.
Проксування HTTP-трафіку необхідне для можливості захисту вашого застосунку від DDoS-атак і надання вам додаткових можливостей нашого хостингу, наприклад встановлення безкоштовного SSL-сертифіката від Let's Encrypt, кешування статичних файлів і т. д. Без проксування HTTP-трафік не дійде до вашого застосунку. Якщо HTTP-трафік вам не потрібен, можете запускати застосунок без нього — все працюватиме.
Доступно два типи проксування:
- За сокетом. Під час запуску застосунку створюється сокет-файл, у який проксується весь HTTP-трафік. Перевага такого підходу — інтерфейс сокета сам по собі працює швидше проксування за IP-адресою, недолік — не всі популярні фреймворки вміють запускати HTTP-сервер за сокетом і в налаштуваннях приймають тільки параметри
--hostі--port. Якщо у вас є можливість запустити HTTP-сервер за сокетом — радимо зробити саме це, якщо такої можливості немає — використовуйте проксування за IP-адресою. - За IP-адресою. HTTP-трафік проксується через локальну IP-адресу. Це організовано наступним чином. Ми видаємо вам унікальну локальну IP-адресу виду
127.*.*.*, де*— будь-яке число від 0 до 255, і порт за замовчуванням —3000. Ви в налаштуваннях свого застосунку вказуєте ці значення. Залежно від вашого фреймворка ці параметри можуть вказуватися по-різному, але в більшості — це параметри запуску застосунку--hostі--port. Примітка За наявності виділеного IP на нього безпосередньо можна приймати будь-який вид трафіку по будь-якому порту. Для використання виділеного IP його потрібно явно вказувати другим параметром уserver.listen(port, ip).
Тип проксування вибирається в налаштуваннях сайту під час увімкнення Node.js (див. нижче). Дані для використання вибраного типу виводяться на сторінці налаштувань Node.js. Також вони містяться у змінних оточення: process.env.PORT і process.env.HOST (відповідно, шлях до сокета і порожнє значення у разі проксування за сокетом або порт і IP- адреса у разі проксування за IP-адресою).
Порядок обробки запиту:
- Запит надходить на загальний сервер через порт 80 або 443.
- На основі імені хоста перенаправляється застосунку відповідно до вибраного типу проксування — на сокет потрібного сайту або локальну IP-адресу.
- Застосунок отримує дані, обробляє їх і повертає відповідь.
Порядок запуску застосунку
- Відкрийте розділ «Налаштування сайту».
- Виберіть веб-сервер Node.js, потрібну версію, тип проксування HTTP-трафіку і збережіть зміни:

- Розмістіть файли вашого застосунку в кореневому каталозі сайту — завантажте файли готового проекту або встановіть за допомогою npm.
- Додайте скрипт з командою
startуpackage.json. - Натисніть «Перезапустити» у налаштуваннях Node.js.
Можливі проблеми:
- У разі запуску HTTP-сервера не з нашим сокетом (при проксіруванні за сокетом) — застосунок продовжить роботу, але на сайті буде помилка 502.
- У разі запуску HTTP-сервера не з нашою IP-адресою і портом (при проксуванні за IP-адресою) — застосунок завершить роботу через кілька секунд із кодом помилки
9. - У разі запуску HTTP-сервера тільки з портом, без вказання хоста (при проксируванні за IP-адресою) — застосунок займе порт глобально і заважатиме запуску застосунків на інших хостах у межах хостинг-акаунта. Рішення — вказати хост у
app.listen(). - Помилка 502 у загальному випадку означає, що ми не можемо знайти, куди проксувати ваш трафік. Зазвичай це трапляється, коли застосунок запускається з некоректною IP-адресою, портом або сокетом (див. вище), або коли запуск застосунку завершився невдачею.
- У разі падіння застосунку через будь-яку внутрішню помилку наша система Supervisor відстежить це і спробує перезапустити застосунок протягом 10 секунд. Вона робитиме спроби доти, доки ваш застосунок не запуститься і не почне працювати.
Якщо вам потрібно запустити застосунок з консолі і ви використовуєте проксування за IP-адресою, то під час запуску явно вказуєте IP-адресу і порт:
HOST=127.*.*.* PORT=3000 node index.js
Замість 127.*.*.* та 3000 підставте IP-адресу та порт зі сторінки настроювань Node.js.
Загальна інформація
Примітки:
- Якщо node і npm не видно в консолі — переконайтеся, що в хостинг-акаунті існують файли
.bashrcі.bash_profileі вони не містять помилок.
npm
npm — пакетний менеджер Node.js. Дозволяє встановлювати додаткові пакети безпосередньо на хостингу. Для використання достатньо підключитися по SSH і в каталозі сайту виконати необхідні команди.
Команди:
npm -v— перегляд поточної версії npm.npm install пакет(абоnpm i пакет) — встановлення пакета. Після встановлення з'явиться підкаталогnode_modules, в якому буде знаходитися встановлений модуль.npm uninstall пакет— видалення пакета.
package.json
package.json — файл конфігурації та керування пакетами npm.
Параметри:
name(обов'язковий) — назва застосунка маленькими латинськими літерами без пробілів, для розділення слів можна використовувати символи-і_.description— опис застосунка.dependencies— секція з інформацією про всі пакети, що використовуються застосунком.
Команда npm init — створює файл з нуля. Перед створенням запитуються всі необхідні дані. Наприкінці потрібно ознайомитися з вмістом майбутнього файлу і якщо все гаразд, ввести yes. Примітка Можна на всі запитання просто натискати Enter, тоді буде створено файл зі стандартним вмістом.
Налаштування Node.js
Керування роботою застосунка Node.js виконується в розділі «Налаштування Node.js».
Статус застосунка
Блок «Статус застосунка»:
- «Статус застосунка» — поточний статус роботи сервісу Node.js:
- «Запущено» — сервіс запущений і працює.
- «Зупинено» — не запущений (наприклад, через відсутність
package.json) або зупинений через помилку, що виникла.
- «Команда для запуску» — наявність у файлі
package.jsonскрипта з командоюstart:- «Присутня» — скрипт знайдено.
- «Відсутня» — скрипт не знайдено.
- «Примусовий перезапуск» — перезапуск сервісу. ⚠️ Обов'язково потрібно натискати після будь-яких змін файлів.
- «Примусова зупинка» — зупинка сервісу. Кнопка відображається тільки при запущеному застосунку.
Основні налаштування
Блок «Основні налаштування»:
- Шлях до сокета або IP-адреса і порт (залежно від типу проксування).
- Ім'я змінної оточення з шляхом до сокета або змінних з портом і IP-адресою (залежно від типу проксування). Примітка Примусово передається в кожен застосунок під час його запуску.
- Приклад коду, який має бути в застосунку, для прослуховування трафіку сайту.
Запуск застосунку
Блок «Запуск застосунка» — містить команду, яку потрібно додати в package.json для запуску застосунка (./index.js у команді — шлях до головного файлу застосунка, назва файлу може бути будь-якою):
Ваш package.json
Блок «Ваш package.json» — показує поточний вміст файлу package.json з кореневого каталогу сайту (оновлюється під час відкриття або перезавантаження сторінки налаштувань):
У разі виявлення у файлі синтаксичних помилок у блоці виводитиметься повідомлення «Файл містить помилки». Якщо повідомлення про помилку виводиться при працюючому застосунку, значить застосунок був запущений до появи помилки у файлі.
Логи застосунка
Блок «Логи застосунка» — виведення логів застосунка в реальному часі. Включає інформацію, яку застосунок у процесі роботи виводить у консоль.
Повний лог знаходиться у файлі виду ~/.system/nodejs/logs/www.example.com.log, де замість www.example.com буде назва вашого сайту.
Приклади застосунків
Hello, World!
- У кореневому каталозі сайту створіть два файли:
- Файл конфігурації
package.json:{ "name": "node", "version": "1.0.0", "scripts": { "start": "node ./index.js" } } - Файл застосунка
index.js:const HTTP = require('http'); const WebServer = HTTP.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!'); }); WebServer.listen(process.env.HOST, process.env.PORT, () => { console.log(`Server is running.`); });
- У налаштуваннях Node.js натисніть «Перезапустити».
- Відкрийте сайт у браузері — у разі успіху має виводитися текст «Hello, World!».
З використанням npm і фреймворка express
- Підключіться до хостингу по SSH.
- Перейдіть у кореневий каталог сайту (в команді використовуйте свої дані):
cd example.com/www - Ініціалізуйте npm і встановіть фреймворк express:
npm init && npm i express - У кореневому каталозі сайту створіть файл застосунка
index.js:const express = require("express"); const app = express(); app.get("/", function(request, response){ response.end("Hello from Express!"); }); app.listen(process.env.PORT); - Відредагуйте файл
package.jsonі додайте в нього команду запуску:"scripts": { "start": "node ./index.js" }Під час додавання команди дотримуйтесь синтаксису JSON!
Команду потрібно додавати не просто в кінець файлу, а з дотриманням стандартного синтаксису формату JSON:- Секція
scriptsне повинна дублюватися. Якщо вона вже є у файлі, додайте командуstartтуди. - Наприкінці попереднього рядка на тому самому рівні вкладеності має бути кома.
- Порядок вкладеності дужок має бути коректним.
- У налаштуваннях Node.js натисніть «Перезапустити».
- Відкрийте сайт у браузері — у разі успіху має виводитися текст «Hello from Express!».
але в прикладі для Express "app.listen(process.env.PORT);" вказано тільки порт...