VSTS - 在部署期间为Azure WebApp配置PHP设置

时间:2017-08-22 22:15:38

标签: php azure continuous-integration azure-devops azure-web-sites

我正在为Azure项目工作,其中只能使用Visual Studio CI中的ARM模板进行部署,并且我们只能访问Azure门户。

如果我能够使用Kudu,我也无法使用,因为我无法从Portal访问。

我尝试做的是覆盖一些PHP设置并为Azure Web App启用一些额外的扩展。使用Kudu非常简单,但我无法弄清楚在部署Web应用程序之前,如何在发布期间上传两个排除的文件类型.dll.ini文件。

到目前为止,我尝试了以下对我有意义的步骤,但显然它不起作用,而且方法不对。如果有人能指导我采取正确的步骤,我会很高兴。

我按照https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-php-configure

中的说明设置了PHP_INI_SCAN_DIR=d:\home\site\ini

我使用以下任务上传文件,并可以在日志中看到它们上传。我还尝试使用具有已定义变量的路径,例如$(Agent.ReleaseDirectory)而不是绝对路径,但它没有改变任何东西。

Release tasks

enter image description here

似乎PHP正在寻找d:\home\site\ini文件夹,但无法找到任何ini文件。我设定的其他选项也没有改变。

enter image description here

ini文件的内容;

; extensions.ini
; Enable Extensions
extension=d:\home\site\ext\php_redis.dll
; Settings
memory_limit = 256M
upload_max_filesize = 10M

更新

App Service部署任务,

enter image description here

应用程序设置中的虚拟应用程序和目录

enter image description here

2 个答案:

答案 0 :(得分:0)

虚拟应用程序和目录的根路径是 site \ wwwroot ,因此如果通过Azure App Service Deploy任务部署Web应用程序,则所有文件都将部署到 wwwroot 文件夹。

在将app部署到azure app服务之前,您可以通过Kudu API将特定文件上传到相应的文件夹(例如site \ ini)。

请参阅此主题以了解如何在VSTS版本中使用Kudu API:Remove files and foldes on Azure before a new deploy from VSTS

请参阅此文章,了解如何将文件上传到应用服务:Interacting with Azure Web Apps Virtual File System using PowerShell and the Kudu API

答案 1 :(得分:0)

以下是我为启用PHP扩展和配置PHP设置所采用的方法。

我放弃尝试在一个ini文件中设置所有内容。对于PHP设置,我在项目源代码的根目录中创建了一个.user.ini文件,并在那里设置了PHP选项。

; .user.ini
memory_limit = 256M
default_socket_timeout = 600
post_max_size = 64M
upload_max_filesize = 64M
max_execution_time = 1200
max_input_time = 1200

但是如果您在构建阶段有一个文件类型过滤器,则添加*.ini**/*.ini将不会将.user.ini文件包含在下载的工件中。所以为此,我调整了构建阶段,如下所示。

Build phases

对于PHP扩展,我使用了PHP_EXTENSIONS环境变量。我已使用“复制文件”任务将DLL文件复制到D:\home\site\ext并设置PHP_EXTENSIONS=ext\php_redis.dll。请参阅下面的任务。

Deployment tasks

在App Service Deploy任务之前放置复制文件任务并且不需要重新启动应用程序就好了,但我还没有尝试过。对于重新启动应用程序,我使用Azure PowerShell,并在文件中写入以下脚本。

Param(
    [string]$ResourceGroup,
    [string]$appName
)

Restart-AzureRmWebApp -ResourceGroupName $ResourceGroup -Name $appName | Out-Null
Write-Host "Started web app '$appName'"

希望它也可以帮助别人。