Создать приложение в AppFog

Создать приложение в AppFog

В данной статье рассматриваются две темы: развертывание приложения в сети  AppFog , и первый опыт для хорошо структурированных приложений PHP.

Сначала мы построим простую заметку приложения с помощью CakePHP и автоматизированных bake. Дальше показан один из способов структурирования приложений, разделения его компонентов на:

  • Код приложения
  • Данные приложений и настроек
  • Библиотеки и код поставщика

Приложение, будет зарегистрировано и опубликовано на AppFog.

Зарегистрироваться на AppFog

AppFog является платформой как сервис (PaaS) поставщика создан с открытым исходным кодом  Cloud Foundry . Он обеспечивает поддержку нескольких языков программирования и позволяет программистам развернуть приложение на нескольких поставщиков инфраструктуры, таких как Amazon AWS, HP OpenStack, Microsoft Azure, и Rackspace DFW.

Подписаться на AppFog очень просто, всё что вам нужно, это адрес электронной почты и пароль, и у вас будет доступ к их 2 Гб свободному месту,  оперативной памяти, 10 услуг (например, базы данных) с максимально 100 МБ, и 50 Гб передачи данных. Это много для бесплатного обслуживания! Кроме того, как говорят, вы можете перемещать приложения на любой Cloud Foundry.

Создайте бесплатную  учетную запись AppFog , а потом мы продолжим.

Создание локального применения

Загрузите  последнюю версию CakePHP  и распакуйте его на вашем компьютере, а затем переименуйте его в качестве приложения (например FogNotes). Сделайте эту директорию видимым вашему веб-серверу с понятным URL (например, http://fognotes.local), корень документа должен быть каталог app/webroot и создать пустую базу данных MySQL (например, fognotes_local ).

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

Теперь создайте каталог с названием данных и два подкаталога в нём с названием config и logs. Копировать app/tmp каталог внутри данных и сделать эти config и logs с разрешением для записи на веб-сервере. Последний штрих, создать псевдоним консольной команды CakePHP сake в корневой каталог вашего приложения.



~/FogNotes$ ln -s lib/Cake/Console/cake cake


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



FogNotes/
    app/
    data/
        config/
        logs/
        tmp/
            cache/
            logs/
            sessions/
            tests/
    lib/
        Cake/
    plugins/
    vendors/
    cake
    index.php


Делая это, мы выделили определенный код приложения (app) от framework (lib/Cake) и библиотек (plugins и vendors). Кроме того, данные приложения и настройки находятся в одном отдельном месте (data/*). Теперь мы можем делать резервное копирование, и поддерживать каждого из компонентов в отдельности.  Это хорошо в реальных приложениях!

В структуру каталога, в месте, скажем CakePHP, чтобы использовать его. Мы должны установить пользовательскую директорию temp, в app/webroot/index.php нужно вставить этот код сразу после вызова define(‘ROOT’,…) :



<?php
// Custom TMP directory
if (!defined('TMP')) {
    define('TMP', ROOT . DS . 'data' . DS . 'tmp' . DS);
}


Обычно настройки подключения к базе данных хранятся внутри приложения в каталоге app/Config, файл с именем database.php. Мы будем изменять этот параметр, чтобы изменить файл data/config, названный для нашей текущей среде, а не (например, data/config/local.php).

Скопируйте файл app/Config/database.php по умолчанию app/Config/database.php и заменить класс DATABASE_CONFIG с этим кодом:



<?php
class DATABASE_CONFIG
{
    public $default = null;
    public $test    = null;
    public $env     = null;

    /**
     * Switch configuration based on environment
     */
    function __construct() {
        // Check that a suitable environment is defined
        if (!defined('APP_ENV')) {
            return false;
        }

        $this->env = APP_ENV;

        // Try to read database settings from the current ENV file
        $config = Configure::read('Database.config');
        if (!is_array($config)) {
            return false;
        }

        // Load all config database profiles
        foreach ($config as $name => $data) {
            $this->$name = $data;
        }

        // Throw an error if there is no suitable configuration
        if (empty($config['default']) || empty($this->default)) {
            return false;
        }
    }
}


Этот трюк был взят из  статьи, опубликованной в сообщество разработчиков CakePHP по eimermusic. Среды будет определена с использованием загрузочного файла или чтение переменной окружения предоставляемых AppFog и связанный конфигурационный файл будет загружен.

app/Config/bootstrap.php файл запуска для приложения. В нижней части файла, после вызова Configure::write(‘Dispatcher.filters’…), вставьте этот код, который регистрирует data/config пути к CakePHP:



<?php
// Define a custom reader to search for config files
App::uses('PhpReader', 'Configure');
Configure::config('default',
    new PhpReader(ROOT . DS . 'data' . DS . 'config' . DS));
// Determine the environment
if ($env = getenv('APP_ENV')) {
    if (!defined('APP_ENV')) define('APP_ENV', $env);
}
else {
    if (!defined('APP_ENV')) define('APP_ENV', 'local');
}


AppFog позволит нам установить переменную APP_ENV. Если её не установить, то приложение считает себя в локальном режиме.

Теперь переходим к концу файла и вставить этот код:



<?php
try {
    Configure::load(APP_ENV);
}
catch (ConfigureException $e) {
    // do something, for example exit application
}


Вызов  Configure :: Load() говорит CakePHP найти данные в директории файла config с названием, как в текущей среде (exs. local.php или prod.php). Внутри этого файла мы можем изменить все параметры, определенные ранее в приложении.

Образец local.php файла конфигурации должен быть таким:



<?php
// Load base configuration. Any of the core settings can be
// overridden here. Don't delete the $config var!
$config = array(
    'debug' => 1
);

// If declared in the $config array, String::UUID() crashes
Configure::write('Security.salt', 'SomeSuperSecretLongString');
Configure::write('Security.cipherSeed', 'SomeSuperSecretLongNumber');

// Database settings
Configure::write('Database.config', array(
    'default' => array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => 'secret_password',
        'database' => 'fognotes_local',
        'prefix' => '',
        'encoding' => 'utf8',
        'unix_socket' => '/tmp/mysql.sock',
    )
));

// Custom Log file settings to ROOT/data/logs/
CakeLog::config('default', array(
    'engine' => 'FileLog',
    'path'   => ROOT . DS . 'data' . DS . 'logs' . DS
));


С этими настройками, предупреждающие сообщения на главной странице должны исчезнуть.

Создание приложения в AppFog

Войдите в консоль своего AppFog и создайте новое приложение. Нужно выбрать тип приложения PHP, из провайдер инфраструктуры, выбран AWS Europe, и дать ему имя. Затем нажмите кнопку «Create App», и всего за пару секунд, система будет отправлять вам приложения «Mission Control».

Заявление с AppFog Initally состоит из одного файла index.php с «Hello World», мы должны загрузить наш местный код. Но прежде, мы должны связать базу данных сервиса. Выберите панель «Services», нажмите на кнопку MySQL, и дать ему имя (например, fognotes_prod ). Учетные данные для подключения к услуге хранятся в переменных окружения VCAP_SERVICES .

Мы также должны перейти к «Env Variables» панель и установить нашу пользовательскую переменную. Создайте новую переменную с названием APP_ENV со значением «prod» и сохраните.

Сделать копию  data/config/local.php и назвать её data/config/prod.php и открываем в редакторе. Мы будем извлекать настройки базы данных в соответствии с указаниями документов AppFog. Отредактируйте файл конфигурации, вот так:



<?php
// ...other code

// AppFog Extraction
$services_json = json_decode(getenv('VCAP_SERVICES'),true);
$af_mysql_config = $services_json['mysql-5.1'][0]['credentials'];

// Database settings
Configure::write('Database.config', array(
    'default' => array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => $af_mysql_config['hostname'],
        'login' => $af_mysql_config['username'],
        'password' => $af_mysql_config['password'],
        'database' => $af_mysql_config['name'],
        'prefix' => '',
        'encoding' => 'utf8',
    )
));

// ...other code


Мы могли бы также связывать приложение пользовательского домена или субдомена (бесплатно!), но это не тот случай.

Теперь мы почти готовы запустить наш код! В разделе «Update Source Code» панели, найти инструкции по установке AF утилиты в системе. Откройте сеанс терминала и перейдите в корень приложения. Следуйте инструкциям, чтобы установить инструмент командной строки, и войдите но не загружать удаленный код проекта. Вместо этого, идти вперед с командой AF FogNotes нажать обновления для кода на удаленном сервере. В менее чем за минуту, приложение развернуто, и вы должны увидеть то же как локальную версию. Это означает, что приложение распознает окружающую среду производства на удаленной базе данных.

Добавим кое что

У нас есть развернутое пустое приложение, но мы должны добавить по крайней мере какой то код для данных для нашего приложения. Нагрузим CakePHP работой.

Создайте файл data/config/notes.sql со следующим содержанием:



CREATE TABLE notes (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    title VARCHAR( 255 ) NOT NULL ,
    content TEXT NOT NULL ,
    created DATETIME NULL DEFAULT NULL ,
    modified DATETIME NULL DEFAULT NULL ,

    INDEX (title, created, modified)
)
ENGINE = INNODB;


Импорт файлов в локальной базе данных в командной строке или с вашим любимым инструментом MySQL.

Далее, из корневой директории вашего приложения, выполните команду:



~/FogNotes$ ./cake bake


Следуйте инструкциям (это просто!), А также создать модель, просмотра и управления для «Notes», которая является единственной таблицы в базе данных. CakePHP создаст нужные файлы для вас. Затем открыть файл app/Config/routes.php и заменить первый вызов  Router :: Connect() на следующий код повторно ссылку на главную страницу:



<?php
Router::connect('/',
  array('controller' => 'notes', 'action' => 'index'));


Обновив готовую главную страницу и вы должны иметь полное функциональное приложение. Теперь пришло время опубликовать изменения. Команда  обновления AF FogNotes будет применять новый код.

Вы увидите неприятную страницу с ошибкой, если вы загрузите приложение удаленно сейчас. Это потому, что мы не создали таблицу данных на удаленной базе данных.

Самый простой способ, чтобы импортировать таблицы является  создание туннеля af tunnel команд, а затем подключиться к удаленной базе данных с использованием информации, самого тоннеля. Откройте туннель в окне консоли, выберите «none», как тип клиента, а затем вы можете использовать другое окно терминала для импорта SQL:



mysql --protocol=TCP --host=localhost --port=10000 --user=RemoteUserName \
 --password=RemotePassword RemoteLongDifficultDBName < /path/to/notes.sql


Вы также можете использовать  Sequel Pro , если вы находитесь на Mac или  MySQL Workbench  до тех пор, пока туннель открыт.

После того как таблица находится на месте, приложение будет работать удаленно.

Заключение

Организованные примеры приложения показаны в этой статье является лишь одним из многих методов, которые можно использовать для улучшения процессов CakePHP. Например, вы могли бы хранить сессии в файле на вашем локальном компьютере и использовать MongoDB в AppFog.

AppFog является относительно молодой услугой PaaS, но обещает быть лучше. Он быстрый и простой в использовании, и он постоянно развивается. AppFog также позволяет клонировать всё приложение. Остальное зависит от вас, так что счастливого кодирования!

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

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


1 + = 10

Можно использовать следующие HTML -теги и атрибуты: <a href= http://pixelcom.crimea.ua/"" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>