Хостим своє перше NodeJS-додаток

Раніше ти був щасливим front-end розробника — верстав сторінки, підключав до них AngularJS і навіть осідлав Gulp. Але істерія навколо NodeJS не пройшла повз тебе і в один не дуже прекрасний день ти вирішив зробити свій проект на Node. І все йшло чудово, проект відмінно працював за адресою localhost:3000 і це дивне приємне відчуття «full stack розробник» легкою пір'їнкою лоскотало твою душу. До тих пір, поки в твоїй голові не виникло питання про хостинг.
Адже тобі ніхто не сказав, що міфічний «full stack» повинен знати не лише front і back, але і вміти налаштувати сервер, встановити потрібні пакунки, задеплоить і зібрати проект.
То почуття, коли тебе зрадили… Витісняючи важкі думки ти став шукати статті в інтернеті і натрапив на цей текст.

Стаття розрахована на новачків. Прохання прибрати від екрану слабкодухих вагітних адмінів.
А тепер серйозно — де захостить невеликий «домашній» NodeJS-проект? Власного сервера (і тим більше адміна) — у вас немає. Heroku, Nodejitsu і інші варіанти — надто дорого. Рішення:

1. Орендуємо будь VDS хостинг (є навіть безкоштовні), бажано з шаблоном CentOS 6.

2. Підключаємося до нашого VDS по SSH. Якщо ваш хостинг-провайдер встановив ISPmanager, то можна скористатися веб Shell-клієнтом (у розділі «Інструменти»).

3. Вводимо команду yum repolist і переконуємося, що пакет NodeJS доступний в репозиторії EPEL. Якщо його немає, то додаємо:
rpm -ivh http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
yum install npm --enablerepo=epel

4. Щоб перевірити установку, введи команду node і який-небудь «hello world»-код
[root@habr ~]# node
> console.log("Hello world")
Hello world
undefined

Добре, установка пройшла успішно. Двічі натиснемо «Ctrl + C».

5. Тепер давай спробуємо запустити не просто скрипт, а веб-додаток. Створи папку (наприклад sample) і завантажте в неї test.js яким зручним способом (vim, git, ISP, FTP) з наступним кодом:
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(3000);
console.log('Server running at port 3000');

6. Тепер запустимо код використовуючи Node-команду:
[root@habr sample]# node test.js
Server running at port 3000

7. Програма працює на порту 3000. Відкрий браузер і переконайтеся, що за адресою http://IPaddress:3000 ти отримуєш потрібну сторінку. Якщо сторінка недоступна, то відключи firewall (Iptables) на сервері:
[root@habr sample]# service iptables stop
[root@habr sample]# chkconfig iptables off

Тепер все має працювати відмінно. Однак при будь-яких збоях, сайт не зможе відновити роботу самостійно. Щоб додаток «прокидалося» після падіння, використовуй демонизатор forever.

8. Встанови пакетний менеджер npm:
wget https://npmjs.org/install.sh
sh install.sh

і відразу ж пакет forever:
[root@habr sample]# npm install forever -g

9. Запустимо тестове додаток з допомогою forever
[root@habr sample]# forever start test.js

Список запущених через forever додатків можна отримати командою forever list. Можна перезавантажувати і зупиняти програми по їх ID:
[root@habr sample]# forever restart 1
[root@habr sample]# forever stop 1
[root@habr sample]# forever stopall
[root@habr sample]# forever restartall

Використовуй опцію -w для автоматичного перезапуску після зміни файлів:
[root@habr sample]# forever start test.js -w

10. Щоб додаток працювало за адресою site.ru, а не за site.ua:3000 у своєму js-файлі потрібно слухати порт 80
listen(80)

Якщо у тебе є ISPmanager, то швидше за все ти отримали VDS з встановленим Apache. Відключи його в розділі Система-Служби, щоб Node могла спокійно слухати 80 порт.

На цьому мабуть все. Тобі ще багато чого належить дізнатися про те, наскільки шалено відключати iptables, чому погано запускати програми з під рута, навіщо потрібен nginx якщо Node і сама вміє віддавати статику і десятки інших дуже цікавих питань. Але це все потім. А зараз швидше біжи змінювати свій статус на Facebook — замість в активному пошуку front-end розробник напиши Full stack web developer.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.