Облачный сервис Openshift

Я знаю немного хостингов с бесплатным тарифом и с поддержкой python. Это Google App Engine и Alwaysdata. И вот недавно узнал про замечательный проект Openshift от RedHat, на котором и работает этот блог. Для начала небольшой обзор упомянутых хостингов.

Google app engine

Основной недостаток google app engine - ограниченный набор библиотек, которые можно использовать. Конечно, чисто python библиотеки можно ставить, но те, которые требуют C компиляции - нет. К примеру, не получится использовать pycurl. Так же на GAE используются особые базы данные, так что и библиотеки для работы с ними - тоже особые. Отсюда запуск приложения на django не так прост, ведь djangо работает только с SQL базами данных. Плюс django можно использовать на текущий момент только версий 1.2, 1.3 (а уже есть 1.4). На всякий случай, полезные линки: список поддерживаемых библиотек, проект django-rocket-engine.

Alwaysdata

На бесплатном тарифе от alwaysdata опять-таки нельзя устанавливать библиотеки, требующие C компиляцию. Но здесь имеются привычные базы данных - mysql, postgres, mongodb. Так что обычное django приложение можно запустить без проблем. Я часто использую этот хостинг для демонстрации несложных проектов.

Теперь непосредственно про openshift.

Openshift

Openshift - это PaaS, т.е. платформа как сервис. Мы не получаем root доступ к операционной системе. Систему нам предоставляет сервис в работающем виде, мы же можем делать только некоторые дозволенные действия. Похоже на упомянутый app engine, но здесь гораздо больше свободы.

В первую очередь мне понравилось, что там можно установить многое вручную. Какую хочешь версию python, django. Желаешь SQL/Postgres/mongodb в качестве базы данных - пожалуйста. Можно устанавливать библиотеки, компилировать их. Есть дополнительные плюшки: cron, статистика, phpmyadmin и прочее. Здесь я упомянул django, но можно сделать приложение и на другом фреймворке, просто это то, что я пробовал.

Удобный способ загрузки приложения на сервер. Просто делаешь git push special_application_url из своего git-репозитория, и все! Файлы автоматически обновляются на сервере, сервер перезапускается. Процессом перезапуска можно управлять с помощью специальных скриптов. Например, можно указать в скрипте установить нужные библиотеки из requirements.txt, собрать статические файлы (manage.py collectstatic) и т.д. Этот скрипт будет выполняться каждый раз при обновлении сервера.

В бесплатном режиме предоставляется 1 Gb дискового пространства и 3 малых ‘gear’. Насколько я понял, gear - это некое изолированное окружение со своим объемом RAM. Для малой gear размер RAM равен 512. Если приложению не хватает мощности одной gear, то подключается вторая, третья и т.д. Если проще, то вот нагрузка, которую должен выдержить типовой сайт на DLE на бесплатном тарифе (из описания на openshift):

15 страниц в секунду, сотни страниц на сайте, 50к посетителей в месяц. Для простого сайта вполне достаточно.

На один аккаунт можно создать 3 приложения (по крайне мере бесплатно). Конечно, есть вероятность, что эту халяву прикроют через какое-то время. Но существующий код всегда можно будет запустить на другом хостинге - здесь нет особенностей, как на google app engine. Ну или купить платный аккаунт на openshift.

В принципе, на openshift подробно написано, что нужно сделать для создания и запуска приложения. Опишу свой опыт.

Шаги для запуска приложения на python 2.7.3 + django

  • регистрируемся
  • устанавливаем git (если еще нет)
  • устанавливаем особую программу “rhc” (можно обойтись и без нее, но с ней удобнее), описание в разделе get-started
  • следуем инструкциям https://github.com/ehazlett/openshift-diy-py27-django (простое приложение без базы данных)
  • либо следуем инструкциям https://github.com/st4lk/lexev (приложение с mysql, собственно код этого блога)

Все! Приложение доступно по адресу http://<app_name>-<namespace>.rhcloud.com/

Привязка к домену

Но нет, не совсем все. Хотелось бы иметь нормальный адрес … Допустим, у нас уже есть свой домен (например lexev.org). Давайте теперь привяжем наше приложение к этому домену.

У openshift нет dns серверов, которые можно было бы прописать для домена. Вместо этого они предлагают сделать привязку к домену с помощью CNAME. Это можно сделать в панели управления домена.

Эх, все бы хорошо, но я покупал домен на nic.ru. Там, чтобы сделать CNAME привязку нужен дополнительный платный доступ… Но, как оказалось, есть выход! Воспользуемся бесплатным сервисом freedns.afraid.org.

Итак,

  • регистрируемся на freedns.afraid.org
  • указываем DNS сервера к нашему домену:

      ns1.afraid.org
      ns2.afraid.org
      ns3.afraid.org
      ns4.afraid.org
    
  • добавляем домен на afraid.org: http://freedns.afraid.org/domain/add.php, в моем случае это lexev.org. Не забудем выбрать Shared State: Private, а то к нашему домену сможет привязаться любой пользователь afraid.org

  • для нашего вновь добавленного домена добавляем subdomen с типом CNAME, как на картинке (конечно заменяя lexev.org на нужный домен и указывая верный url приложения в поле destination):

    afraid.org CNAME

  • на странице subdomen’ов видим две записи: одну с CNAME и одну без (она скорее всего сверху)
  • нажимаем на ту, которая без CNAME
  • ничего не меняя, нажимаем на “Forward to a URL”
  • вводим как на картинке (опять-таки заменяя lexev.org на нужный домен):

    afraid.org Forward to a URL

  • в итоге мы должны получить такие subdomen’ы:

    afraid.org subdomain

Вот теперь кажется все. Какое-то время понадобиться, чтобы новые dns серверы заработали для домена. По обращению lexev.org будет идти редирект на www.lexev.org. Ну а www.lexev.org указывает на приложение openshift.

Напоследок скажу, что openshift так же поддерживает PHP, Ruby, Java, Node.js, Perl !