Настройка и запуск NodeJS приложения

Быстрая настройка и простая поддержка NodeJS приложения

Под катом я поделюсь опытом нескольких дней исследований, проб и ошибок в процессе настройки NodeJS проекта на Ubuntu Server. В рамках руководства, мы пройдем по следующим темам:

  • Вечный запуск процесса NodeJS аппликации и вывод на публику
  • Базовая настройка NoSQL базы данных MongoDB
  • Авто-запуск и менеджмент приложения

Введение

Прежде чем мы начнем, сразу предупрежу — приведенные ниже материалы описывают процессбазовой настройки окружения, не учитывая большие нагрузки. Приведенных в пример настроек должно хватить на первые запуски проекта и тем более для поддержки внутренних инструментов на NodeJS.

Что бы не раздувать руководство, мы начнем с момента, когда вы уже запустили Ubuntu Server и имеетеNodeJS на борту. Лично я предпочитаю DigitalOcean как VPS хостинг, где за 5$ можно быстро и удобно получить нужные мощности, а так же большой набор гайдов на английском.

Если у вас есть какие либо замечания, смело оставляйте их в комментариях что бы я мог внести их в руководство.

Вечный процесс

Начнем с самого простого — авто-запуск процесса при падании и удобный менеджмент NodeJS приложения. Тут нам спешит на помощь один из инструментов ранее упомянутого проекта Nodejitsu —forever.

Ставится forever как и обычная глобальная NodeJS аппликация:

$ [sudo] npm install forever -g

После чего вы можете запустить любое NodeJS приложение простой командой:

forever start app.js

И легко управлять процессом (или процессами) с помощью перечисленных команд:

forever list
forever stop app.js
forever restart app.js

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

forever start  -l /var/log/app.js.log -a app.js

Где мы определяем путь к файлу с логами приложения, и указываем параметр append для склеивания логов.

На заметку

Процесс по умолчанию записывается на пользователя, который его запустил. Это значит, что если вы запустите forever через sudo, то и команды forever list/stop и подобные, нужно будет запускать тоже через sudo.

Если же вы хотите запустить приложение в определенном окружении:

NODE_ENV=production forever start  -l /var/log/app.js.log -a app.js

Доступ из сети

Если вы запускаете веб сервер на ноде и хотите что бы он был доступен из глобальной сети, нужно лишь открыть необходимые порты. В Ubuntu Server стандартные порты (80, 8080) по умолчанию открыты, но открыть другие не составит никаких проблем:

sudo iptables -A INPUT -p tcp dport 777 -j ACCEPT

Вместо 777 поставьте номер необходимого порта.

80 порт

80 порт является стандартным для веба, но что бы запустить NodeJS процесс на этому порту, нужно запускать аппликацию от sudo, что далеко не всегда удобно и теоретически не безопасно.

Что бы принимать трафик с 80 порта на порт вашего приложения (например 8080) можно сделать простое перенаправление:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 

Эту команду необходимо запускать каждый раз при запуске системы, как автоматизировать этот процесс я опишу ниже в руководстве.

Немного сложней, но надежней будет настроить nginx для перенаправления портов и распределения нагрузки между несколькими демонами и серверами.

На OSx, что бы удобно заходить на приложение по прямой ссылке тоже можно настроить перенаправление с авто-настройкой при запуске системы, но уже по чуть более сложной схеме. Ранее я подготавливал небольшое руководство по упомянутой настройке OSx.

MongoDB

Чаще всего с NodeJS используют MongoDB как решение для NoSQL базы данных. Что бы установить ее на Ubuntu, следуем этим простым шагам.

Что бы включить MongoDВ как сервис, активизируя авто-запуск в том числе, вводим команду:

sudo service mongodb start 

Настройки базы можно найти по этому пути /etc/mongodb.conf, там же сразу рекомендую включить авторизацию, что по умолчанию отключена:

auth=true

Это включит авторизацию для удаленных пользователей, оставив локальный доступ открытым. Что бы получить удаленные доступ к базе, можете создать пользователей в базе с любыми правами.

В качестве интерфейса для работы с базой, можно использовать Robomongo для OSx.

Авто-запуск проекта

Что бы спать спокойно, не волнуясь, что из за сбоя операционной системы или вины хостинг провайдера упадет ваше приложение, настраиваем сервис для авто-запуска.

Я подготовил заготовку скрипта на примере проекта DevShelf для сервиса Ubuntu. Вам останется лишь заполнить настройки:

NAME=devshelf                            # Название сервиса
SOUREC_DIR=/home/user/devshelf           # Путь до приложения
COMMAND=node                             # Команда запуска
SOURCE_NAME=app.js                       # Файл запуска приложения
USER=user                                # Пользователь от которого запускать процесс
NODE_ENVIROMENT=production               # Node environment

Логи приложения, судя по скрипту, будут доступны в директории /var/log/$NAME.log.

Поместите скрипт в директорию /etc/init.d/ с удобным именем, например /etc/init.d/app, после чего даем нужные права и прописываем в авто-загрузку:

sudo chmod a+x /etc/init.d/app
sudo update-rc.d app defaults

Теперь нам будут доступны следующие команды:

sudo service app start
sudo service app status
sudo service app restart
sudo service app stop   

iftop спасает мир или как понять кто кладет канал

В дни безлимитного интернета уже никого не удивишь офисным 100-мегабитным каналом. И не смотря на то что домашний интернет стал дешевый как грязь, не перевелись люди которые предпочитают платить 150 рублей в месяц за 2-х мегабитный канал дома, и качать любимые сериалы или хрен-знает-что в офисе забивая всем остальным канал.

Понятное дело что нас могут спасти всякого рода шейперы, блокировки торрентов и прочие полезные вещи (и чтрого говоря так и надо делать), но бывает что конфигурация нужна максимально простая, и нужно понимать кто «ипортил интернет». Я в свое время писал разные программы, которые снифают траффик на  роутере и выясняют кто все испортил.

Однако существует прекрасная утилита, которая называется iftop. запускаем ее с ключами iftop -n -i em1 (где em1 — ваш внутренний интерфейс) и сразу видим негодняя. Дальше добавляем его в таблицу nonat или просто идем и рассказываем как настроить торрент клиент, что бы он занимал полосу не более 5-6 мегабит.

 

Удачи.
Толик, тебе отдельный привет =)

.netrc — FTP-автологин

Файл ~/.netrc позволяет запоминать логин и пароль и создавать макросы для команды ftp:

machine ftp.freebsd.org
    login anonymous
    password edwin@mavetju.org

machine myownmachine
    login myusername
    password mypassword

macdef uploadtest
    cd /pub/tests
    bin
    put filename.tar.gz
    quit

macdef dailyupload
    cd /pub/tests
    bin
    put daily-$1.tar.gz
    quit

Не забудьте сменить файлу права доступа, чтобы ваши пароли не подсмотрели посторонние:

$ chmod 0600 ~/.netrc

Подробнее о синтаксисе .netrc можно прочитать здесь.

Этот же файл для аутентификации понимает Net::FTP

Остановка перезагрузки windows 8 (windows 2012 server)

Всем привет!

И так, бывает такая замечательная ситуация, сидишь, работаешь себе. И поставил что-то делать на продолжительное время, например видео рендерить! и вот оно уже рендерится час, и еще час осталось. А тут Windiws на тебе: «На компьютер установлены обновления, компьютер будет перезагружен через 15 минут». Блииин! Ну зачем это? И комп неминуемо перезагрузится, это же ужас!

И тут, на выручку к нам приходит командная строка:
Открываем командную строку от имени администратора и вводим туда: NET STOP WUAUSERV

Служба обновления выключается, и комп никуда не перезагрузится. Только потом не забудьте сами его перезагрузить!