Как установить документ по умолчанию для службы приложений Azure, если он существует в подкаталоге? - PullRequest
0 голосов
/ 14 сентября 2018

Я развертываю службу приложений Azure из DevOps Azure через конвейер выпуска, настроенный для выполнения задачи развертывания службы приложений Azure на моем агенте сборки.Задача развертывания нацелена на корень моей службы приложений, поэтому она будет развернута в моей папке '\ site \ wwwroot \'.

Azure DevOps release pipeline configuration

Мой проектявляется веб-приложением Laravel PHP, поэтому для документа по умолчанию задано значение index.php.Мое приложение развернуто в '\ site \ wwwroot \', но расположение моего файла 'index.php', для которого задан документ по умолчанию, однако находится в '\ site \ wwwroot \'.

Azure App Service Application Settings for default document and virtual application directories

Не большая проблема, верно?Просто установите каталог приложения в «\ site \ wwwroot \ public», и приложение работает, потому что теперь оно может найти мой документ по умолчанию (index.php).За исключением того, что есть одна проблема.

Когда Azure DevOps развертывается в службе приложений Azure, она развертывается в каталоге приложения, заданном в Azure.Поскольку мой корень теперь имеет значение «\ site \ wwwroot \ public», чтобы исправить проблему с поиском документа по умолчанию, AzureDevops развертывает последующие сборки в папку «\ site \ wwwroot \ public».

В идеале,Я хотел бы сохранить свой файл index.php в моей папке \ site \ wwwroot \ public, так как это вызывает проблемы при перемещении его в корень моего проекта.Кажется, я не могу понять, как заставить Azure искать в папке общего доступа документ по умолчанию.Нужно ли мне писать файл web.config и помещать его в корень моего проекта для IIS, чтобы найти его?


Обновление:

Я все еще пытаюсь решить эту проблему.иметь.Я не могу настроить Azure или Azure DevOps, чтобы различать каталог, в котором развернуто мое приложение, и каталог, из которого обслуживается мое приложение.

Я не могу просто создать два виртуальных приложения, поскольку это может привести кмой корневой каталог к ​​этой конечной точке.Мне нужно просто указать DevOps Azure, где разместить мое приложение в веб-приложении.

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Так как он работает нормально после установки каталога приложения в '\ site \ wwwroot \ public', вы можете добавить новое виртуальное приложение с физическим путем 'site \ wwwroot \ public' вместо изменения исходного.

Тогда есть два элемента, например:

enter image description here

Что касается развертывания через Azure DevOps, просто разверните приложение в этой службе приложения (site \ wwwroot).

После этого вы можете получить доступ к своему приложению через [URL-адрес службы приложений] \ PHP.

0 голосов
/ 19 сентября 2018

Вы можете указать местоположение, в которое развертывается исходный код, из DevOps Azure (или Git, BitBucket и т. Д.), Предоставив службе приложений Azure переменную среды Kudu.См. Следующие переменные среды, настроенные в разделе «Параметры приложения» портала Azure для моей службы приложений Azure.

Environment variable configured for the source code management path (SCM_REPOSITORY_PATH and SCM_TARGET_PATH Kudu variables)

Это позволяет мне инструктироватьгде код развернут.В противном случае кажется, что путь управления исходным кодом Kudu по умолчанию взят из ваших путей к виртуальным приложениям.

Дополнительная информация: https://github.com/projectkudu/kudu/wiki/Deploying-inplace-and-without-repository


Обновление:

Похожечто, несмотря на то, что вы можете настраивать местоположение, в котором развертывается ваш код, с помощью переменных среды Kudu, вы по-прежнему ограничены именем папки вашего виртуального приложения.

Например, если я установил SCM_TARGET_PATH на \home\sites\app и у меня есть виртуальное приложение с виртуальным путем / и физическим путем \home\sites\app\public, Azure DevOps развернет ваш код в \home\sites\app\public и не ожидаемый \home\sites\app.

Это огромное неудобство, я не могу разместить свое приложение Laravel, потому что мое непрерывное развертывание не будет работать так, как работает Azure в настоящее время.Я должен был бы опубликовать свой код в контейнере Docker и использовать его вместо этого (что я не хочу делать).

0 голосов
/ 14 сентября 2018
  • Переименование server.php в index.php
  • Скопировать .htaccess из общей папки в корневую папку

  • Изменение .htaccess:

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    

перейти к функции /Illuminate/Foundation/helpers.php/asset () следующим образом:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}
...