Используем облачную платформу OpenShift как хостинг для сайта на PHP

Продемонстрирую я вам сей фокус на примере установки русской версии WordPress на OpenShift. Вы уже зарегестрированы на https://openshift.redhat.com/? Нет? Значит пора пройти регистрацию. Бесплатно такой сервис мало кто раздаёт. Пока дают, нужно брать. Только недальновидный индивидуум отказывается от бесплатного сыра… И забудем на время про мышеловку… Срочно регестрируемcя. А то вдруг парни из RedHat перестанут давать бесплатно такой шикарный кусок сыра… Будем пробовать OpenShift в деле, ведь мы же не доверяем красивым словам маркетологов?

Зарегистрировались? Ну вот, теперь пришла пора испытать даренного коня(то есть полученное местечко в облаке) на деле.

Устанавливаем необходимые для rhc(утилиты для управления облачным сервисом OpenShift) зависимости:


sudo apt-get install ruby rubygems git

Устанавливаем rhc:

sudo gem install rhc

Сразу договоримся о терминах. Я буду использовать <appname> — как имя создаваемого нами приложения, а <namespace> — пространство имен, поддомен который мы создадим для доступных нам трёх приложений на OpenShift.

Начинаем с создания <namespace> для наших приложений:

$ rhc domain create -n <namespace> -l ваша_почта -p ваш_пароль

Вместо create можно использоваить update, если нужно просто изменить что-то в уже созданном вами неймспейсе.

Если у вас нет ключей SSH, автоматически будут сгенерированны ключи


~/.ssh/libra_id_rsa (приватный ключ)
~/.ssh/libra_id_rsa.pub (публичный ключ)

Теперь переходим к созданию приложения. Что-бы узнать, какие типы приложений поддерживаются из коробки, вводим команду:


$ rhc setup

И получаем список типов поддерживаемых приложений:
$ rhc app create -t php-5.3 -a < имя приложения>

В конце процедуры вы увидите в выхлопе программы что-то вроде такого текста:


Application <appname> is available at: http://<appname>-<namespace>.rhcloud.com/
  Git URL: ssh://<UID>@<appname>-<namespace>.rhcloud.com/~/git/<appname>.git/
Successfully created application: <appname>

Итак, удачно создано приложение. И вы можете теперь спокойно заливать файлы вашего приложения на сервер при помощи git. Но вначале стоит установить дополнительные картриджи для приложения.

Получаем список картриджей:


$ rhc app cartridge list

Подключаем MySQL к созданному нами приложению.


Как результат, получаем примерно такой выхлоп:


RESULT:

MySQL 5.1 database added.  Please make note of these credentials:

   Root User: admin
   Root Password: < ваш пароль от БД>
   Database Name: <appname>

Connection URL: mysql://127.xx.xx.1:xxxx/

You can manage your new MySQL database by also embedding phpmyadmin-3.4.

И любимый нами phpmyadmin-3.4:


$ rhc app cartridge add -a <appname> -c phpmyadmin-3.4

Как всегда, в выхлопе мы получаем всё что нужно для доступа к установленному картриджу:


RESULT:

phpMyAdmin 3.4 added.  Please make note of these MySQL credentials again:

   Root User: admin
   Root Password: < ваш пароль от БД>

URL: https://<appname>-<namespace>.rhcloud.com/phpmyadmin/

Теперь установим cron:


$ rhc app cartridge add -a <appname> -c cron-1.4

Как всегда, не забываем глянуть что ценного нам напишут в выхлопе rhc:


RESULT:

cron-1.4 added to application <appname>

To schedule your scripts to run on a periodic basis, add the scripts to 
your application's .openshift/cron/{minutely,hourly,daily,weekly,monthly}/
directories (and commit and redeploy your application).

Example: A script .openshift/cron/hourly/crony added to your application
         will be executed once every hour.
         Similarly, a script .openshift/cron/weekly/chronograph added
         to your application will be executed once every week.

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

Вначале нам нужен будет скелет будущего приложения. OpenShift используе набор хуков для деплоя, и специальную директорию, в которую должны писаться заргружаемые данные, плагины и т.п. Директорию создаёт один из хуков, который кидает в каталог с движком символическую ссылку на каталог wordpress-content. Эти скрипты созданы за нас добрыми людьми, нужно их только получить.

Создаём каталог для проекта:


$ mkdir -p ~/projects/<namespace>/<appname>/php

Теперь получаем файлы wordpress заточенного специально для работы с OpenShift.


$ cd ~/projects/<namespace>/<appname>
$ git init
$ git remote add upstream -m master git://github.com/openshift/wordpress-example.git
$ git pull -s recursive -X theirs upstream master
$ rm -rf ~/projects/<namespace>/<appname>/php
$ cd ~/projects/<namespace>
$ wget http://ru.wordpress.org/latest-ru_RU.tar.gz
$ tar xvzf latest-ru_RU.tar.gz
$ mv wordpress/* <appname>/php/
$ rm -rf wordpress
$ cp <appname>/php/wp-config-sample.php <appname>/php/wp-config.php

Пришло время настройки wordpress посредством редактирования файла wp-config.php, в котором нужно прописать переменные окружения, в которых OpenShift хранит имя БД, пароль от неё и имя хоста, на котором работает БД.

Приводим соответствующие строки к виду:


/** Имя базы данных для WordPress */
define('DB_NAME', $_ENV['OPENSHIFT_APP_NAME']);

/** Имя пользователя MySQL */
define('DB_USER', $_ENV['OPENSHIFT_DB_USERNAME']);

/** Пароль к базе данных MySQL */
define('DB_PASSWORD', $_ENV['OPENSHIFT_DB_PASSWORD']);

/** Имя сервера MySQL */
define('DB_HOST', $_ENV['OPENSHIFT_DB_HOST']);

Получаем Уникальные ключи и соли для аутентификации на странице https://api.wordpress.org/secret-key/1.1/salt/:


define('AUTH_KEY',         'ключ');
define('SECURE_AUTH_KEY',  'ключ');
define('LOGGED_IN_KEY',    'ключ');
define('NONCE_KEY',        'ключ');
define('AUTH_SALT',        'соль');
define('SECURE_AUTH_SALT', 'соль');
define('LOGGED_IN_SALT',   'соль');
define('NONCE_SALT',       'соль');

Заходим в каталог нашего приложения:


$ cd <appname>

Пришло время отослать приложение на сервер:


$ git add --all
$ git commit -a -m "Push the russian version on WordPress on server"
$ git push ssh://<UID>@<appname>-<namespace>.rhcloud.com/~/git/<appname>.git/

Цепляем alias к своему домену:


$ rhc app add-alias -a <appname>  --alias "<appname>.< доменное имя>.< доменная зона>"

Или так:


$ rhc app add-alias -a <appname>  --alias "www.< доменное имя>.< доменная зона>"

Удаляем его:


$ rhc app remove-alias -a <appname> --alias "< поддомен>.< доменное имя>.< доменная зона>"

В панели управления DNS ващего регисатратора добавьте запись cname на www.доменное имя.доменная зона направляющую на адресс <appname>-<namespace>.rhcloud.com. Где <appname> — имя приложения, а <namespace> — пространство имен, поддомен созданный вами для доступных для создания вами трёх приложений.

Одним из нескольких узких мест у OpenShift для вас может оказаться отсутствие постоянного IP у сервера, они там только динамические. Это серьёзная проблемма, ведь вы можете настроить ваше доменное имя для использования с хостингом OpenShift только при помощи CNAME-записей в панели регистратора вашего доменого имени, записи типа A для вас окажутся недоступны. То есть адреса вида http://blog.vasea-pupkin.com и http://www.vasea-pupkin.com отлично прикрепляются к вашему проекту. А адрес http://vasea-pupkin.com не будет вести к вашему PHP-приложению. Вы можете узнать IP сервера, настроить запись CNAME, но при перезагрузке или изменениии сетевых настроек IP сервера поменяется, и красивый короткий адресс без поддомена не будет вести к вашему проекту. Но есть два способа приодолеть эту проблемму. Создать запись вида: » A @ 174.129.25.170″, которая строит перенаправление с адресса без поддомена на адресс с поддоменом www. Или настроить перенаправление(Forwarding) с адресса без субдомена на адресс с субдоменом в панели управления вашим доменным именем у вашего регистратора(если там есть такая услуга, а она присутсвует у большинства регистраторов.

При создании статьи использовались следующие источники:

Опубликовано Андрей Гуцу

Системный администратор. Интересуюсь Linux, web-технологиями и Open Source. Люблю фантастику, игры жанров RTS и FPS.

Вливайтесь в общение

9 комментариев

  1. А давай проще? Можно например через веб интерфейс запустить WordPress, и сократить эти инструкции где-то в три раза.

    1. Можно. Но так мы получим ванильную(английскую) версию wordpress, а мой метод позволяет загрузить русскую версию, да и просто кастомную версию. В моём случае я вообще поправил файл конфигурации от локальной версии(локальный тестовый серверок в вируталке на KVM у меня вертится) , и залил через git поправленную версию с виртуалки. Просто в wp-config проверяю наличие специфичных для OpenShift локальных переменных, если они не объявлены, устанавливаются значения моего локального сервака, в противном случае данные берутся из глобальных переменных, установленных OpenShift. Теперь при правке исходников на локалке я просто делаю push в репу проекта на OpenShift. Это очень удобно. Вы над OpenShift работаете? Спасибо за удобный сервис:)

    2. Для тех, кто интересутеся английской версией wordpress, я с удовольствием опишу процесс установки данного движка на OpenShift через Web-интерфейс. Мне не трудно, а чем больше таких постов, тем скорее блог станет популярным в узких кругах. Есть смысл написать такой гайд? Я готовлю гайд по переносу Joomla с обчного сревера на OpenShift. Есть смысл описать процесс миграции? Мне кажется, эта тема тоже будет востребованной…

    1. Да нет, не замечал. Хотя, смотря с чем сравнивать. Некоторые и на Amazon жалуются, что он медленный(иногда и правда медленные инстансы у людей бывают). По сравнению с большинством shared, и даже многими VDS, OpenShift очень неплох. Я решил его пощупать ради интереса. Мне понравилось. Скорость, наличие git и ssh, возможность создавать приложения на разных языках(можно хоть CGI-приложения на C писать для данного сервиса) — всё это мне нравится гораздо больше чем Google Apps. Ну и MySQL с Postgresql из коробки тоже радуют. Это не VDS и не AWS. Софт устанавливать и настраивать под себя не дают. Зато данное решение имеет продуманную архитектуру деплоя приложений. Мне оно нравится. По сравнению с shared-хостингом оно гораздо более удобное. Свой образ с ОС, софтом и настройками для больших проектов может быть более предпочтительно, но для проектов которые только встают на ноги OpenShift более чем хорош.

  2. Андрей, спасибо за статью!
    Есть понимание как на OpenShift подружить механизм обновления компонентов через консоль и GIT?
    Почитал форум сообщества, но так и не понял.

    WordPress поставлен через консоль OpenShift.

    Склонировал репозитарий к себе на ПК. Все хорошо.

    Далее зашел в консоль WP и сделал два изменения:
    1. добавил плагин
    2. настроил пермалинки (т.е. добавился .htaccess)

    Пробую запулить изменения на ПК — облом. GIT на сервере не принял изменения.

    Захожу по SSH, иду в папку app-root/repo/php/

    Там командую:
    1. git add .
    2. git commit -a -m «upgrade»

    Получаю ответ:
    # Not currently on any branch.
    nothing to commit (working directory clean)

    И вот тут встал. Не могу понять как изменения сделанные через консоль WP закомитить в GIT и затем на ПК…
    Есть понимание этого момента?

    1. Openshift устанавливает git working directory так, что данные проекта хранятся отдельно от данных хранилища git. Поэтому у вас не получается сделать коммит. Если вкратце, то вы должны вызывать git в каталоге с данными вашего проекта с параметром —git-dir=< путь к хранилищу(репозитарию) git вашего проекта>. Чуть позже я опишу, как это работает более развёрнуто.

    2. Для сохранения изменившихся на сервере OpenShift файлов проекта заходим по ssh в домашний каталог вашего проекта, и запускаем git с нужными параметрами. Вот так:
      git —git-dir=$PWD/git/$OPENSHIFT_APP_NAME.git —work-tree=$OPENSHIFT_REPO_DIR add .
      git —git-dir=$PWD/git/$OPENSHIFT_APP_NAME.git —work-tree=$OPENSHIFT_REPO_DIR commit -m ‘Changes from server’

      И изменения, произошедшие на сервере будут сохранены в git-хранилище. Полный бэкап данных проекта(в архиве), включая дамп БД, можно получить командой:

      rhc snapshot save -a имя_проекта

      OpenShift — это очень удобная платформа. Только некоторые моменты работы с ней скудно освещены в документации…

Оставьте комментарий

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

*

%d такие блоггеры, как: