Сегодня озадачился вопросом, как запустить node.js приложение на постоянной основе на centos 6 или Windows.
В данном посте речь пойдет о Weinre (WEb INspector REmote) - так как наши тестеры очень хотели получить возможность его использовать централизованно.
Главная проблема состоит в том, что node.js, несмотря на все свои преимущества, не предоставляет "в коробке" какого-либо инструментария для хостинга приложений, потому - надо изобретать свой собственный велосипед 🙂
Данная инструкция будет состоять из двух пунктов: CentOS (по сути, остальные *nix дистрибутивы будут схожи) и Windows.
CentOS:
Перед тем как начать собственно развертывание node.js приложения (в данном случае Weinre), необходимо установить Development tools (для компиляции):
yum -y groupinstall "Development Tools"
Далее, надо скачать наиболее актуальную версию node.js (Nodejs.org, на данный момент это v0.10.29) и собрать:
cd /usr/src wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz (надежнее будет склонировать сорцы git clone git://github.com/joyent/node.git) tar zxf node-v0.10.29.tar.gz cd node-v0.10.29.tar.gz ./configure make && make install
После выполнения этой части у нас есть готовая сборка node.js на сервере.
Далее, надо установить сам weinre:
npm -g install weinre
Следующая задача - сделать так, чтобы это счастье не требовало ручного запуска. Тут можно и нужно, по моему мнению, использовать сервисы.
Вот gist, который нужно положить в /etc/init.d/ с именем weinre и "активировать":
chkconfig weinre on service weinre start
Разумеется, юзер от имени которого запускается этот сервис должен уметь писать в log, читать и запускать weinre, писать в /var/lock/subsys.
Теперь, после ребута сервера node.js приложение weinre будет запускаться и слушать входящие подключения на всех ip адресах сервера на порту 3000.
В принципе, на этом можно остановиться. А можно еще немножко поддекорировать, и сделать так, чтобы сервим работал на стандартном 80 (ну, а для тех кто увлечен безопасностью - на 443) порту.
Для этого надо установить nginx:
yum install nginx
Создать хост (тут зависит от версии nginx):
nano /etc/nginx/conf.d/weinre.conf
В данном файле должен быть следующий контент:
upstream app_cluster_1 { server 127.0.0.1:3000; } server { listen 0.0.0.0:80; server_name weinre.local weinre; access_log /var/log/nginx/nodetest.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://app_cluster_1/; proxy_redirect off; } }
Что заставит выводит наше приложение по адресам http://weinre.local или http://weinre. И финальный штрих:
service nginx reload
Данный гайд довольно таки прост и не рассматривает такие нюансы, как перезагрузка node.js приложения по изменению, а так же ротацию лог файлов, однако - это тема для будущих постов
В этой части поста были использованы следующие ресурсы:
- http://people.apache.org/~pmuellr/weinre/docs/latest/Running.html
- http://wavded.tumblr.com/post/475957278/hosting-nodejs-apps-on-centos-5
- https://www.digitalocean.com/community/tutorials/how-to-install-and-run-a-node-js-app-on-centos-6-4-64bit
- http://serverfault.com/questions/496169/running-node-js-at-boot
Windows:
С Windows все значительно проще... Так как я сам это не делал, я просто оставлю ссылку на блог знаменитого человека, и вообще крутого типа: http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx