Статьи

Как установить пользовательские расширения PHP на Heroku

В этом уроке мы узнаем, как установить пользовательские расширения на Heroku. В частности, мы будем устанавливать Phalcon .

Зарегистрируйтесь и настройте

Чтобы использовать Heroku, вы должны зарегистрировать учетную запись Heroku. Heroku обычно работает с интерфейсом командной строки. Чтобы использовать этот интерфейс, вам необходимо установить пакет инструментов Heroku для вашей операционной системы. Если вы используете Linux, откройте терминал и введите следующую команду.

wget -qO- https://toolbelt.heroku.com/install.sh | sh

После установки пояса для инструментов у вас будет доступ к команде heroku из командной оболочки. Авторизуйтесь, используя адрес электронной почты и пароль, которые вы использовали при создании учетной записи Heroku:

 heroku login


Enter your Heroku credentials.
Email: [email protected]
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /home/duythien/.ssh/id_rsa.pub

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

Phalcon является сторонним расширением и, следовательно, не входит в состав PHP. Phalcon требует следующих компонентов:

 mbstring
mcrypt
openssl
PDO
PDO/Mysql
PDO/Postgresql
PDO/Sqlite
PDO/Oracle

Основными из них являются mbstring и mcrypt — mbstring используется механизмом шаблонов (Volt), а также некоторыми валидаторами, escape-фильтром и фильтром, а mcrypt используется в компоненте безопасности (создание безопасных хэшей и т. д.)

Чтобы установить вышеупомянутые элементы, мы будем использовать инструмент PHP buildpack. Давайте объясним, что это значит.

Согласно официальной документации Heroku, buildpack-пакеты обеспечивают магию и гибкость, которые делают запуск ваших приложений на Heroku таким простым. Когда вы нажимаете свой код, buildpack — это компонент, который управляет настройкой вашей среды, чтобы ваше приложение могло работать. Пакет buildpack может устанавливать зависимости, настраивать программное обеспечение, манипулировать ресурсами и делать все остальное, необходимое для запуска вашего приложения. У Heroku не всегда были пакеты сборки, это новый компонент, поставляемый со стеком Cedar.

Вы можете получить больше информации об этих трех шагах и больше через документацию buildpack.

Чтобы начать, мы разветвляем этот код на github . Нажмите кнопку «Вилка» в хранилище. Чтобы иметь возможность работать над проектом, вам нужно будет клонировать его на свой локальный компьютер.

Запустите следующий код:

 git clone https://github.com/duythien/heroku-buildpack-php.git buildpack-php
cd buildpack-php

Создайте файл phalcon.sh$HOME/buildpack-php/bin

 #!/bin/bash
# Build Path: /app/.heroku/php/
dep_url=git://github.com/phalcon/cphalcon.git
phalcon_dir=cphalcon
echo "-----> Building Phalcon..."

### Phalcon
echo "[LOG] Downloading PhalconPHP"
git clone $dep_url -q
if [ ! -d "$phalcon_dir" ]; then
  echo "[ERROR] Failed to find phalconphp directory $phalcon_dir"
  exit
fi
cd $phalcon_dir/build

# /app/php/bin/phpize
# ./configure --enable-phalcon --with-php-config=$PHP_ROOT/bin/php-config
# make
# make install
BUILD_DIR=$1
ln -s $BUILD_DIR/.heroku /app/.heroku
export PATH=/app/.heroku/php/bin:$PATH
bash ./install
cd
echo "important extension phalcon into php.ini"
echo "extension=phalcon.so" >> /app/.heroku/php/etc/php/php.ini

Этот файл установит Phalcon, но Heroku должен быть проинструктирован, чтобы выполнить его. Для этого вам нужно отредактировать файл bin / compile и добавить где-то следующую строку:

 [...]
source $BP_DIR/bin/phalcon
[...]

Кроме того, вам нужно добавить текстовое extension=phalcon.soconf / php / php.ini »:

 [....]
extension=phalcon.so
; Local Variables:
; tab-width: 4
; End:

Теперь мы можем загрузить наш новый buildpack-пакет:

 git add -A
git commit -m "edit php.ini and create phalcon file"
git push origin master

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

Создайте каталог для своего приложения и измените на него:

 mkdir phalcon-dev
cd phalcon-dev

Кроме того, вам необходимо указать Heroku, что это приложение является приложением PHP. Для этого создайте пустой файл с именем composer.json В системе Unix вы можете создать этот файл следующим образом:

 touch composer.json

Затем выполните следующее, чтобы инициализировать репо для нашего приложения:

 git init
git add -A
git commit -m" first commit"

Чтобы создать новое приложение Heroku, в которое вы можете нажать, используйте команду CLI create:

 heroku create phalcon-dev

Creating phalcon-dev... done, stack is cedar
http://phalcon-dev.herokuapp.com/ | [email protected]:phalcon-dev.git
Git remote heroku added

Это создает приложение на Heroku, готовое и ожидающее нашего кода, а также присоединяет git remote к нашей локальной кодовой базе. Теперь вы готовы развернуть приложение, но кода пока нет. Следуйте следующему разделу, чтобы добавить контент в свое приложение.

Ваш файл composer.json

 {
  "require": {
    "php": "5.5.12"
  }
}

Он автоматически установит такие расширения, как mcrypt, mbstring и т. Д. На Heroku. Если вам нужен mongodb, memcached и т. Д., Измените файл дальше:

 {
  "require": {
    "php": "5.5.12",
    "ext-memcached": "*",
    "ext-mongo": "*"
  }
}

Теперь Heroku включит соответствующие расширения PHP и поместит их в папку support / build / extensions / no-debug-non-zts-20121212 . Затем создайте файл test.php

 <?php phpinfo() ; ?>

Наконец, давайте развернем установку Phalcon:

 heroku config:set BUILDPACK_URL=https://github.com/duythien/heroku-buildpack-php
git add -A
git commit -am "installl phalcon"
git push heroku master

Первая команда означает переопределить пакет сборки по умолчанию Heroku, указав пользовательский пакет сборки в конфигурации BUILDPACK_URL var . Через несколько минут результаты выглядят следующим образом:

 Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /app/.heroku/php/lib/php/extensions/no-debug-non-zts-20121212/

Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation
important extension phalcon into php.ini
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web

-----> Compressing... done, 124.0MB
-----> Launching... done, v8
       http://phalcon-dev.herokuapp.com/ deployed to Heroku

To [email protected]:phalcon-dev1.git
   4f1d993..e0936a5  master -> master

Это взяло наш код, отправило его в Heroku, идентифицировало его и запустило процесс сборки, подготовив его к развертыванию. Теперь наше приложение живет в интернете! Чтобы убедиться в этом, откройте его сейчас:

 heroku open test.php

Если все идет хорошо, вы должны увидеть следующий экран в вашем браузере:

phpinfo

Настройте веб-корень и разверните образец сайта

Теперь перейдем к сложной части, которая задает веб-корень. Для указания корневого веб-узла требуется немного больше работы и справочной информации. Корень приложения веб-сайта Phalcon в дереве git — это /app/phalcon-website/public Для Heroku по умолчанию корень сети является корнем git-дерева. Этот каталог внутренне сопоставлен с /app Чтобы изменить это, нам нужно создать так называемый Procfile, который запускает sh-скрипт при каждом запуске веб-узла приложения Heroku. Затем этот сценарий изменяет конфигурацию сервера и включает вашу собственную конфигурацию, которая устанавливает корневой веб-каталог в /app/phalcon-website/public Создайте файл Procfile со следующим содержимым (если вы используете Apache):

 web: vendor/bin/heroku-php-apache2 phalcon-website/public

Клонируйте веб-сайт Phalcon в папку репо, и когда это будет сделано, команда git push отправляет все коммиты на локальном мастере в центральный репозиторий.

 cd && cd phalcon-dev
git clone --depth=1 http://github.com/phalcon/website phalcon-website
git add Procfile phalcon-websiste/
git commit -am " test phalcon website"
git push heroku master

Посетите общедоступный URL-адрес приложения и вуаля, здесь у вас есть работающий клон Phalconphp.com на Heroku.

Phalcon website

В заключение

Установка Phalcon (или любого другого расширения PHP) на Heroku, очевидно, не является ни простой, ни простой, но если вы используете buildpack-пакеты, она становится намного более доступной.

Оставьте свой отзыв в комментариях ниже и, как всегда, поделитесь этой статьей, если она вам понравилась!