创建 PHP Web 角色和辅助角色
概述
重要
从 2024 年 9 月 1 日开始,已弃用所有客户的云服务(经典版)。 从 2024 年 10 月开始,Microsoft 将停止并关闭任何正在运行的现有部署,数据将永久性丢失。 新部署应使用基于 Azure 资源管理器的新型部署模型 Azure 云服务(外延支持)。
本指南展示了如何执行以下操作:在 Windows 开发环境中创建 PHP Web 角色或辅助角色,从提供的“内置”版本中选择特定版本的 PHP,更改 PHP 配置,启用扩展,最后部署到 Azure。 它还介绍了如何将 Web 角色或辅助角色配置为使用你提供的 PHP 运行时(带自定义配置和扩展)。
Azure 提供了三种用于运行应用程序的计算模型:Azure 应用服务、Azure 虚拟机和 Azure 云服务。 这三种模型都支持 PHP。 云服务(包括 Web 角色和辅助角色)提供了平台即服务 (PaaS) 。 在云服务中,Web 角色提供专门用于托管前端 Web 应用程序的 Internet Information Services (IIS) Web 服务器。 辅助角色可运行独立于用户交互或输入的异步任务、运行时间较长的任务或永久性任务。
有关这些选项的详细信息,请参阅 Azure 提供的计算托管选项。
下载 Azure SDK for PHP
Azure SDK for PHP 由多个组件构成。 本文使用其中两个:Azure PowerShell 和 Azure 模拟器。 可以通过 Microsoft Web 平台安装程序安装这两个组件。 有关详细信息,请参阅 如何安装和配置 Azure PowerShell。
创建云服务项目
创建 PHP Web 角色或辅助角色的第一步是创建 Azure 服务项目。 Azure 服务项目用作 Web 角色和辅助角色的逻辑容器,包含项目的服务定义 (.csdef) 和服务配置 (.cscfg) 文件。
若要创建新的 Azure 服务项目,请以管理员身份运行 Azure PowerShell 并执行以下命令:
PS C:\>New-AzureServiceProject myProject
此命令创建可将 Web 角色和辅助角色添加到的新目录 (myProject
)。
添加 PHP Web 角色或辅助角色
要将 PHP Web 角色添加到项目,请从项目的根目录中运行以下命令:
PS C:\myProject> Add-AzurePHPWebRole roleName
对于辅助角色,请使用此命令:
PS C:\myProject> Add-AzurePHPWorkerRole roleName
注意
roleName
参数是可选的。 如果省略该参数,则自动生成角色名称。 创建的第一个 Web 角色将为 WebRole1
,第二个 Web 角色为 WebRole2
,依此类推。 创建的第一个辅助角色将为 WorkerRole1
,第二个辅助角色为 WorkerRole2
,依此类推。
使用自己的 PHP 运行时
在某些情况下,可能需要提供自己的 PHP 运行时,而不是如上所述选择并配置内置 PHP 运行时。 例如,可以在 Web 角色或辅助角色中使用你在开发环境中使用的 PHP 运行时, 此过程可以更容易地确保应用程序行为在生产环境中保持不变。
将 Web 角色配置为使用你自己的 PHP 运行时
要将 Web 角色配置为使用提供的 PHP 运行时,请执行下列步骤:
创建一个 Azure 服务项目并添加 PHP Web 角色,如本文中上文所述。
在位于 Web 角色的根目录中的
bin
文件夹中创建一个php
文件夹,然后将 PHP 运行时(所有二进制文件、配置文件、子文件夹等)添加到该php
文件夹中。(可选)如果 PHP 运行时使用 Microsoft Drivers for PHP for SQL Server,则需要将 Web 角色配置为在预配它时安装 SQL Server Native Client 2012。 为此,请将 sqlncli.msi x64 安装程序添加到 Web 角色的根目录中的
bin
文件夹。 下一步中所述的启动脚本在设置角色时以静默方式运行安装程序。 如果你的 PHP 运行时未使用 Microsoft Drivers for PHP for SQL Server,则可从下一步所示的脚本中删除以下行:msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
定义一个启动任务,用以将 Internet Information Services (IIS) 配置为使用 PHP 运行时来处理对
.php
页面的请求。 为此,请在文本编辑器中打开setup_web.cmd
文件(位于 Web 角色的根目录的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"
将应用程序文件添加到 Web 角色的根目录,该目录将成为 Web 服务器的根目录。
如发布应用程序部分中所述发布应用程序。
注意
在按照上述与使用自己的 PHP 运行时对应的步骤进行操作后,可以删除 download.ps1
脚本(位于 Web 角色的根目录的 bin
文件夹中)。
将辅助角色配置为使用自己的 PHP 运行时
要将辅助角色配置为使用提供的 PHP 运行时,请执行下列步骤:
创建一个 Azure 服务项目并添加 PHP 辅助角色,如本文上文所述。
在辅助角色的根目录中创建一个
php
文件夹,然后将 PHP 运行时(所有二进制文件、配置文件、子文件夹等)添加到该php
文件夹中。(可选)如果 PHP 运行时使用 Microsoft Drivers for PHP for SQL Server,则需要将辅助角色配置为在设置它时安装 SQL Server Native Client 2012。 为此,请将 sqlncli.msi x64 安装程序添加到辅助角色的根目录。 下一步中所述的启动脚本在设置角色时以静默方式运行安装程序。 如果你的 PHP 运行时未使用 Microsoft Drivers for PHP for SQL Server,则可从下一步所示的脚本中删除以下行:
msiexec /i sqlncli.msi /qn IACCEPTSQLNCLILICENSETERMS=YES
定义在设置角色时将
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
将应用程序文件添加到辅助角色的根目录。
如发布应用程序部分中所述发布应用程序。
在计算和存储模拟器中运行应用程序
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
通过打开 Web 浏览器并浏览到输出中所示的本地地址(前面显示的示例输出中的 http://127.0.0.1:81
),可以查看正在模拟器上运行的应用程序。
若要停止模拟器,请执行此命令:
PS C:\MyProject> Stop-AzureEmulator
发布应用程序
若要发布应用程序,需要先使用 Import-AzurePublishSettingsFile cmdlet 导入发布设置。 然后使用 Publish-AzureServiceProject cmdlet 发布用户的应用程序。 有关登录的信息,请参阅如何安装和配置 Azure PowerShell。
后续步骤
有关详细信息,请参阅 PHP 开发人员中心。