Создание веб-ролей и рабочих ролей PHP

Обзор

Важно!

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.

В этом руководстве мы расскажем, как создать веб-роль и рабочую роль PHP в среде разработки Windows, выбрать определенную версию PHP из доступных «встроенных» версий, изменить конфигурацию PHP, включить расширения и развернуть решение в Azure. Здесь также описывается, как создать веб-роль или рабочую роль для использования среды выполнения PHP (с настраиваемой конфигурацией и расширениями), которая предоставляется пользователем.

Azure предоставляет три вычислительные модели для запуска приложений: веб-приложения Azure, виртуальные машины Azure и облачные службы Azure. Все три модели поддерживают PHP. Облачные службы — это модель обслуживания типа платформа как услуга (PaaS), в рамках которой используются веб-роли и рабочие роли. Веб-роль облачной службы предоставляет выделенный веб-сервер служб IIS, на котором размещаются интерфейсные веб-приложения. В рабочей роли могут выполняться асинхронные, долгосрочные или постоянные задачи, для которых не требуется взаимодействие с пользователем.

Подробнее об этих моделях можно узнать в статье о вариантах размещения вычислительных сред, предоставляемых Azure.

загрузить Azure SDK для PHP?

Пакет Azure SDK для PHP состоит из нескольких компонентов. В данной статье будут использоваться два из них: Azure PowerShell и эмуляторы Azure. Эти два компонента можно установить при помощи установщика веб-платформы Майкрософт. Подробнее: Установка и настройка Azure PowerShell.

Создание проекта облачных служб

Первым шагом в создании веб-роли или рабочей роли PHP является создание проекта службы Azure. Он служит логическим контейнером для обеих ролей и содержит файлы определения службы (CSDEF) и конфигурации службы (CSCFG).

Чтобы создать новый проект службы Azure, запустите Azure PowerShell от имени администратора и выполните следующую команду.

PS C:\>New-AzureServiceProject myProject

Эта команда создаст новый каталог (myProject), в который можно добавить веб-роли и рабочие роли.

Добавление веб-ролей PHP и ролей работников

Чтобы добавить в проект веб-роль PHP, выполните следующую команду из корневого каталога проекта.

PS C:\myProject> Add-AzurePHPWebRole roleName

Для рабочей роли используйте следующую команду:

PS C:\myProject> Add-AzurePHPWorkerRole roleName

Примечание.

Параметр roleName является необязательным. Если он опущен, имя роли будет создано автоматически. Первая веб-роль создается с именем WebRole1, вторая — WebRole2 и т. д. Первая рабочая роль создается с именем WorkerRole1, вторая — WorkerRole2 и т. д.

Использование собственной среды выполнения PHP

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

Настройка собственной среды выполнения PHP для веб-роли

Чтобы использовать в веб-роли собственную среду выполнения PHP, выполните приведенные ниже действия.

  1. Создайте проект службы Azure и добавьте веб-роль PHP, как описано в этом разделе ранее.

  2. Создайте папку php в папке bin, которая находится в корневом каталоге веб-роли, затем добавьте в папку php среду выполнения PHP (все двоичные файлы, файлы конфигурации, вложенные папки и т. д.).

  3. (Дополнительно.) Если среда выполнения PHP использует драйверы Microsoft для PHP для SQL Server, то необходимо настроить веб-роль для установки SQL Server Native Client 2012 после ее подготовки. Для этого добавьте установщик sqlncli.msi x64 в папку bin в корневом каталоге веб-роли. Скрипт запуска, описанный на следующем шаге, запустит установщик без вмешательства пользователя при подготовке роли. Если среда выполнения PHP не использует драйверы Microsoft для PHP для SQL Server, можно удалить следующую строку из скрипта, показанного на следующем шаге.

    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
  4. Чтобы службы IIS использовали вашу среду PHP для обработки запросов для страниц .php, определите задачу запуска, изменяющую настройки IIS. Для этого откройте файлsetup_web.cmd (в файле bin корневого каталога веб-роли) в текстовом редакторе и замените его содержимое на следующий скрипт:

    @ECHO ON
    cd "%~dp0"
    
    if "%EMULATED%"=="true" exit /b 0
    
    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
    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"
    
  5. Добавьте файлы вашего приложения в корневой каталог веб-роли. Это будет корневой каталог веб-сервера.

  6. Опубликуйте приложение, как описано ниже в разделе Публикация приложения.

Примечание.

Сценарий download.ps1 (в папке bin корневого каталога веб-роли) можно удалить после выполнения описанной выше настройки собственной среды выполнения PHP.

Настройка собственной среды выполнения PHP для рабочей роли

Чтобы использовать в рабочей роли собственную среду выполнения PHP, выполните приведенные ниже действия.

  1. Создайте проект службы Azure и добавьте рабочую роль PHP, как описано в этом разделе ранее.

  2. Создайте папку php в корневом каталоге рабочей роли, а затем добавьте в папку php среду выполнения PHP (все двоичные файлы, файлы конфигурации, вложенные папки и т. д.).

  3. (Дополнительно.) Если среда выполнения PHP использует драйверы Microsoft для PHP для SQL Server, то необходимо настроить рабочую роль для установки SQL Server Native Client 2012 после ее подготовки. Для этого добавьте установщик sqlncli.msi x64 в корневой каталог рабочей роли. Скрипт запуска, описанный на следующем шаге, запустит установщик без вмешательства пользователя при подготовке роли. Если среда выполнения PHP не использует драйверы Microsoft для PHP для SQL Server, можно удалить следующую строку из скрипта, показанного на следующем шаге.

    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
  4. Определите задачу запуска, которая при подготовке роли добавляет исполняемый файл php.exe в переменную среды PATH рабочей роли. Для этого откройте файл setup_worker.cmd (в корневом каталоге рабочей роли) в текстовом редакторе и замените его содержимое на следующий скрипт:

    @echo on
    
    cd "%~dp0"
    
    echo Granting permissions for Network Service to the web root directory...
    icacls ..\ /grant "Network Service":(OI)(CI)W
    if %ERRORLEVEL% neq 0 goto error
    echo OK
    
    if "%EMULATED%"=="true" exit /b 0
    
    msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
    
    setx Path "%PATH%;%~dp0php" /M
    
    if %ERRORLEVEL% neq 0 goto error
    
    echo SUCCESS
    exit /b 0
    
    :error
    
    echo FAILED
    exit /b -1
    
  5. Добавьте файлы вашего приложения в корневой каталог рабочей роли.

  6. Опубликуйте приложение, как описано ниже в разделе Публикация приложения.

Запуск приложения в эмуляторах вычисления и хранения

Эмуляторы Azure представляют собой локальную среду, в которой можно тестировать приложения Azure перед их развертыванием в облаке. Существует несколько различий между эмуляторами и средой Azure. Чтобы разобраться в них, ознакомьтесь со статьей Использование эмулятора хранения Azure для разработки и тестирования.

Обратите внимание, что для использования эмулятора вычислений следует установить PHP локально. Эмулятор вычислений будет использовать локальную установку PHP для запуска приложения.

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

PS C:\MyProject> Start-AzureEmulator

Вы увидите примерно такие выходные данные:

Creating local package...
Starting Emulator...
Role is running at http://127.0.0.1:81
Started

Запущенное в эмуляторе приложение можно просмотреть в браузере, перейдя по адресу, который указан в выходных данных (в приведенном выше примере этоhttp://127.0.0.1:81 ).

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

PS C:\MyProject> Stop-AzureEmulator

Публикация приложения

Чтобы опубликовать приложение, сначала импортируйте параметры публикации с помощью командлета Import-AzurePublishSettingsFile . После этого опубликуйте приложение, используя командлет Publish-AzureServiceProject . Подробнее о входе: Установка и настройка Azure PowerShell.

Следующие шаги

Дополнительную информацию можно найти в Центре разработчика PHP.