Используем облачную платформу 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
И получаем список типов поддерживаемых приложений:
<code class="bash>
Below is a list of the types of application you can create: Obtaining list of cartridges (please excuse the delay)...
* nodejs-0.6 - rhc app create -t nodejs-0.6 -a
Итак, для php-приложения нам нужно ввести команду:
$ 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 к созданному нами приложению.
<code class="bash" $ rhc app cartridge add -a <appname> -c mysql-5.1 </code> </code>
Как результат, получаем примерно такой выхлоп:
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) с адресса без субдомена на адресс с субдоменом в панели управления вашим доменным именем у вашего регистратора(если там есть такая услуга, а она присутсвует у большинства регистраторов.
При создании статьи использовались следующие источники:
- Облака на кончиках пальцев. Знакомство с OpenShift
- встроенное руководство замечательной утилиты rhc, вызываемое параметром --help
- https://openshift.redhat.com/community/faq/