Налаштування середовища розробки Hapi.js за допомогою ServBay
Hapi.js — це потужний та гнучкий фреймворк для Node.js, який ідеально підходить для створення застосунків та API. ServBay пропонує Node.js розробникам зручне локальне середовище, інтегруючи середовище виконання Node.js, різноманітні бази даних і простий у налаштуванні веб-сервер. У цій статті ви дізнаєтесь, як створити та виконати проект Hapi.js у середовищі ServBay, використовуючи функціонал Сайти для доступу до нього, а також підключати вбудовані бази даних ServBay.
Що таке Hapi.js?
Hapi.js — це потужний та гнучкий фреймворк для Node.js, розроблений Walmart Labs для створення застосунків та сервісів. Він славиться своєю гнучкою системою плагінів, підходом орієнтованим на конфігурацію й вбудованими інструментами безпеки, що дозволяє розробникам ефективно будувати високопродуктивні та підтримувані веб-застосунки й API.
Основні особливості та переваги Hapi.js
- Система плагінів: Hapi.js має потужну та зручну систему плагінів, що дозволяє легко розширювати функціонал фреймворку або організовувати бізнес-логіку у вигляді повторно використовуваних модулів.
- Конфігураційний підхід: Фреймворк орієнтується на налаштування через конфігурацію, дозволяючи чітко визначати маршрути, валідацію, кешування та інші поведінки.
- Валідація вхідних даних: Вбудована бібліотека Joi забезпечує декларативну перевірку даних, зберігаючи їх цілісність і безпеку.
- Розвинена екосистема: Активна спільнота, багато офіційних і сторонніх плагінів для авторизації, кешування, логів та інших типових задач.
- Безпека: Вбудовані засоби для захисту від поширених веб-уразливостей, таких як валідація вхідних даних або CORS-контроль.
- Логування й налагодження: Детальні логи життєвого циклу запитів і зручні інструменти для дебагу.
З Hapi.js розробник може сфокусуватися на бізнес-логіці, доручаючи фреймворку обробку складних HTTP-операцій, маршрутизації, валідації й питань безпеки.
Створення проекту Hapi.js у ServBay
У цьому розділі описано, як створити й запустити базовий проект Hapi.js у середовищі Node.js, наданому ServBay, а також налаштувати функціонал Сайти (реверсивний проксі) для зручного доступу.
Передумови
Перед початком переконайтеся, що:
- Ви вже встановили ServBay на macOS.
- Ви активували Node.js у розділі Пакети у додатку ServBay. Це можна зробити на вкладці "Пакети" у контрол-панелі ServBay.
- Ви знайомі з основами роботи у терміналі та npm.
Створення проекту Hapi.js
Ініціалізація директорії проекту
Відкрийте термінал і перейдіть у рекомендовану кореневу директорію сайтів ServBay:
/Applications/ServBay/www
. Створіть папку проекту (наприклад,servbay-hapi-app
) і увійдіть у неї:bashcd /Applications/ServBay/www mkdir servbay-hapi-app cd servbay-hapi-app
1
2
3Ініціалізація Node.js проекту
Виконайте ініціалізацію нового проекту Node.js через npm:
bashnpm init -y
1У результаті у корені з’явиться файл
package.json
.Встановлення залежності Hapi.js
Встановіть основну бібліотеку Hapi.js:
bashnpm install @hapi/hapi
1Це додасть
@hapi/hapi
до залежностей вашого проекту.Створіть головний файл застосунку
У кореневій директорії створіть файл
server.js
зі наступним кодом для запуску простого сервера Hapi.js:javascript'use strict'; // Увімкнення суворого режиму const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: process.env.PORT || 3000, // За замовчуванням слухає порт 3000 або PORT з середовища host: 'localhost' // Слухає локальний інтерфейс }); // Визначення простого кореневого маршруту server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello from Hapi.js powered by ServBay!'; } }); // Запуск сервера await server.start(); console.log('Server running on %s', server.info.uri); }; // Обробка неочікуваних помилок (Unhandled Promise Rejection) process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); // Завершити процес }); // Виклик функції init для запуску застосунку init();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33Даний код створює сервер Hapi, що слухає локальний порт (за замовчуванням 3000) і має простий GET-обробник для кореня
/
.
Запуск у режимі розробки та налаштування сайту у ServBay
Під час розробки ви можете напряму запускати Node.js-додаток і використовувати реверсивний проксі ServBay для його відображення на кастомному домені, отримуючи також локальний SSL-сертифікат.
Запуск Hapi.js серверу для розробки
Переконавшись, що ви знаходитеся у директорії
servbay-hapi-app
, запустіть файлserver.js
з Node.js. Щоб працювати із реверсивним проксі ServBay, задайте специфічний порт, наприклад,8585
:bashPORT=8585 node server.js
1Сервер стартує та покаже URI на кшталт
Server running on http://localhost:8585
. Не закривайте це вікно терміналу — сервер працює.Налаштування сайту (реверсивного проксі) у ServBay
Відкрийте додаток ServBay, перейдіть у розділ "Сайти" і натисніть кнопку "+" у лівому нижньому куті для додавання сайту.
- Назва (Name):
ServBay Hapi Dev
(довільно, для ідентифікації у списку) - Домен (Domain):
servbay-hapi-dev.servbay.demo
(рекомендується домен.servbay.demo
аби уникнути конфлікту з реальними, та скористатися локальним CA сертифікатом ServBay) - Тип сайту (Type):
Реверсивний проксі (Reverse Proxy)
- Проксувати на (Proxy to):
- Протокол (Protocol):
http
- IP-адреса (IP Address):
127.0.0.1
(Node.js сервер на локальному інтерфейсі) - Порт (Port):
8585
(має відповідати портові запуску server.js)
- Протокол (Protocol):
Натисніть "Додати" для застосування. ServBay автоматично налаштує веб-сервер (наприклад, Caddy або Nginx) для реверсивного проксі з
https://servbay-hapi-dev.servbay.demo
наhttp://127.0.0.1:8585
, і також випустить довірений SSL сертифікат для домену.servbay.demo
(через ServBay User CA). Ви зможете безпечно звертатись до локального сервера через HTTPS.Якщо потрібна детальніша інструкція — дивіться документацію з налаштування сайтів у ServBay.
- Назва (Name):
Доступ до Hapi.js застосунку під час розробки
Відкрийте браузер і перейдіть за налаштованим доменом:
https://servbay-hapi-dev.servbay.demo
. Ви побачите сторінку із написом "Hello from Hapi.js powered by ServBay!"Тепер усі зміни у файлі
server.js
(або автоматичне перезавантаження за допомогою утиліт типу nodemon) одразу будуть доступні за цим доменом через реверсивний проксі ServBay.
Деплой версії для продакшн (приклад)
У продакшн часто потрібен більш надійний процес-менеджмент (наприклад, PM2) та особливі налаштування. Нижче приклад запуску додатку на іншому порту із використанням реверсивного проксі ServBay:
Запуск серверу Hapi.js у продакшн-режимі
Запустіть застосунок на іншому порту (наприклад,
8586
) із продакшн-конфігурацією:bashPORT=8586 NODE_ENV=production node server.js
1(Примітка: у реальному продакшн середовищі рекомендуємо управляти Node.js-процесами через PM2 чи подібні інструменти для стабільної роботи, автоматичного рестарту тощо. ServBay також підтримує інтеграцію з PM2.)
Налаштування продакшн-сайту у ServBay (реверсивний проксі)
У вкладці "Сайти" знову натисніть "+" і додайте новий сайт:
- Назва (Name):
ServBay Hapi Prod
- Домен (Domain):
servbay-hapi-prod.servbay.demo
- Тип сайту (Type):
Реверсивний проксі (Reverse Proxy)
- Проксувати на (Proxy to):
- Протокол (Protocol):
http
- IP-адреса (IP Address):
127.0.0.1
- Порт (Port):
8586
- Протокол (Protocol):
Натисніть "Додати".
- Назва (Name):
Доступ до Hapi.js продакшн-застосунку
Відкрийте браузер і перейдіть за адресою
https://servbay-hapi-prod.servbay.demo
. Ви побачите той же результат, що й у режимі розробки (якщо не передбачено іншої логіки у коді залежно відNODE_ENV
), але додаток працює у продакшн-конфігурації на іншому порту.
Функціонал Сайти у ServBay дозволяє зручно управляти кількома локальними або тестовими доменами, зв’язуючи їх із окремими інстансами Hapi.js (та будь-яких Node.js) на різних портах.
Підключення до баз даних, наданих ServBay
ServBay вбудовано підтримує різні СУБД: MySQL, MariaDB, PostgreSQL, MongoDB, Redis. Далі коротко описано, як підключатися до них із проекту Hapi.js.
Важливо: Насамперед переконайтеся, що у розділі "Пакети" додатку ServBay активовані й запущені потрібні вам пакети баз даних. Перевірити статус роботи сервісів можна через панель керування ServBay.
Типові дані для входу (за замовчуванням):
- MySQL/MariaDB: Користувач
root
, парольpassword
- PostgreSQL: Користувач
user
, парольpassword
- MongoDB: Без аутентифікації (за замовчуванням)
- Redis: Без аутентифікації (за замовчуванням)
Зверніть увагу: З міркувань безпеки, обов’язково змініть стандартні паролі для баз даних при роботі у серверному або тестовому середовищах, особливо якщо ServBay доступний з інших пристроїв! Для цього у ServBay є функція скидання пароля root для MySQL, MariaDB, PostgreSQL — див. інструкцію по зміні пароля.
Нижче приклади підключення до різних баз даних. Для початку встановіть через npm відповідну бібліотеку-клієнт.
Підключення до MySQL
Встановіть клієнт MySQL:
bashnpm install mysql2 # або mysql
1Приклад коду для підключення (використовуючи
mysql2
):javascriptconst mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', // Стандартний користувач ServBay password: 'password', // Стандартний пароль ServBay database: 'servbay_hapi_app' // Замініть на назву вашої бази даних }); connection.connect(err => { if (err) { console.error('Error connecting to MySQL: ' + err.stack); return; } console.log('Connected to MySQL as id ' + connection.threadId); }); // Для закриття з’єднання при потребі // connection.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Підключення до MariaDB
Встановіть клієнт MariaDB:
bashnpm install mariadb
1Приклад коду для підключення:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', // Стандартний користувач ServBay password: 'password', // Стандартний пароль ServBay database: 'servbay_hapi_app', // Замініть на свою базу даних connectionLimit: 5 // Кількість підключень у пулі }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); // conn.query(...) — тут можете виконувати ваші запити conn.release(); // Повернути з’єднання у пул }) .catch(err => { console.error("Not connected to MariaDB due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Підключення до PostgreSQL
Встановіть клієнт PostgreSQL:
bashnpm install pg
1Приклад коду для підключення:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', // Стандартний користувач ServBay host: 'localhost', database: 'servbay_hapi_app', // Замініть на вашу БД password: 'password', // Стандартний пароль ServBay port: 5432, // Стандартний порт PostgreSQL }); pool.connect((err, client, done) => { if (err) { console.error('Error connecting to PostgreSQL: ', err); return; } console.log('Connected to PostgreSQL'); client.query('SELECT NOW()', (err, res) => { done(); // Звільнити клієнта if (err) { console.error('Error executing query', err.stack); } else { console.log('PostgreSQL current time:', res.rows[0].now); } }); }); // Пул з’єднань закриється автоматично під час виходу з програми // pool.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Підключення до MongoDB
Встановіть клієнт MongoDB:
bashnpm install mongoose # або mongodb
1Приклад коду для з’єднання (через
mongoose
):javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-hapi-app', { useNewUrlParser: true, useUnifiedTopology: true, // Стандартний MongoDB у ServBay не потребує авторизації; якщо налаштовано, додайте authSource, user, pass // authSource: 'admin', // user: 'your_username', // pass: 'your_password', }) .then(() => console.log('MongoDB connected')) .catch(err => console.error('MongoDB connection error:', err)); // З’єднання активно протягом всього життєвого циклу застосунку // Для відключення: mongoose.connection.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Підключення до Redis
Встановіть клієнт Redis:
bashnpm install redis
1Приклад коду для підключення:
javascriptconst redis = require('redis'); // Використовується стандартний localhost:6379 const client = redis.createClient(); client.on('error', function (err) { console.error('Redis Error: ' + err); }); client.on('connect', function () { console.log('Redis client connected'); }); // Підключення до сервера Redis client.connect(); // Для redis v4+ потрібен виклик connect() // Приклад встановлення й отримання значення // async function exampleRedisUsage() { // await client.set('mykey', 'myvalue'); // const value = await client.get('mykey'); // console.log('Value from Redis:', value); // await client.del('mykey'); // } // exampleRedisUsage(); // Закриття з’єднання при завершенні роботи програми // client.quit();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Інтегрувавши приведені зразки у застосунок на Hapi.js, ви зможете використовувати будь-які з баз даних, які пропонує ServBay.
Висновки
ServBay значно спрощує налаштування середовища розробки для Hapi.js на macOS. Ви отримуєте універсальне рішення: легке встановлення та менеджмент середовища виконання Node.js, готові до роботи бази даних, а функціонал Сайти (з реверсивним проксі та автоматичним SSL) максимально прискорює організацію локального доступу. Дотримуючись кроків цієї інструкції, ви швидко запустите свій проект на Hapi.js й зможете ефективно користуватися всіма перевагами ServBay у роботі.