Предисловие



Пришла мне в голову смелая мысль, взяться за написание туториала по разработке на node.js (что-то наподобие ruby.railstutorial.org). Так как я первый раз берусь за подобный труд то для для меня очень важен любой фидбэк. Нужно это — не нужно. Что стоит убрать а на чем остановиться подробнее, в общем любая конструктивная критика. Надеюсь что дело пойдет и вам понравится, в этом случае по мере написания буду выкладывать главы на хабр.

Вступление



Приветствую, перед вами небольшой учебник по практической разработке на node.js, с использованием фреймворка express. Я с большим энтузиазмом отношусь к node и сопутствующим технологиям. Node.js в первую очередь привлекает свежестью в подходах к разработке, смелостью и драйвом.

О том, что такое node.js вы можете прочитать на http://nodejs.org/, если коротко — то это серверная платформа, для выполнения javascript. Так же мы будем использовать express, web-фреймворк построеный на концепции middleware (о том, что это такое, поговорим поподробнее чуть позже)

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

Хочется отметить, что очень большое влияние на меня оказал railstutorial, это лучшее пособие по web-разработке, которое я встречал, и мне очень хотелось бы создать нечто подобное для node.js.

Глава 1. Старт



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

1.1 Рабочее окружение



Так как я в основном использую в работе linux, а если точнее — Ubuntu 12.04, основная часть инструкций по установке тех или иных инструментов будет ориентирована на ползователей линукс, но я буду стараться по возможности давать ссылки на инструкции и для других ОС.

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

Так что, первое что мы сделаем — это...

1.1.1 Установка git



Пользователи apt-based дистрибутивов могут выполнить в терминале:

$ sudo apt-get install git-core


Остальные отправляются читать инструкции по адресу http://git-scm.com/book/ch1-4.html

1.1.2 Установка node.js и npm



Теперь пришло время поставить последнюю стабильню версию node.js и npm (установщик пакетов для node). Инструкции по установке разных ОС можно найти здесь. Для установки на ubuntu выполняем:

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs npm


Если есть желание — можно запустить консоль node и поиграться с интерпретатором javascript.

1.1.3 Среда разработки



Тут каждый волен выбирать по своему вкусу, лично меня вполне устраивает gedit с установленным набором плагинов gmate. Вполне подходят Netbeans или Webstorm.

1.1.4 Express и первое приложение



Теперь пришло время познакомиться с фреймворком express. Фреймворк очень простой, и вполне приемлемо документированный.

Устанавливаем express глобально:

$ sudo npm install -g express


Создаем директорию для наших учебных проектов:

$ mkdir -p ~/projects/node-tutorial
$ cd ~/projects/node-tutorial


Создаем проект и устанавливаем зависимости:

$ express first-app
$ cd first-app && npm install


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

Теперь приложение можно запустить:

$ node app


И увидеть результат работы http://localhost:3000/

1.2 Система контроля версий



Теперь, когда у нас уже есть рабочее приложение, более подробно коснемся работы с сисемой контроля версий. Для того чтобы лучше познакомиться с работой git, стоит почитать книжку Pro Git, но можно и обойтись инструкциями в данном учебнике.

1.2.1 Настройка git



Для более комфортной работы с git стоит сначала указать свои личные данные:

$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com


И настроить алиасы для наиболее часто используемых комманд:

$ git config --global alias.co checkout
$ git config --global alias.ci commit


1.2.2 Работа с git



Git настроен и можно размещать наше приложение в репозитории, инициализируем новый репозиторий:

$ git init


Добавляем директорию с зависимостями приложения в gitignore:

$ echo 'node_modules' > .gitignore


Помещаем все файлы в индекс и создаем первый коммит:

$ git add .
$ git ci -m "Initial commit"


1.2.3 GitHub



После размещения кода проекта в репозитории пришло время выложить проект на GitHub. GitHub — это социальная сеть и хостинг для проектов. Огромное число opensource проектов хостится на гитхабе, так что если вы там е��е не зарегистрированы — самое время сделать это.

Перед тем как работать с GitHub нужно будет создать RSA ключи для доступа по ssh. Процедура описана тут. Для пользователей linux привожу инструкцию по созданию ключей если их у вас еще нет.

$ ssh-keygen -t rsa -C "your_email@youremail.com"


Отвечаем на вопросы генератора, после чего копируем содержимое файла ~/.ssh/id_rsa.pub:

$ sudo apt-get install xclip
$ xclip -sel clip < ~/.ssh/id_rsa.pub


После этого нужно пройти по ссылке Account Settings, зайти в раздел SSH Keys и нажать кнопку Add SSH Key и вставить ключ из буфера обмена в поле Key. Затем сохранить.

Проверить что ключ работает можно так:

$ ssh -T git@github.com


Возможно вы увидете предупреждение:

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?


Нужно просто ответить 'yes' и тогда, если ключ успешно добавился, вы увидите ответ сервера:

Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.


Когда ключи настроены создаем новый репозиторий с названием first-app и дефолтными настройками, после чего выкладываем код на гитхаб:

$ git remote add origin git@github.com:ваш_ник_на_гитхабе/first-app.git
$ git push -u origin master


1.3 Разворачиваем приложение



Теперь наступает самый волнующий этап, мы будем разворачивать приложение на хостинге.
Для этого воспол��зуемся услугами облачной системы деплоя Heroku. Если вам интересно как работает хостинг Heroku, советую поизучать их раздел How it Works

1.3.1 Настройка Heroku



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

Пользователи ubuntu выполняют:

$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh


Когда установка завершится, нужно будет залогиниться из коммандной строки:

$ heroku login


1.3.2 Размещаем приложение на heroku



Теперь наше окружение полностью готов к выкладке на хостинг. Размещение node.js проекта на Heroku требует еще нескольких действий, вы можете почитать об этом в документации или просто выполнить инструкции.

В файле package.json нашего проекта, нужно указать версии ноды и npm, package.json должен выглядеть так:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.0.x",
    "jade": "*"
  },
  "engines": {
    "node": "0.8.x",
    "npm": "1.1.x"
  }
}


Теперь в корне проекта создаем файл Procfile:

$ echo 'web: node app.js'  > Procfile


Проверяем что все запускается с помощью менеджера процессов:

$ foreman start


Приложение должно быть доступно на http://localhost:5000/

Добавляем файлы в репозиторий:

$ git add .
$ git ci -m "Added Procfile and engines"
$ git push


Создаем приложение на heroku:

$ heroku create
$ heroku keys:add ~/.ssh/id_rsa.pub
$ git push heroku master


Набираем:

$ heroku open


и любуемся задеплоеным приложением.