Google App Engine PHP SDK — как установить на Ubuntu (15.10)?

Официальная документация Google доступна здесь:
https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_PHP

Но он не содержит достаточной информации о следующем шаге:
"4. Соберите и установите интерпретатор PHP и расширение PHP App Engine. Укажите путь к php-cgi и gae_runtime_module.so при запуске сервера разработки. ."

Я использую новую машину Virtualbox с Ubuntu 15.10 и PhpStorm для тестирования GAE.

Может ли кто-нибудь дать четкие инструкции о шаге 4? Что мне нужно сделать, чтобы установить интерпретатор php и расширение php App Engine?

P.S. Я уже искал в Google, но нашел только старые/запутанные руководства.


person Igor Carmagna    schedule 12.02.2016    source источник


Ответы (2)


Это расширение GAE PHP кажется совершенно новым. Не помните, что вы использовали его в SDK в Ubuntu 14.04.

Вам нужно собрать PHP и это расширение из исходного кода. Вы должны получить последнюю ветку PHP5.5 из исходного репозитория (http://php.net/git.php) и построить его. Эта связанная страница содержит инструкции по сборке PHP, но процедура аналогична следующей:

$ git clone <php-src> 
$ cd ./php-src/ 
$ git checkout PHP-5.5
$ ./buildconf
$ ./configure --prefix="/opt/php55"
$ sudo make && sudo make install

И не забудьте выбрать модули и пакеты, которые вы хотите скомпилировать с PHP5.5 для использования в SDK. Я думаю, что у Google был официальный список модулей и расширений, которые они используют в GAE PHP и в SDK PHP. Аргумент prefix сообщает компилятору, куда установить результирующее приложение.

Затем вам нужно получить этот исходный код для расширения PHP и собрать его.

$ git clone https://github.com/GoogleCloudPlatform/appengine-php-extension
$ cd appengine-php-extension
$ phpize # remember to use the phpize from the just built PHP5.5 binaries
$ ./configure
$ sudo make && sudo make install

(Этот репозиторий Git содержит подробные инструкции по сборке, поэтому вам, вероятно, следует обращаться к ним при сборке.)

Включите полученный .so для PHP5.5, который вы только что создали, используя файлы конфигурации PHP.

После этого вам необходимо установить PHP SDK и настроить его для использования только что созданного бинарного файла PHP.

$ dev_appserver.py <...> --php_executable_path=/opt/php55/bin/php-cgi

SDK сообщит вам, если встроенные двоичные файлы PHP несовместимы с используемой вами версией SDK. Я помню, как компилировал PHP из исходников около 5 раз, прежде чем он заработал без каких-либо предупреждений.

Но по сути они говорят вам скомпилировать PHP из исходного кода, затем скомпилировать их расширение из исходного кода, а затем использовать встроенное расширение PHP + с загруженным SDK. Эти инструкции взяты из моей головы, поэтому вам может потребоваться настроить команды и процедуры.

person ojrask    schedule 12.02.2016
comment
Большое спасибо!! Описанный вами процесс имеет смысл. Я постараюсь как можно скорее и приму ответ. Я не знаю, как включить .so для php в файлах конфигурации... надеюсь решить это с помощью поиска в Google. - person Igor Carmagna; 12.02.2016
comment
Кстати, я думаю, что Google действительно должен упростить этот процесс. Я считаю, что другие сервисы (с рекламным хостингом для развертывания) намного проще в использовании/настройке, поскольку для них требуется только наличие git и учетной записи Bitbucket/Github. - person Igor Carmagna; 12.02.2016
comment
Да, GAE нуждается в значительной предварительной настройке, чтобы заставить его работать должным образом в Linux (что забавно, учитывая, что Google известен тем, что требует от сотрудников использовать Linux, насколько я слышал). Но как только это будет сделано, все должно быть в порядке, пока Google не решит внести большие изменения. - person ojrask; 12.02.2016
comment
У меня проблемы с первой частью: создание и установка интерпретатора PHP (github.com/GoogleCloudPlatform/appengine -php). Когда я выполняю команду make, я всегда получаю следующую ошибку: /home/mark/Experiments/appengine-php/php-src/ext/libxml/libxml.c:39:27: фатальная ошибка: libxml/parser.h: Нет компиляция такого файла или каталога завершена. Makefile:500: рецепт для цели 'ext/libxml/libxml.lo' не удалось сделать: *** [ext/libxml/libxml.lo] Ошибка 1 - person Igor Carmagna; 13.02.2016
comment
P.S. Я уже выполнил sudo apt-get install libxml2-dev, НО это не сработало. - person Igor Carmagna; 13.02.2016
comment
У вас получилось? Нашел что-то связанное: stackoverflow.com/questions/ 29847814/ Я не уверен, есть ли в make-файлах какие-либо средства проверки для перечисления зависимостей как есть. - person ojrask; 15.02.2016
comment
Я не смог решить эту проблему и воспользовался вашим советом (вместо этого я использую официальный репозиторий git cloned php), но я не знаю, вызовет ли это проблемы из-за другой конфигурации. Теперь я столкнулся с другой проблемой: см. этот вопрос stackoverflow.com/questions/35390935/ Не могли бы вы взглянуть на это? В качестве примечания, не могли бы вы уточнить, как на самом деле использовать информацию, которую вы связали? (должен ли я запустить команду g++ в качестве параметра после make или еще... извините, я немного заблудился... я уже пробовал разные комбинации, но не повезло) - person Igor Carmagna; 15.02.2016
comment
Мне тоже пришлось клонировать официальное репозиторий PHP, забыл упомянуть об этом, извиняюсь! Я сам не компилировал расширение GAE, но я проверю его и посмотрю, найду ли я что-нибудь, что могло бы помочь. :) - person ojrask; 15.02.2016
comment
Следует отметить, что вы должны делать все это в виртуальной машине, Chroot или контейнере. Расширение PHP Runtinme имеет пути сборки, которые трудно обернуть без chroot. - person Ray Foss; 06.09.2016

Этот процесс можно упростить с помощью Docker. Вот изображение, которое вы можете использовать: https://hub.docker.com/r/mhariri/docker-google-appengine-php/

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

docker run -it -v $(pwd):/app --rm --net=host mhariri/docker-google-appengine-php
person peak    schedule 16.07.2016
comment
Ваш запрос на включение решил эту проблему? - person peak; 07.09.2016
comment
Это произошло! Пока читался php.ini, и он был правильно настроен для приема вызовов libxml в App Engine, модуль не был установлен в контейнере Docker. Существует длинный список модулей, поддерживаемых App Engine, которые не установлены. Было бы неплохо создать небольшой тест, чтобы проверить, установлен ли и работает ли каждый модуль... например, MongoDB, который мне скоро понадобится. - person Ray Foss; 08.09.2016