Python на облачном хостинге Infobox Jelastic: запускаем Django CMS

Jelastic — многоязыковая платформа как сервис. Сначала была добавлена поддержка Java, затем PHP и Ruby, но на этом разработчики не остановились. Месяц за месяцем вытачивалась новая для Jelastic платформа — Python. В этой статье будет рассказано, как развернуть Django CMS на Infobox Jelastic.


В конце статьи информация о том, как получить 300 рублей на счет для экспериментов с Infobox Jelastic.

ЧаВо по Python в Jelastic


В Jelastic поддерживается веб-сервер Apache для хостинга приложений Python. Реализована поддержка Apache + mod_wsgi.
Вы можете воспользоваться одной из 3х версий Python:
  • 2.7
  • 3.3
  • 3.4

Все версии предустановлены в контейнеры Python. Пользователь может выбрать необходимую версию при создании окружения и изменить, при необходимости, в процессе работы.

Развертывание приложений

Вы можете просто развернуть приложение Python:

1. с помощью архива или ссылки





2. Через GIT/SVN

GIT Infobox Jelastic

Вы можете развернуть только одно Python приложение на окружение. Оно будет развернуто в ROOT по умолчанию. Конечно, вы можете воспользоваться и SSH для развертывания приложения.

Когда вы разворачиваете пакет, его корень должен содержать следующие файлы:
  • requirements.txt с именами всех модулей Python, необходимых приложению;
  • application – скрипт точки входа для запуска вашего приложения с Apache mod_wsgi


Управление пакетами/модулями

Для успешного развертывания и запуска приложения Python могут потребоваться некоторые дополнительные модули или другие пакеты. Управление требуемым ПО организовано через pip, популярную систему управления пакетами Python.

Для загрузки и установки модулей Python есть два способа:
  • Написать список требуемых модулей в requirements.txt и положить файл в корень пакета с проектом. Скрипт развертывания прочитает файл и установит необходимые модули с помощью pip автоматически;
  • Соединиться с вашим контейнером через SSH и использовать следующие команды:

pip install {package_name} – для установки необходимого модуля;
pip uninstall {package_name} – для удаления установленного модуля;
pip install –upgrade{package_name} – для обновления конкретного модуля до последней версии;
pip install -r requirements.txt – для установки всех модулей из requirements.txt;
pip list — для просмотра уже установленных модулей.

Используя дополнительные команды и их параметры вы можете указать предпочитаемые модули и версии, настроить разрешение зависимостей, показать информацию об установленных модулях или поискать необходимый в репозитории PyPI. Для дальнейшего ознакомления с pip рекомендуем руководство пользователя.

Мониторинг логов

Jelastic создает следующие файлы логов, доступные в Python WSGI:
  • access_log-{дата}
  • error_log-{дата}

Вы можете посмотреть логи, кликнув на кнопку Log на контейнере Apache в вашем окружении. Здесь вы можете проследить все действия, выполняемые с вашим окружением Python.

Доступные фреймворки

В настоящий момент Jelastic поддерживает следующие фреймворки на Python:
  • Django
  • Flask

Вы можете развернуть различные приложения Python, основанные на этих фреймворках. Ниже мы покажем, как разворачивать DjangoCMS, а в следующей статье посмотрим на Quokka CMS (основанной на Flask).

Развертывание DjangoCMS


Django – фреймворк с открытыми исходными текстами для приложений Python. Он помогает упростить процесс создания сложных веб-приложений, каждое из которых может состоять из набора подключаемых модулей. Давайте посмотрим на преимущества использования Django в Infobox Jelastic и связки Apache + mod_wsgi на примере организации хостинга приложения на Django CMS.

Создание окружения

Создадим окружение для Python в Infobox Jelastic. Зарегистрируйте аккаунт на http://infobox.ru/hosting/cloud/ (бесплатно активируется пробная версия), залогиньтесь в панель управления и нажмите кнопку «Создать окружение».



Перейдите к вкладке «Python». Apache будет выбран автоматически. Укажите минимальный и максимальный лимиты доступных ресурсов (с Python работает автомасштабирование Jelastic, позволяющее оплачивать за потребляемые ресурсы по факту без необходимости резервирования ресурсов), введите имя окружения (например «django») и нажмите Create.



  • Вы можете также выбрать одну из предоставляемых версий Python: 2.7, 3.3, 3.4. Выбирая, учитывайте информацию о совместимости Django.
  • Если вы развертываете большое и посещаемое приложение, мы рекомендуем добавить отдельный контейнер с базой данных для вашего приложения. В остальных случаях можно использовать встроенную базу данных SQLite, которая будет размещена внутри контейнера приложений.

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

Infobox Jelastic Django

Теперь мы можем непосредственно приступить к развертыванию DjangoCMS одним из следующих способов:
  • построение и развертывание нового приложения;
  • развертывание существующего приложения.

Построение и развертывание Django CMS

1. Сгенерируйте и добавьте публичный SSH ключ в вашу панель управления.

2. Установите соединение по SSH с контейнером Apache вашего окружения.

3. После входа в контейнер, убедитесь, что вы находитесь в домашней директории вашего пользователя:
cd ~

4. Вы должны создать виртуальное окружение вашего приложения внутри контейнера. Это позволит вам изолировать окружение Python и устанавливать пакеты без необходимости получения привилегий администратора.
virtualenv virtenv

5. Активируйте и переключитесь на созданное виртуальное окружение.
source virtenv/bin/activate

6. Теперь, давайте установим набор модулей, требуемых Django.
pip install django django-cms   djangocms_video  djangocms_teaser djangocms_picture djangocms_link  django-reversion djangocms_inherit  djangocms_googlemap djangocms_flash djangocms_file  djangocms_column djangocms-installer  djangocms_text_ckeditor djangocms_style

Через несколько минут операция завершится.
7. Сотрите предустановленное приложение по умолчанию и создайте новое для Django CMS.
rm -rf ROOT; djangocms -p . ROOT

8. После выполнения вышеприведенной команды вам зададут несколько дополнительных вопросов по настройке нового приложения.
Уделите особое внимание настройке базы данных:
  • Если вы выбрали использование отдельной базы данных (MySQL контейнер при создании окружения Jelastic), укажите строку подключения:
    mysql://mysql-{env_name}.app.jelasticloud.com, где {env_name} – имя контейнера базы данных.
  • Если вы предпочитаете использовать встроенную базу данных SQLite, введите следующую строку:
    sqlite://localhost/ROOT/project.db

Завершите оставшиеся шаги мастера установки вводом необходимых параметров или оставив параметры по умолчанию (отображаются в конце строки в квадратных скобках).

Infobox Jelastic Django hosting

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

Infobox Jelastic Python Django CMS admin credentials
10. Введите следующую команду для создания нового файла и указания точки входа для mod_wsgi модуля:
vim ROOT/application

Нажмите «i» для перехода в режим редактирования и вставьте следующие строки:
import os,sys
virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
        execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
        pass


sys.path.append('/opt/repo')
sys.path.append('/opt/repo/ROOT')

os.environ['DJANGO_SETTINGS_MODULE'] = 'ROOT.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Сохраните изменения и закройте Vim, нажав Esc и написав ":wq".

12. Введите команду:
vim ROOT/settings.py

В открывшемся файле найдите и замените строку:
STATICFILES_DIRS = (
        os.path.join(BASE_DIR, ‘ROOT’, ‘static’),
)

следующим содержанием:
STATICFILES_DIRS = (
        os.path.join(BASE_DIR, ‘ROOT’, ‘static_local’),
)

Сохраните изменения и закройте Vim.



Создайте новую поддиректорию для статического контента:
mkdir ROOT/static_local

и, наконец, запустите синхронизацию ресурсов:
./manage.py collectstatic

Введите «yes», если система запросит подтверждения.

Это все! Теперь вы можете кликнуть «Открыть в браузере» и насладиться Django CMS.



Вы увидите экран приветствия.



Для доступа к панели администрирования Django CMS добавьте /admin в конец URL окружения. Для доступа используйте введенные вами при установке Django CMS учетные данные суперпользователя.



Развертывание существующего приложения Django

Если вы заранее собрали и упаковали приложение Django, процедура развертывания может быть выполнена всего за несколько шагов, как показано ниже.

Не забудьте про необходимость наличия requirements.txt и application файлов в пакете. Пример в предыдущем разделе.

1. Загрузите пакет с приложением Django в Диспетчер дистрибутивов.



2. Нажмите «Развернуть в...» и выберите необходимое окружение.



3. Подождите минутку окончания развертывания и нажмите «Открыть в браузере».



Это все! Приятной работы с приложением на Django.


Заключение


Мы очень счастливы представить Вам поддержку Python в Infobox Jelastic с обеспечением возможности гибкого масштабирования приложений и автоматизациями Jelastic. Мы постарались упростить разработку и запуск приложений Python на платформе Infobox Jelastic без Vendor–lock на быстром и надежном оборудовании.

Попробуйте сейчас и получите 300 рублей на счет Infobox Jelastic. Зарегистрируйтесь и по окончании триала нажмите кнопку «Перейти на платную версию». Заполните информацию о себе. Пришлите ваш логин нам и мы начислим вам бонус (из статей бонус можно получить 1 раз на 1 аккаунт).

Успешного использования Infobox Jelastic!
Infobox
Компания
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 9

    +1
    Процедура деплоя выглядит адовенько. А как обновлять приложение? Есть инфраструктура вокруг контейнера с приложением но внутри какой-то production-driven development. Вы бы лучше сделали поддержку docker-контейреров, которые можно было встраивать в вашу инфраструктуру, масштабировать и ставить за балансировщик.
      0
      Мы показали деплой 2х видов. Простой способ оставили на конец статьи в разделе «Развертывание существующего приложения Django». Идея про Docker просто отличная, очень совпадает с нашим видением будущих обновлений платформы Infobox Jelastic (это мы так пытаемся уйти от комментария на эту тему раньше времени, но намекнуть :) )
        0
        Процедура вполне стандарта для python приложений, requirements.txt есть почти во всех популярных приложениях. В этом случае происходит автоматическое разворачивание приложения.

        Приложение обновляется по очереди на каждой ноде, если деплоить с дашборда, через ssh тоже никто не мешает, производить деплой на каждой ноде, предварительно остановив Application server, в этом случае на него не будут идти запросы. Как в случае с docker-контейнерами вы будет производить обновление?
          0
          Надо на практике попробовать ваш воркфлоу.

          Что касается докера, то все просто. Собранный докер-контейнер должен быть тригером или руками закачан и запущен с нужными параметрами у вас в облаке. Сборка контейнера может проиходить где угодно: локально на машине, на CI, wherever.
          0
          Процедура деплоя выглядит адовенько.

          ну это не совсем процедура деплоя, а скорее создание приложения с нуля уже в контейнере, используя утилиты из проекта django-cms, сам же деплой можно сделать и в один клик, как было тоже указано в посте
          А как обновлять приложение?

          в джеластике есть обновление с VCS (git/svn), при том автоматическое, что куда более удобно и быстрее чем перезаливать весь контейнер через докер
          Вы бы лучше сделали поддержку docker-контейреров, которые можно было встраивать в вашу инфраструктуру, масштабировать и ставить за балансировщик.

          и это не за горами, есть PoC, который работает, всему свое время ))
          +4
          Поправьте меня если я не прав, но mod_wsgi это же что-то очень древнее и неразвивающееся с массой ограничений. Почему не uWSGI?
            +2
            Вот у меня был подобный же вопрос, но как-то я его не задал. Почему Apache + wsgi, почему не Gunicorn?
              0
              В mod_wsgi почти каждую неделю коммиты, почти каждый месяц релиз новый, и какие там ограничения? Все то же вроде умеет, что и другие способы развертывания. Может, с mod_python путаете?
                0
                Простите, но Вы таки не правы, последняя версия вышла 18 дней назад

                проект нормально себе развивается, еще позвольте уточнить о каких именно ограничениях Вы говорите?

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

              Самое читаемое