Хостим свое первое NodeJS-приложение

в 10:08, , рубрики: javascript, node.js, деплой, Разработка веб-сайтов

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

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

1. Арендуем любой VDS-хостинг, желательно с шаблоном CentOS 6.

2. Подключаемся к нему по 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 для автоматического рестарта после изменения файлов (чтобы было как в твоем любимом supervisor'е):

[root@habr sample]# forever start test.js -w

10. Чтобы приложение работало по адресу site.ru, а не по site.ru:3000 нужно слушать порт 80 в своем js-файле:

listen(80)

Если у тебя есть ISPmanager, то скорее всего ты получили VDS с установленным Apache. Отключи его в разделе Система-Службы, чтобы Node могла спокойно слушать 80 порт.

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

Автор: zapolnoch

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js