Установка node.js на VPS

в 18:34, , рубрики: node.js, метки:

В этой статье я расскажу, какие проблемы прийдется решить, чтобы получить VPS с реально работающим node.js сервисом. Это все элементарные вещи, но, может быть, кому-нибудь еще пригодится.

Установка node

Проблема: в репозитории может не оказаться пакета для нужной версии node. Как вариант, у вас может быть два проекта, требующих разные версии node.
Решение: на девелоперских машинах в таких случаях используют nvm. На боевом сервере его тоже можно запросто использовать, просто прийдется написать специальный скрипт для запуска своего сервера.

Доступ к 80-му порту

Проблема: приложение должно обладать правами суперпользователя для того, чтобы читать порт 80 (подробнее см CAP_NET_BIND_SERVICE, man capabilities). Но запуск node с такими правами считается небезопасным.
Решения:

  • использовать проксирующий сервер типа Nginx или HAProxy.
  • перенаправить запросы с 80-го порта на какой-нибудь с большим номером с помощью iptables. Делается практически одной командой: iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
  • стартовать-таки с правами суперпользователя, но сразу после соединения с сокетом процесс будет программно понижать свои привилегии. Подробнее здесь.

Балансировка нагрузки

Проблема: node однопоточный и не может эффективно использовать многоядерные процессоры.
Решения:

Использовать node напрямую или через Nginx?

Вопрос много где обсуждался, но единого мнения нет. С одной стороны, nginx — надежное, проверенное годами решение; с другой — node сам по себе умеет все тоже самое.

Как правило, предлагается один из тех вариантов:

  • node занимается сразу всем, вплоть до раздачи статических файлов.
  • node стоит за haproxy.
  • node стоит за Nginx'ом и используется только для генерации страниц, все остальное (раздача статики, балансировка, работа https) делает Nginx

Перезапуск упавшего процесса

Проблема: как возобновить работу сервера, если он вдруг упадет?
Решения:

Обновление сервиса с помощью git

Описано здесь

Автор: beardog

Поделиться

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