Статьи

Упаковка пользовательской установки PHP для Windows Azure

Одна из возможностей скаффолдов , входящих в 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, может быть очень полезным.