【问题标题】:VSTS - configuring PHP settings for Azure WebApp during a deploymentVSTS - 在部署期间为 Azure WebApp 配置 PHP 设置
【发布时间】:2017-08-27 16:59:50
【问题描述】:

我正在为一个 Azure 项目工作,该项目只能使用 Visual Studio CI 中的 ARM 模板进行部署,并且我们只有 Azure 门户的读取权限。

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

我想要做的是覆盖一些 PHP 设置并为 Azure Web 应用程序启用一些额外的扩展。使用 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))而不是绝对路径,但它没有改变任何东西。

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

ini文件的内容;

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

更新

还有应用服务部署任务,

以及来自应用程序设置的虚拟应用程序和目录

【问题讨论】:

  • 查看extension_dir 值? - “PHP 应该在哪个目录中查找可动态加载的扩展。另请参见:enable_dl 和 dl()。”不要与 php_ini_scan_dir 混淆。
  • 抱歉,我是倒着读的。不得不问,你上传文件后重启了吗?
  • 复制文件任务在应用部署之前完成。应该不需要重启。此外,我无法从门户重新启动应用程序。
  • Azure App Service Deploy任务的详细设置是什么?应用服务的虚拟应用程序和目录的详细设置是什么? (在Azure门户中打开应用服务>应用程序设置>虚拟应用程序和目录)复制文件任务只是用于复制当前机器(代理机器)上的文件
  • @starain-MSFT 我已经更新了问题并附上了截图。除了屏幕截图之外,Azure App Service Deploy 任务中没有其他设置。

标签: php azure continuous-integration azure-devops azure-web-app-service


【解决方案1】:

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

在将应用部署到 Azure 应用服务之前,您可以通过 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

【讨论】:

  • 我尝试使用 Kudu API 将文件上传到 sile/ini 文件夹。 Azure PowerShell 脚本任务已成功完成,但结果没有改变。文件夹 /site 是否可能在应用服务部署之前被完全删除?
  • @Onur 不,站点文件夹不会被删除。详细代码是多少?前往https://[app service name].scm.azurewebsites.net/DebugConsole,查看对应文件夹中是否存在该文件。
  • 非常感谢您的帮助和努力。我已经解决了我的问题并将其发布在这里。
【解决方案2】:

这是我启用 PHP 扩展和配置 PHP 设置的方法。

我放弃了尝试将所有内容设置在一个 ini 文件中。对于 PHP 设置,我在项目源代码的根目录中创建了一个 .user.inifile 并在那里设置 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 文件包含到下载的工件中。因此,为此我调整了构建阶段,如下所示。

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

也许将复制文件任务放在应用服务部署任务之前就足够了,并且不需要重新启动应用程序,但我还没有尝试过。为了重新启动应用程序,我使用 Azure PowerShell,并在文件中编写了以下脚本。

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

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

希望它也对其他人有所帮助。

【讨论】:

  • 重启的替代方法是让系统拾取新的ini文件。我相信默认情况下它应该每 5 分钟重新加载一次。
猜你喜欢
  • 2019-12-19
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2020-03-11
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多