Skip to content

Хостинг Node.js на Heroku, часть первая

20/05/2010

Не так давно облачный хостинг Heroku объявил о начале бета-тестирования поддержки Node.js. Я, само собой, не мог пройти мимо такой возможности и зарегистрировался бета-тестером🙂. И вот недавно мне пришло приглашение. Здесь я хочу описать первые впечатления от хостинга.

Имейте в виду: чтобы воспользоваться хостингом Node на Heroku, вам надо зарегистрироваться в качестве бета-тестера (отправив письмо на nodejs@heroku.com с вашим адресом и описанием для чего Вы хотите использовать Node.js). Регистрация бесплатная, хостинг тоже, но с ограничениями — по количеству открытых соединений и по продолжительности соединения 30 секунд (имейте в виду, любители Comet — можно работать и с таким ограничением, но не очень удобно).

Установка Heroku

Т.к. Heroku — изначально инструмент для ruby-программистов, нам потребуется Ruby и инсталлятор gem. Как поставить их на Вашу платформу, можете узнать в Интернете (я не могу описать все варианты). Также необходим git. Когда у нас есть необходимые компоненты, делаем:


gem install heroku
    

Gem должен скачать и установить приложение heroku. Подробнее об установке и возникающих проблемах можно почитать в официальной документации Heroku.

Hello, world!

Для испытаний хостинга нам нужен какой нибудь простенький скрипт. Я взял стандартный «Hello, world» из документации: создаём сервер, слушаем на заранее заданном Heroku порту (process.env.PORT):


var http = require('http'),
    port = process.env.PORT || 8001;

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(parseInt(port));
        

Файл должен называться server.js, чтобы хостинг его опознал как node-приложение. Heroku использует git для управления проектом, поэтому коммитим наш скрипт в локальный репозиторий (он будет создан на этапе создания приложения):


git add .
git commit -m "Initial commit"
        

Теперь надо связать репозиторий с серверами Heroku:


heroku create our-app-name
        

Вот так. Наше приложение теперь связано с серверами хостинга и отображается в нашем аккаунте на heroku.com, но пока на руби-хостинге. Теперь разберёмся с типом сервера.

Меняем тип сервера

Heroku предлагает несколько вариантов сервера (называемых stacks). Node поддерживается только на экспериментальном стеке beech. Посмотреть все стеки можно командой:

heroku stack

Вывод будет примерно таким:

* aspen-mri-1.8.6
  bamboo-ree-1.8.7 (beta)
  bamboo-mri-1.9.1 (beta)
  beech-node-edge (beta)
    

Текущий стек отмечен астериском (сейчас это aspen-mri). Чтобы использовать Node нам надо переключиться на beech-node-edge:

heroku stack:migrate beech-node-edge

В принципе, используемый стек можно было указать сразу при создании проекта:

heroku create our-app-name --stack beech-node-edge

Heroku должен сказать что нибудь типа «Migration prepared». Теперь надо отправить изменения на сервера Heroku:

git push heroku master

Если Ваш исполняемый файл называется server.js, проблем быть не должно: Heroku примет его и начнёт размещение на сервере. Наш проект будет доступен по адресу our-app-name.heroku.com

Теперь можно экспериментировать. В документации Heroku написано что поддерживаются фреймворки (в частности Express), чуть позже я попробую с его помощью написать и запустить что нибудь более осмысленное.

Ссылки по теме

7 комментариев
  1. Denis Shepelin permalink

    Очень интересно: а как быть с нативными расширениями? К примеру базы данных .

    • Позже их можно будет ставить из package manager’а, сейчас этот вопрос решается в индивидуальном порядке. Коннектор Postgres насколько я знаю кому то предоставляется.

      • Denis Shepelin permalink

        Только из manager’a? Или можно будет любую библиотеку привязать , к примеру opencv?

        • Пока готовятся к использованию менеджеров, потом может ещё что нибудь придумают. Если в проекте нужен OpenCV, они скорее всего пойдут навстречу и соберут его. Поддержка Node на хостинге — вещь в большой степени экспериментальная, каких то устоявшихся норм тут пока нет.

  2. Привет! Мы запилили поддержку Node.js на всех тарифных планах виртуального хостинга (не на VDS/VPS и не на облаке, а на shared!) и сейчас очень нуждаемся в обратной связи, а для этого нужно больше живых проектов на Node.js.

    У всех тарифов есть бесплатный тестовый период: https://sprinthost.ru. Регистрируйтесь, создавайте приложение, присылайте замечания, пожелания и вопросы на support@sprinthost.ru или в группу https://vk.com/sprinthost, мы будем бесконечно благодарны.

    Что нужно знать:
    В каталоге с приложением ( ~/domains/example.org/public_html ) создаем файл app.js со следующим содержимым:
    require(‘/home/login/domains/example.org/public_html/index.js’);
    process.chdir(‘/home/login/domains/example.org/public_html’);

    Создаем файл .htaccess в этом же каталоге и добавляем в него правило:
    PassengerStartupFile app.js
    PassengerResolveSymlinksInDocumentRoot on
    Require all granted
    PassengerAppType node
    PassengerAppRoot /home/login/domains/example.org/public_html
    Options -MultiViews

    Для работы приложений у нас используется Phusion Passenger https://www.phusionpassenger.com/#about

Trackbacks & Pingbacks

  1. progg.ru
  2. Хостинг Node.js на Joyent « nodeJS

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: