Давным давно, писал статью на хабр. Перенесу сюда, пусть будет.
Преимущества облачного хостинга в наше время объяснять не приходиться, а 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
Заходим на страницу. Текст изменил цвет.
Как обещал проект.