У меня возникли сложности с размещением php-приложений с использованием фреймворка Yii2 на платформе IBM Bluemix. Уверен, я такой не один, поэтому в этом посте содержится короткая инструкция, как этих сложностей можно избежать.

Что нам потребуется сделать:
  1. создать проект в Bluemix
  2. подключить Git
  3. создать проект Yii2 и изменить структуру файлов
  4. настроить облако
  5. включить приложение, залив код

Создаем приложение в Bluemix


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

После регистрации на bluemix.net заходим на DASHBOARD и создаем среду для приложения на php в Cloud Foundry. Для этого на стартовой странице нажимаем кнопку Create App.




Выбираем WEB…



… и выбираем PHP.



Забираем его код на свою машину


Теперь нам нужно забрать код вновь созданного приложения на свою рабочую машину, поскольку кроме простейшего Hello world там находятся несколько конфигурационных файлов, которые обеспечивают запуск кода в облаке. Для этого заходим в Overview приложения и нажимаем Add GIT…



… и получаем ссылку на репозиторий…



… из которого клонируем приложение к себе.

Устанавливаем Yii2


Устанавливаем Yii2 по официальной инструкции с сайта фреймворка на свой компьютер или удалённый сервер. Все файлы, кроме папки web, нужно перенести в папку lib. Файлы из web переносим в корень проекта. Такое расположение файлов проекта нужно для достижения двух целей:
  1. Отключить автоматическое выполнение сomposer install по найденным в корне проекта composer.lock/composer.json.
  2. Перенести файлы фреймворка за пределы публичной части проекта. Папка lib распакуется вне папки, доступной для вебсервера (/home/vcap/app/htdocs), но в пределах include_path (/home/vcap/app/lib)

Эти папки настраиваются отдельными параметрами (WEBDIR и LIBDIR), чтобы позже можно было настроить окружение так, как удобней вам. Для простоты примера я использую значения по умолчанию.

Настраиваем проект


Для правильной загрузки Yii2 при каждом обновлении нужно провести дополнительную настройку, связанную с зависимостями Yii2 и других подключаемых библиотек. В частности я имею ввиду невозможность установить fxp/composer-asset-plugin на уровне проекта – мы можем установить эту библиотеку только глобально. Для решения этой задачи в корне проекта создадим папку .bp-config, а в ней – файл options.json.

Это то место, откуда будет подгружать настройки Cloud Foundry PHP Buildpack, который мы подключили к проекту при создании.

Содержание файла, который мы используем:
{
  "PHP_VERSION": "{PHP_56_LATEST}",
  "PHP_EXTENSIONS": [
    "bz2",
    "zlib",
    "openssl",
    "curl",
    "mcrypt",
    "mbstring",
    "pdo"
  ],
  "ADDITIONAL_PREPROCESS_CMDS": [
    "cd ./app/lib/",
    "php -r \"readfile('https://getcomposer.org/installer');\" | php",
    "php composer.phar global require \"fxp/composer-asset-plugin:~1.1.1\"",
    "php composer.phar install",
    "cd ../../"
  ]
}

PHP_VERSION указывает версию PHP. PHP_EXTENSIONS указывает на то, какие дополнения нам потребуются. Затем ADDITIONAL_PREPROCESS_CMDS указывает команды, которые нужно запустить после установки проекта в облако:
  1. перейти в папку с Yii2
  2. установить composer
  3. загрузить fxp/composer-asset-plugin (см. установку Yii2)
  4. загрузить все нужные зависимости из composer.lock/composer.json
  5. вернуться в первоначальную папку – это нужно для продолжения нормальной работы

Запускаем приложение в облаке


После того, как вы сделали все необходимые изменения, просто отправьте их на Bluemix с помощью git push. Bluemix увидит изменения в репозитории и установит все нужные зависимости, включая fxp/composer-asset-plugin, и мы получим рабочую тестовую страницу с Hello world от Yii2 без проблем с ассетами bower.

Комментарии (2)


  1. rhamdeew
    24.12.2015 14:23

    Спасибо, все довольно подробно расписано!


  1. AlexGx
    24.12.2015 16:04

    Для чего это может быть нужно. Какие преимущества перед использованием других платформ?