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

в 20:47, , рубрики: cloud, django, openshift, python, Веб-разработка, Программирование, метки: , , ,

Преимущества облачного хостинга в наше время объяснять не приходиться, а 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 в ubuntu можно так:

$ sudo yum install rubygems git
$ sudo gem install rhc

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

$ rhc setup

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

$ rhc app create habr python-2.6

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

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

Теперь переходим к установке 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:

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

Но какоеже приложение без базы данных.
Добавим базу данных 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, хотя это дубль пароля и имени к базе.
Важна тут только ссылка для входа в админа. 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:

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="utf-8">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" href="/media/css/style.css" type="text/css" />
	<title>{{title}}</title>
</head>
<body>
    <h3>{{text}}</h3>
</body>
</html>

Вьюху пишем во 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

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

Автор: lamazavr

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js