Статьи

Развертывание сайтов PHP и ASP.NET в одной веб-роли Azure

На прошлой неделе один из коллег обратился ко мне с вопросом, который ему задал клиент: как развернуть веб-сайт PHP и веб-сайт ASP.NET в одной веб-роли в Windows Azure? Учитывая смешанную среду, с которой сегодня работают многие люди, я подумал, что обмен ответами на его вопрос может быть полезным для других. Однако, в отличие от многих других моих публикаций, конкретное решение, которым я собираюсь поделиться, требует Visual Studio 2010 с установленным .NET SDK для Windows Azure. Должна быть возможность развернуть оба сайта без Visual Studio … Я просто еще не исследовал этот подход. (Я ускорю это расследование, если услышу, что требую его в комментариях.)

Несколько вещей, прежде чем я начну …

Во-первых, я настоятельно рекомендую вам посмотреть этот эпизод Cloud Cover с 9:00 до 28:00: Cloud Cover Episode 37: несколько веб-сайтов в веб-роли . Несмотря на то, что в видео рассказывается о том, как развернуть несколько веб-сайтов .NET, в нем содержится практически вся информация, необходимая для развертывания веб-сайтов со смешанным вкусом. Видео предоставит контекст для следующих шагов … все, что я делаю, это заполняю пару мелких деталей. (Большое спасибо Стиву Марксу за помощь в выяснении деталей.)

Во-вторых, перед тем, как создавать, упаковывать и развертывать приложения, я предлагаю вам выполнить небольшую предварительную работу. Сначала создайте пустую размещенную службу в Windows Azure, чтобы предоставить доменное имя для вашего веб-сайта ASP.NET (например, mysite.cloudapp.net ). Затем создайте запись CNAME для доменного имени вашего сайта PHP (например, www.myphpsite.com ), которое указывает на ваше доменное имя Azure ( mysite.cloudapp.net ). (Я предполагаю, что у вас уже есть доменное имя, например www.myphpsite.com .) Вы можете выполнить эти шаги позже, но заранее сделав их, вы сможете сделать процесс ниже более понятным.

Теперь вы готовы начать …

1. Создайте проект Windows Azure с помощью Visual Studio . Вам будет предложено добавить веб-роль в этом процессе. Выберите любую веб-роль ASP.NET (я выбрал веб-роль ASP.NET MVC 3). Нажмите кнопку ОК, чтобы принять настройки по умолчанию на протяжении всего процесса.

2. Откройте файл определения сервиса ( ServiceDefinition.csdef ). Добавьте элемент <Site>, аналогичный приведенному ниже, к элементу <Sites> . (Уже будет один элемент <Site> , соответствующий вашему сайту ASP.NET. Этот элемент будет соответствовать вашему сайту PHP.)

<Site name="YourSiteName" physicalDirectory="path\to\your\PHP\app">

  <Bindings>

    <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="www.yourdomain.com" />

  </Bindings>

</Site>

Обратите внимание, что вам нужно заполнить значения для атрибутов name , PhysicalDirectory и HostHeader . Значение для атрибута name несколько произвольно, но атрибут физическогоDirectory должен указывать на ваше локальное PHP-приложение, а значение hostHeader должно быть доменным именем для вашего PHP-приложения.

3. Пока у вас открыт файл определения сервиса, добавьте следующий элемент <Startup> сразу после элемента <Sites> .

<Startup>

      <Task commandLine="add-environment-variables.cmd" executionContext="elevated" taskType="simple" />

      <Task commandLine="install-php.cmd" executionContext="elevated" taskType="simple" >      

        <Environment>

          <Variable name="EMULATED">

            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />

          </Variable>

        </Environment>

      </Task>

      <Task commandLine="monitor-environment.cmd" executionContext="elevated" taskType="background" />

</Startup>

Эти задачи запуска установят PHP и настроят IIS для обработки запросов PHP при развертывании ваших приложений. (Мы добавим файлы, на которые есть ссылки в этих задачах, к нашему проекту.)

Примечание . Я заимствую задачи запуска и ссылочные файлы из стандартного скаффолда, который вы можете создать с помощью Windows Azure SDK для PHP .

4. Добавьте файлы, указанные в задачах запуска, в ваш проект ASP.NET. (Необходимые файлы находятся в .zip-файле, прикрепленном к этому сообщению). Когда вы закончите, вы должны иметь структуру каталогов, которая выглядит следующим образом:

образ

5. Если вы хотите запустить свое приложение с помощью эмуляторов вычислений и хранения, вам нужно отредактировать файл hosts (его можно найти, выбрав «Пуск» — «Выполнить» и введя драйверы — файл hosts будет находиться в каталоге etc ) , Добавьте эту строку в файл hosts :

127.0.0.1 www.myphpsite.com

Теперь нажмите Ctrl + F5 (или выберите «Пуск без отладки»), чтобы запустить приложение в эмуляторе.

образ

Вы должны увидеть ваш сайт на http://127.0.0.1:81 . Если вы перейдете по ссылке http://www.myphpsite.com:81, вы должны увидеть свой сайт PHP.

6. Когда вы будете готовы развернуть свое приложение, вы можете использовать инструменты Visual Studio: http://msdn.microsoft.com/en-us/library/windowsazure/ff687127.aspx#Publish . После публикации вы сможете перейти на mysite.cloudapp.net, чтобы увидеть свое приложение ASP.NET, и (при условии, что вы настроили запись CNAME для своего сайта PHP) и перейти на сайт www.myphpsite.com, чтобы увидеть свой PHP. сайт.

Вот и все … надеюсь, это окажется полезным.

Спасибо.

-Брайан

Источник: http://blogs.msdn.com/b/silverlining/archive/2012/02/07/deploying-php-and-asp-net-sites-in-a-single-azure-web-role. ASPX