Одна из возможностей скаффолдов , входящих в Windows Azure SDK для PHP, заключается в том, что все они используют установщик веб-платформы для установки PHP при развертывании проекта. Это здорово, пока я не хочу, чтобы мое приложение было развернуто с моей локальной установкой PHP. У меня могут быть не только пользовательские настройки, но и пользовательские библиотеки, которые я хочу включить (например, некоторые модули PEAR или любую из множества фреймворков PHP). В этом руководстве я расскажу вам, как развернуть приложение PHP, поставляемое в комплекте с пользовательской установкой PHP. Это руководство не опирается на Windows Azure SDK для PHP, но вам потребуется…
- Windows Azure SDK .
- Подписка Windows Azure Это действительно нужно, только если вы действительно хотите развернуть свое приложение (шаг 8 ниже).
- PHP установлен на вашем локальном компьютере, а IIS настроен на обработку запросов PHP. Я рекомендую делать это с помощью установщика веб-платформы .
В конечном счете, я хотел бы упростить этот процесс (ниже) (возможно, превратив его в скаффолд, который будет включен в Windows Azure SDK для PHP?), Поэтому, пожалуйста, предоставьте отзыв, если вы попробуете это…
1. Настройте вашу установку PHP. Настройте любые параметры и внешние библиотеки, которые вы хотите для своего приложения.
2. Создайте каталог проекта. Вам нужно будет создать каталог проекта для вашего приложения и необходимые файлы конфигурации Azure. В конечном итоге каталог вашего проекта должен выглядеть примерно так (некоторые из пропущенных файлов мы заполним в следующих шагах):
-YourProjectDirectory
-YourApplicationRootDirectory
-bin
-configureIIS.cmd
-PHP
— (файлы приложений)
— (любые внешние библиотеки)
-web.config
-ServiceDefinition.csdef
Несколько вещей, чтобы отметить о структуре выше:
- Вам необходимо скопировать свою пользовательскую установку PHP в каталог bin .
- Убедитесь, что все пути в вашем php.ini являются относительными (например, extension_dir = ”. \ Ext” )
- Любые внешние библиотеки должны находиться в корневом каталоге вашего приложения.
- Технически это не так. Вы можете использовать относительный путь для настройки конфигурации include_path (относительно корня приложения) и поместить этот каталог в другое место в каталоге вашего проекта.
- Возможно, это само собой разумеется, но обязательно отключите все параметры отладки (например, display_errors ), прежде чем отправлять это в рабочую среду Azure.
3. Добавьте сценарий запуска для настройки IIS. IIS в веб-роли не настроен для обработки запросов PHP по умолчанию. Итак, нам нужен скрипт для запуска, когда экземпляр подключается к сети для настройки IIS. (Мы настроим запуск этого сценария при запуске на следующем шаге.) Создайте файл с именем configureIIS.cmd , добавьте содержимое ниже и сохраните его вкаталоге bin :
@ECHO ON SET PHP_FULL_PATH=%~dp0php\php-cgi.exe SET NEW_PATH=%PATH%;%RoleRoot%\base\x86 %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%',maxInstances='12',idleTimeout='60000',activityTimeout='3600',requestTimeout='60000',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PATH',value='%NEW_PATH%']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%PHP_FULL_PATH%'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='%PHP_FULL_PATH%',resourceType='Either',requireAccess='Script']" /commit:apphost %WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /"[fullPath='%PHP_FULL_PATH%'].queueLength:50000"
4. Добавьте файл определения сервиса ( ServiceDefinition.csdef ). Каждое приложение Azure должно иметь файл определения службы. Важной частью этого является то, что мы настроили приведенный выше скрипт для запуска при запуске всякий раз, когда предоставляется экземпляр:
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="YourProjectDirectory" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="YourApplicationRootDirectory" vmsize="ExtraSmall" enableNativeCodeExecution="true"> <Sites> <Site name="YourPHPSite" physicalDirectory="./YourApplicationRootDirectory"> <Bindings> <Binding name="HttpEndpoint1" endpointName="defaultHttpEndpoint" /> </Bindings> </Site> </Sites> <Startup> <Task commandLine="configureIIS.cmd" executionContext="elevated" taskType="simple" /> </Startup> <InputEndpoints> <InputEndpoint name="defaultHttpEndpoint" protocol="http" port="80" /> </InputEndpoints> </WebRole> </ServiceDefinition>
Обратите внимание, что вам нужно будет изменить имена YourProjectDirectory и YourApplicationRootDirectory в зависимости от того, какие имена вы использовали в структуре вашего проекта из шага 1. Вы также можете настроить размер виртуальной машины (для которой в файле выше указано значение ExtraSmall). Дополнительные сведения см. В разделе Схема определения службы Windows Azure .
5. Создайте файл конфигурации службы ( ServiceConfiguration.cscfg ). Каждое приложение Azure также должно иметь файл конфигурации службы, который можно создать с помощью Windows Azure SDK. Откройте командную строку Windows Azure SDK, перейдите в каталог проекта и выполните эту команду:
cspack ServiceDefinition.csdef /generateConfigurationFile:ServiceConfiguration.cscfg /copyOnly
Это создаст файл ServiceConfiguration.cscfg и каталог ServiceDefinition.csx в каталоге вашего проекта.
6. Запустите приложение в эмуляторе вычислений. Если вы хотите запустить свое приложение в эмуляторе вычислений (для целей тестирования), выполните следующую команду:
csrun ServiceDefinition.csx ServiceConfiguration.cscfg /launchbrowser
Об этом следует помнить: сценарий configureIIS.cmd будет выполняться на вашем локальном компьютере (установив в обработчике PHP указатель на установку PHP, являющуюся частью вашего проекта Azure). Вам нужно будет изменить это позже.
7. Создайте пакет для развертывания в Azure. Теперь вы можете создать файл пакета (.cspkg), который вам нужно загрузить в Windows Azure, с помощью этой команды:
cspack ServiceDefinition.csx ServiceConfiguration.cscfg
8. Разверните ваше приложение. Наконец, вы можете развернуть свое приложение. Этот учебник проведет вас через шаги: http://azurephp.interoperabilitybridges.com/articles/deploying-your-first-php-application-to-windows-azure#new_deploy .
Опять же, мне было бы очень интересно услышать отзывы от любого, кто попробует это. Как я упоминал ранее, я думаю, что превращение этого в скаффолд, включенный в Windows Azure SDK для PHP, может быть очень полезным.