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

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

ссылка на оригинал статьи http://habrahabr.ru/post/177243/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *