Облачный сервис 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):
- на странице subdomen’ов видим две записи: одну с CNAME и одну без (она скорее всего сверху)
- нажимаем на ту, которая без CNAME
- ничего не меняя, нажимаем на “Forward to a URL”
-
вводим как на картинке (опять-таки заменяя lexev.org на нужный домен):
-
в итоге мы должны получить такие subdomen’ы:
Вот теперь кажется все. Какое-то время понадобиться, чтобы новые dns серверы заработали для домена. По обращению lexev.org будет идти редирект на www.lexev.org. Ну а www.lexev.org указывает на приложение openshift.
Напоследок скажу, что openshift так же поддерживает PHP, Ruby, Java, Node.js, Perl !