Развёртывание django приложения на OpenShift хостинге от Red Hat

Давным давно, писал статью на хабр. Перенесу сюда, пусть будет.

Преимущества облачного хостинга в наше время объяснять не приходиться, а Red Hat предлагает нам ещё и опробовать все вкусности бесплатно (естественно с некоторыми ограничениями).
Вы не платите за хостинг и получаете:

  • 1 Gb дискового пространства
  • возможность создать 3 приложения
  • поддержку php 5.3, Ruby 1.9, Node.js 0.6, Perl 5.10, python 2.6 (3.3), Zend Server 5.6 и это ещё не полный список.

Ну а если необходимого языка не нашлось можно создать Do-It-Yourself приложение и настроить его как душе угодно.

Мы же рассмотрим развёртывание Django приложения.
Мануалов в интернете мной было найдено предостаточно, но подводные камни заставили повозиться. Опишу ниже.

Итак после регистрации на openshift.com лучше установить rhc — тулзу для управления выделенными для нас ресурсами. Почему лучше? Да просто можно настраивать всё и из веб браузера, но через консоль много проще и быстрее особенно в linux.

Установить rhc можно так:

$ sudo yum install rubygems git $ sudo gem install rhc

Теперь выполните логин через консоль:

$ rhc setup

Готово. Мы в сети.
Создаём python приложение:

$ rhc app create habr python-2.6

habr — это конечно же имя приложения.
Утилита сообщает, что наше приложение создано и доступно по адресу: https://habr-lamazavr.rhcloud.com/
, а также адрес git нашего приложения (скопируйте его куданибуть).
Видим такую страницу:

Теперь переходим к установке django. Переходим в каталог wsgi и создаём django приложение:

$ cd habr/wsgi/ $ django-admin startproject habr

Редактируем файл application в каталоге wsgi:

#!/usr/bin/env python # some original codes we need import os virtenv = os.environ[‘APPDIR’] + ‘/virtenv/’ os.environ[‘PYTHON_EGG_CACHE’] = os.path.join(virtenv, ‘lib/python2.6/site-packages’) virtualenv = os.path.join(virtenv, ‘bin/activate_this.py’) try: execfile(virtualenv, dict(__file__=virtualenv)) except: pass # new codes we adding for Django import sys import django.core.handlers.wsgi os.environ[‘DJANGO_SETTINGS_MODULE’] = os.environ[‘OPENSHIFT_APP_NAME’]+’.settings’ sys.path.append(os.path.join(os.environ[‘OPENSHIFT_REPO_DIR’], ‘wsgi’, os.environ[‘OPENSHIFT_APP_NAME’])) application = django.core.handlers.wsgi.WSGIHandler()

Для установки django раскоментируйте строку

install_requires=[‘Django>=1.3’],

в файле setup.py в корне приложения openshift.
Теперь нужно всё это залить на сервер.
Войдя в каталог wsgi добавим папку приложения в git:

$ git add habr $ git commit -a -m «Initialization» $ git push

В ходе выполнения на сервер установился и django (в моём случае 1.5.1, т.е. последняя на сегодня версия).
По окончании видим стартовую страницу django:

Но какоеже приложение без базы данных.
Добавим базу данных mysql, phpmyadmin и настроим django проект для работы с ней.

Добавляем катридж mysql к приложению habr:

$ rhc cartridge add mysql-5.1 -a habr

Cохраните для себя имя пользователя и пароль базы данных из вывода rhc:

Added mysql-5.1 to application habr MySQL 5.1 database added. Please make note of these credentials: Root User: пользователь Root Password: пароль Database Name: habr Connection URL: mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/ You can manage your new MySQL database by also embedding phpmyadmin-3.4. The phpmyadmin username and password will be the same as the MySQL credentials above.

Добавляем phpmyadmin:

$ rhc cartridge add phpmyadmin-3.4 -a habr

Будет опять выведен пароль и имя для вохода phpmyadmin, хотя это дубль пароля и имени к базе.
Важна тут только ссылка для входа в админа. https://habr-lamazavr.rhcloud.com/phpmyadmin/

Phpmyadmin я добавляю для того, чтобы импортировать готовую базу данных на сервер. Выполнять syncdb там не очень удобно.
Настраиваем django для работы с базой данных в файле settings.py нашего django приложения.

‘ENGINE’: ‘django.db.backends.mysql’, # Add ‘postgresql_psycopg2’, ‘mysql’, ‘sqlite3’ or ‘oracle’. ‘NAME’: os.environ[‘OPENSHIFT_APP_NAME’], # Or path to database file if using sqlite3. ‘USER’: os.environ[‘OPENSHIFT_MYSQL_DB_USERNAME’], # Not used with sqlite3. ‘PASSWORD’: os.environ[‘OPENSHIFT_MYSQL_DB_PASSWORD’], # Not used with sqlite3. ‘HOST’: os.environ[‘OPENSHIFT_MYSQL_DB_HOST’], # Set to empty string for localhost. Not used with sqlite3. ‘PORT’: os.environ[‘OPENSHIFT_MYSQL_DB_PORT’], # Set to empty string for default. Not used with sqlite3.

Естественно нужно импортировать модуль os в начале файла.

Коммитим изменения и заливаем:

$ git commit -a -m «db init» $ git push

После окончания заходим на страничку нашего приложения. Всё нормально. Значит база данных подключена, иначе видим 501 ошибку. Тогда смотрим логи командой:

$ rhc tail habr

Создадим также django-приложение внутри нашего проекта:

$ django-admin startapp habrapp

Добавляем строчку:

‘habrapp’,

в INSTALLED_APPS в файле settiongs.py проекта django.
Сделаем view с css и media файлами соответственно.

Создаём в каталоге habr/habr (рядом с файлом settings.py) папку templates и в ней файл index.html:

{{text}}

Вьюху пишем во views.py :

from django.shortcuts import render_to_response def index(request): c = { ‘title’: ‘Habratitle’, ‘text’: ‘Hello habrahabr from OpenShift!’,} return render_to_response(‘index.html’,c)

Указываем url в urls.py:

(r’^$’,’habrapp.views.index’),

Теперь указываем каталог с шаблонами нашему проеку в файле settings.py:

TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__),’templates’).replace(‘\’,’/’), )

Добавляем в git созданную нами папку с шаблоном и приложение django:

$ git add templates/ $ git add habrapp/

С путями примеры не привожу, ниже архив с примером.
Коммитим и заливаем

$ git commit -a -m ‘views add’ $ git push

Заходим видим нашу страницу.
Ну а теперь только вкусности с media файдами.
Во первый добавляем статик файлы админки. Собираем их:

$ python manage.py collectstatic

Получаем папку admin, которую ложим в каталог static в каталоге wsgi.
В каталоге wsgi создаём файл .htaccess:

RewriteEngine On RewriteRule ^application/media/(.+)$ /static/media/$1 [L]

Причём именно так! application нужен, а не ошибка.
Создаём папку media/css/ в ней файл style.css и вносим в него цвет нашего приветствия.

h3 { color: #6DA3BD; }

Не забываем добавить созданное в git:

$ git add . $ git add . $ git add .htaccess $ git commit -a -m ‘media files’ $ git push

Заходим на страницу. Текст изменил цвет.
Как обещал проект.

 

Источник: malimar.ru

Technology United