Раньше ты был счастливым 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.ru:3000 в своем js-файле нужно слушать порт 80
listen(80)
Если у тебя есть ISPmanager, то скорее всего ты получили VDS с установленным Apache. Отключи его в разделе Система-Службы, чтобы Node могла спокойно слушать 80 порт.
На этом пожалуй все. Тебе еще многое предстоит узнать — о том, насколько безумно отключать iptables, почему плохо запускать приложения из под рута, зачем нужен nginx если node и сам умеет отдавать статику и десятки других очень увлекательных вопросов. Но это всё потом. А сейчас быстрей беги менять свой статус на Facebook — вместо в активном поиске front-end разработчик напиши Full stack web developer.
ссылка на оригинал статьи https://habrahabr.ru/post/281705/
Добавить комментарий