пятница, 27 мая 2011 г.

Развертываем Perl приложение на DotCloud

Немного про PSGI
Спецификация PSGI стала очень важным(переломным) моментом в мире разработки Perl веб-приложений. По сути, произошло отделение протокола взаимодействия с веб-сервером от API фреймворка, что позволило запускать PSGI приложения в любом окружении(возможно стоит про это написать отдельный пост :) ). Все современные фреймворки поддерживают PSGI.

Как выглядит PSGI приложение?
PSGI приложение это просто ссылка на функцию. Эта функция принимает ссылку на хеш с описанием окружения и возращает ссылку на массив с трех элементов(статус, хидеры, боди)
sub app {
    my $env = shift;
    return [
        '200', 
        [ 'Content-Type' => 'text/plain' ],
        [ "Hello World" ], # or IO::Handle-like object
    ];
}

Если хотите попробовать, то установите себе Plack c cpan и запустите:
plackup  -e 'sub {my $env=shift; return [200, [Content-Type => "text/plain"], ["Welcome home, $env->{QUERY_STRING}"]] }'
Затем откройте в браузере http://localhost:5000/?Dude

Приложения на базе Mojolicious и Dancer  умеют работают в режиме PSGI.

Теперь ближе к сабжу - разворачиваем наше приложение
Dotcloud - это платформа для развертывания ваших приложений. C Dotcloud Вы можете забыть про настройку веб-сервера. Просто выполняем "dotcloud deploy myapp" и приложение готово к использованию :). Для примера,  возьмем приложение c поста - "Пример приложения на Mojolicious ( не Lite )". ( Предварительно необходимо завести себе аккаунт на dotcloud.com и установить клиент - sudo easy_install dotcloud. )


Вытягиваем себе приложение с github:
git clone git://github.com/koorchik/FastNotes-Proto.git ~/FastNotes-Proto

Создаем наше приложение mynotes(можете выбрать другое имя) на dotcloud:
dotcloud create mynotes

Добавляем сервис "www" (можете выбрать другое имя):
dotcloud deploy --type perl mynotes.www

Разворачиваем и запускаем наше приложение
dotcloud push mynotes.www ~/FastNotes-Proto

Готово, теперь ваше приложение развернуто и доступно для использования по адресу http://www.mynotes.dotcloud.com/

Требования к приложению
  1. Это должно быть PSGI-приложение.
  2. Исполняемый файл PSGI-приложения должен лежать в самом корне и иметь имя app.psgi. Для FastNotes-Proto я просто создал симлинк app.psgi -> script/fastnotes.pl
  3. Должен быть Makefile.PL для определения завимостей приложения.
Для Fastnotes-Proto я сделал следующие изменения - коммит

Использование базы данных(допустим mysql)
Просто добавляем новый сервис:
dotcloud deploy -t mysql mynotes.db
И смотрим параметры подключения:
dotcloud info mynotes.db

Использование собственного доменного имени
Если у Вас есть собственное доменное имя, то можете использовать его
Нужно к сервису добавить алиас

dotcloud alias add mynotes.www www.mynotes.com

В ответ получите что-то типа:
Ok. Now please add the following DNS record:
www.mynotes.com. IN CNAME gateway.dotcloud.com.
Просто добавляете предложенную DNS запись.

Что еще поддерживает Dotcloud?
Для просмотра поддерживаемых типов сервисов выполните:
dotcloud deploy -h

You can chose among the following services:
  java          host any Java servlet (also Clojure, Play!, and much more) 
  mongodb       scalable, high-performance, document-oriented database     
  mysql         the world's most popular open source database              
  nodejs        run JavaScript processes (including web apps)              
  perl          host any Perl/PSGI web app: Plack, Mojolicious, Dancer...  
  php           host any PHP web app: Drupal, WordPress...                 
  php-worker    run background PHP processes                               
  postgresql    the world's most advanced open source database             
  python        host any Python/WSGI web app: Django, Pylons, Web2py...    
  python-worker run background Python processes                            
  rabbitmq      AMQP message queue server                                  
  redis         advanced key-value store                                   
  ruby          host any Ruby/Rack web app: Rails, Sinatra...              
  ruby-worker   run background Ruby processes                              
  smtp          authenticated SMTP relay to send e-mails reliably          
  static        host static HTTP content


Если что-то пошло не так
Можно просмотреть логи:
dotcloud logs mynotes.www
Или зайти в облако по ssh:
dotcloud ssh mynotes.www

PS: Cам я  узнал про dotcloud с твиттера Себастьяна Риделя(автора Mojolicious) так же у него есть пост на эту тему.

4 коммент.:

Анонимный комментирует...

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

cygakob комментирует...

>> давно хотелось там что-нибудь развернуть, даже инвайт получил.
а как инвайт получить?
я отправил запрос, но вот сутки не приходит ответа.

koorchik комментирует...

Мне инвайт тоже не сразу пришел. В течении недели возможно придет.

Анонимный комментирует...

что такое PSGI понятно. А вот где хоститься с ним можно не понятно.

Отправить комментарий

Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)