建立 PHP Web 和背景工作角色
概觀
重要
針對新客戶目前已取代 Azure 雲端服務 (傳統),而針對所有客戶,該服務將從 2024 年 8 月 31 日起完全淘汰。 新部署應該使用 Azure Resource Manager 型的新部署模型 Azure 雲端服務 (延伸支援)。
本指南會示範如何在 Windows 開發環境中建立 PHP Web 或背景工作角色、從「內建」的可用版本中選擇特定版本的 PHP、變更 PHP 組態、啟用延伸模組,最後部署至 Azure。 此外也會說明如何設定 Web 或背景工作角色,以使用您所提供的 PHP 執行階段 (具有自訂組態和擴充功能)。
Azure 提供三種運算模型來執行應用程式:Azure 應用程式服務、Azure 虛擬機器和 Azure 雲端服務。 這三種模型都支援 PHP。 雲端服務 (包含 Web 和背景工作角色) 可提供 平台即服務 (PaaS)。 在雲端服務中,Web 角色提供專用的 Internet Information Services (IIS) Web 伺服器,用來代管前端 Web 應用程式。 背景工作角色可以執行非同步、長時間或永久的工作,且不需要使用者互動或輸入。
如需這些選項的詳細資訊,請參閱計算 Azure 提供的裝載選項。
下載 PHP 適用的 Azure SDK
Azure SDK for PHP 由數個元件組成。 本文會使用下列兩個元件:Azure PowerShell 和 Azure 模擬器。 這兩個元件可透過 Microsoft Web Platform Installer 來安裝。 如需詳細資訊,請參閱 如何安裝及設定 Azure PowerShell。
建立雲端服務專案
建立 PHP Web 或背景工作角色的第一個步驟是建立 Azure 服務專案。 Azure 服務專案可作為 Web 和背景工作角色的邏輯容器,且包含專案的服務定義 (.csdef) (英文) 和服務組態 (.cscfg) (英文) 檔案。
若要建立新的 Azure 服務專案,請以系統管理員身分執行 Azure PowerShell 並執行下列命令:
PS C:\>New-AzureServiceProject myProject
此命令會建立新目錄 (myProject
),讓您可將 Web 和背景工作角色新增至該處。
新增 PHP Web 或背景工作角色
若要將 PHP Web 角色新增至專案,請從專案的根目錄中執行下列命令:
PS C:\myProject> Add-AzurePHPWebRole roleName
對於背景工作角色,請使用下列命令:
PS C:\myProject> Add-AzurePHPWorkerRole roleName
注意
roleName
是選用參數。 若省略此參數,將會自動產生角色名稱。 第一個建立的 Web 角色將是 WebRole1
、第二個將是 WebRole2
,依此類推。 第一個建立的背景工作角色將是 WorkerRole1
、第二個將是 WorkerRole2
,依此類推。
使用您自己的 PHP 執行階段
在某些情況下,您可能不想依照前述的說明選取內建 PHP 執行階段並加以設定,而是想提供自己的 PHP 執行階段。 例如,您可以使用與在開發環境使用的 Web 或背景工作角色中相同的 PHP 執行階段。 此流程可讓您更輕鬆地確保應用程式在生產環境中保持相同行為。
設定 Web 角色以使用您自己的 PHP 執行階段
若要設定 Web 角色以使用您所提供的 PHP 執行階段,請遵循下列步驟:
如本文先前所述,建立 Azure 服務專案並加入 PHP Web 角色。
在位於 Web 角色根目錄內的
bin
資料夾中建立php
資料夾,然後將 PHP 執行階段 (所有的二進位檔、組態檔、子資料夾等) 新增至php
資料夾。(選擇性) 如果您的 PHP 執行階段使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,則必須將 Web 角色設定為在佈建時安裝 SQL Server Native Client 2012。 若要進行此設定,請將 sqlncli.msi x64 安裝程式新增至 Web 角色根目錄的
bin
資料夾中。 下一個步驟中說明的啟動指令碼,將會在角色進行佈建時以無訊息方式執行安裝程式。 如果您的 PHP 執行階段並未使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,您可以從下一個步驟所顯示的指令碼中移除以下一行: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 執行階段使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,則必須將背景工作角色設定為在佈建時安裝 SQL Server Native Client 2012。 若要進行此設定,請將 sqlncli.msi x64 安裝程式新增至背景工作角色的根目錄。 下一個步驟中說明的啟動指令碼,將會在角色進行佈建時以無訊息方式執行安裝程式。 如果您的 PHP 執行階段並未使用適用於 PHP for SQL Server 的 Microsoft 驅動程式,您可以從下一個步驟所顯示的指令碼中移除以下一行:
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
您可以開啟網頁瀏覽器,並瀏覽至輸出中顯示的本機位址 (先前所示範例輸出中的 http://127.0.0.1:81
),即可看見您的應用程式正在模擬器中執行。
若要停止模擬器,請執行下列命令:
PS C:\MyProject> Stop-AzureEmulator
發佈您的應用程式
若要發佈應用程式,您必須先使用 Import-AzurePublishSettingsFile Cmdlet 匯入您的發佈設定。 使用 Publish-AzureServiceProject Cmdlet 發佈應用程式,如下所示。 如需登入的相關資訊,請參閱 如何安裝和設定 Azure PowerShell。
下一步
如需詳細資訊,請參閱 PHP 開發人員中心。