На прошлой неделе один из коллег обратился ко мне с вопросом, который ему задал клиент: как развернуть веб-сайт 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. сайт.
Вот и все … надеюсь, это окажется полезным.
Спасибо.
-Брайан