You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps Pipeline中构建部署Laravel应用(Windows环境)

在Azure DevOps Pipeline中构建并部署Laravel应用的可行方案

一、构建可部署到服务器的压缩包

基于Azure提供的PHP通用模板修改即可适配Laravel,以下是完整的azure-pipelines.yml配置逻辑:

  1. 指定PHP版本
    选择Laravel兼容的PHP版本(Laravel 9+推荐8.1及以上):
- task: UsePHP@1
  inputs:
    version: '8.2'
  1. 安装Composer依赖
    跳过开发依赖以减小包体积,同时优化自动加载:
- script: |
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
    php composer.phar install --no-dev --optimize-autoloader
  displayName: '安装生产环境依赖'
  1. 优化Laravel应用
    生成密钥并缓存配置、路由、视图,提升运行效率:
- script: |
    cp .env.example .env
    php artisan key:generate
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
  displayName: '优化Laravel应用配置'
  1. 打包并发布工件
    将应用文件打包为ZIP,发布到Azure DevOps工件库供后续部署:
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/laravel-app.zip'
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

二、直接部署到Windows服务器

如果要一键完成构建+部署,在上述构建步骤后添加以下部署逻辑:

  1. 准备Windows服务器环境
    提前在服务器上完成:
  • 安装IIS并启用CGI、FastCGI模块
  • 安装对应版本的PHP,配置IIS的PHP处理程序映射
  • 确保IIS_IUSRS组对目标目录有读写权限
  1. 复制应用文件到服务器
    使用WindowsMachineFileCopy任务将打包好的文件部署到服务器:
- task: WindowsMachineFileCopy@2
  inputs:
    sourcePath: '$(Build.ArtifactStagingDirectory)/laravel-app.zip'
    machineNames: '你的Windows服务器IP/主机名'
    adminUserName: '服务器管理员账户'
    adminPassword: '$(ServerPassword)' # 在Azure DevOps变量组中存储敏感密码
    targetPath: 'C:\inetpub\wwwroot\laravel-app'
    cleanTargetFolder: true
  1. 自动化服务器配置
    通过PowerShell任务完成权限设置和IIS站点配置:
# 设置storage和bootstrap/cache目录权限
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $acl = Get-Acl "C:\inetpub\wwwroot\laravel-app\storage"
      $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS","Modify","ContainerInherit,ObjectInherit","None","Allow")
      $acl.AddAccessRule($rule)
      Set-Acl "C:\inetpub\wwwroot\laravel-app\storage" $acl

      $acl = Get-Acl "C:\inetpub\wwwroot\laravel-app\bootstrap\cache"
      $acl.AddAccessRule($rule)
      Set-Acl "C:\inetpub\wwwroot\laravel-app\bootstrap\cache" $acl
    machineName: '你的Windows服务器IP/主机名'
    userName: '服务器管理员账户'
    password: '$(ServerPassword)'

# 配置IIS站点指向Laravel的public目录
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      Import-Module WebAdministration
      $siteExists = Get-Website -Name "LaravelApp" -ErrorAction SilentlyContinue
      if (-not $siteExists) {
          New-Website -Name "LaravelApp" -PhysicalPath "C:\inetpub\wwwroot\laravel-app\public" -Port 80 -ApplicationPool "DefaultAppPool"
      } else {
          Set-ItemProperty "IIS:\Sites\LaravelApp" -name physicalPath -value "C:\inetpub\wwwroot\laravel-app\public"
      }
    machineName: '你的Windows服务器IP/主机名'
    userName: '服务器管理员账户'
    password: '$(ServerPassword)'

关键注意事项

  • 敏感配置(数据库连接、APP_KEY等)不要硬编码在.env中,建议在Azure DevOps变量组中配置,部署时通过PowerShell写入服务器的.env文件
  • 确保服务器安装的PHP扩展满足Laravel要求(BCMath、Ctype、JSON、Mbstring、OpenSSL、PDO、Tokenizer、XML等)
  • 若服务器无外网,必须在Pipeline中完成依赖安装后再部署,避免服务器拉取Composer包失败

内容的提问来源于stack exchange,提问作者Usman Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:06:18