Раньше ты был счастливым front-end разработчиком — верстал странички, подключал к ним AngularJS и даже оседлал Gulp. Но истерия вокруг NodeJS не прошла мимо тебя и в один не очень прекрасный день ты решил сделать свой проект на Node. И все шло прекрасно, проект отлично работал по адресу localhost:3000 и это странное сладостное чувство «full stack разработчик» легким перышком щекотало твою душу. До тех пор, пока в твоей голове не возник вопрос о
Ведь тебе никто не сказал, что мифический «full stack» должен знать не только front и back, но и уметь настроить сервер, установить нужные пакеты, задеплоить и собрать проект.
То чувство, когда тебя предали… Вытесняя тяжелые мысли ты стал искать статьи в интернете и наткнулся на этот текст.
Статья рассчитана на новичков. Просьба убрать от экрана слабонервных беременных админов.
А теперь серьезно — где захостить небольшой «домашний» NodeJS-проект? Собственного сервера (и тем более админа) — у вас нет. Heroku, Nodejitsu и другие варианты — слишком дорого. Решение:
1. Арендуем любой VDS-хостинг, желательно с шаблоном CentOS 6.
2. Подключаемся к нему по SSH. Если ваш
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, то скорее всего ты получили
На этом пожалуй все. Тебе еще многое предстоит узнать — о том, насколько безумно отключать iptables, почему плохо запускать приложения из под рута, зачем нужен nginx если Node и сама умеет отдавать статику, чем плохи глобальные npm-плагины и почему тебе не нужен forever. Но это всё потом. А сейчас быстрей беги менять свой статус в Фейсбуке — вместо в активном поиске front-end разработчик напиши Full stack web developer.
Автор: zapolnoch