Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Так уж получилось, что сейчас я стажируюсь в одной компании, где очень тяжело выбить простую программку себе на десктоп, а тем более IDE, порой это даже превращается в целые недельные квесты. Но в то же время, в свободное от работы время, я очень люблю экспериментировать. Имея аккаунт в OpenShift решил попробовать создать и развернуть Yii приложение в облаках.

Статья для начинающих.

Связываем Cloud9 IDE и OpenShift.

В качестве IDE я решил остановиться на Cloud9, дизайн и функциональность меня устраивает. Плюс то, что можно запускать приложение прямо в IDE, минус — не поддерживается хостинг баз данных, поэтому попробуем организовать доступ к базе данных, которую мы создадим в OpenShift.

Да и еще, мне улыбнулся Cloud9 из-за присутствии терминала (Alt+T), пускай хоть и ограниченного.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Шаг 0. Создаем аккаунты, если их у Вас еще нет.

Лично я использую бесплатные возможности.
Для Cloud9 это публичные рабочие среды по 128MB + 1 одна приватная + ограниченный терминал.
Для OpenShift это 3 small картриджа, каждый по 512MB RAM и 1GB disk. Картриджи это компоненты, которые можно добавить в приложение, такие как базы данных (MySQL, PosgreSQL и MondoDB) и инструменты администрирования (phpMyAdmin, RockMongo, Cron и т.п.).
Для маленьких экспериментов вполне достойно.

Шаг 1. Добавляем в OpenShift SSH ключ из Cloud9

SSH ключи, как известно, используются для безопасного соединения, вот хорошие статьи
В Cloud9 ключ можно найти в пункте Show SSH key в Your Account.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Копируем его и вставляем данный ключ в OpenShift, для этого в Your Account есть Public Keys

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Шаг 2. Создаем рабочую среду в Cloud9 и добавляем приложение в OpenShift

Здесь все просто, главное — при создании приложения в Cloud9 выбрать git версию рабочей среды. Дальше git будет нашим верным помощником.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

В OpenShift легким движением мыши создаем приложение с PHP 5.3.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Шаг 3. Добавляем git репозиторий приложения из OpenShift в рабочую среду Cloud9

После создания приложения в OpenShift можно увидеть его git репозиторий.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Для линковки данного репозитория к рабочей среде в Cloud9 используем следующие команды:

git remote add openshift -m master ssh://******.git/
git pull -s recursive -X theirs openshift master

Шаг 4. Подгружаем Yii в рабочей среде Cloud9 и создаем каркас приложения yii

Для загрузки yii фреймоврка в приложение используем его git репозиторий, добавив его как подмодуль:

git submodule add git://github.com/yiisoft/yii.git yii
git commit -m "added yii repository as submodule"

В репозитории подгрузим нужный нам релиз:

cd yii
git checkout 1.1.13
cd ..
git add yii
git commit -m "Use yii v1.1.13"

Теперь создадим каркас приложения yii. Для этого обычно используется скрипт webapp, но запустить его просто как shell не получится. Вместо этого будем использовать php версию скрипта, и да, нам понадобиться глобальный путь до нашей папки.
Выполним следующую команду и получим глобальный путь:

pwd

Имеем примерно следующее:

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Теперь выполним скрипт с этим путем для создания каркаса приложения:

php yii/framework/yiic.php webapp /var/lib/stickshift/ffa13067224647beb05863058997082a/app-root/data/354172/php git

Добавим все полученное:

git add php
git commit -m "created yii skeleton app"

Пробный запуск php/index.php из Cloud9 покажет нам предупреждение:

date(): It is not safe to rely on the system’s timezone settings. 

Решается это добавлением в php/protected/config/main.php следующего:

<?php 
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');
date_default_timezone_set( 'UTC' );

И не забываем commit:

git commit -a -m "set the default timezone to UTC"

Хочу отметить, что проблема существует только в Cloud9, в Openshift приложение запускается без каких-либо предупреждений.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

Шаг 5. Создаем базу данных в OpenShift и настраиваем соединение

Конечно, можно обойтись базой данных sqlite, но ради собственного интереса настроим MySQL, добавим картридж на странице приложения.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

UPD1: Обязательно запишите выданный пароль перед завершением, т.к. после этого я так и не нашел способ восстановить или изменить пароль :(. Логин и пароль хранятся в переменных окружения. Для их получения можно использовать терминал Cloud9 и удаленно подключиться к приложению через SSH. Логин используется стандартный — admin, а пароль берется из $OPENSHIFT_MYSQL_DB_PASSWORD.
UPD2: Адрес и порт базы данных я смог узнать, только поставив картридж phpMyAdmin можно также получить через консоль в переменных окружения $OPENSHIFT_MYSQL_DB_HOST и $OPENSHIFT_MYSQL_DB_PORT.

Для административных целей также поставим картридж с phpMyAdmin.

Cloud9 и OpenShift. Разработка и развертывание приложений в облаках

В том же php/protected/config/main.php настраиваем соединение с MySQL.

Вот и все!

Теперь приложение готово для дальнейших действий. Все это можно сделать используя только браузер, везде где есть интернет.

Использовались следующие источники:
1. Look Ma, No Hands! Developing for the Cloud, in the Cloud with Cloud9 IDE
2. Create Yii Project In Cloud9

Надеюсь, что статья окажется полезной!

habrahabr рулит.