如何在Windows Azure相同的Web Role上同时部署PHP和ASP.NET的网站?今天,在与大家分享方法之前,请大家先安装Windows Azure、Visual Studio 2012以及Windows Azure平台上的.NET SDK。也许可以在不安装Visual Studio的前提下也可能同时部署两个网站,但至少我现在还没有发现这个方法。
首先,我强烈推荐大家看看Cloud Cover的视频剪辑。Cloud Cover Episode 37: Mulitple Websites in a Web Role.
这个视频讲述的是如何部署多个.NET网站,但是它包含了你需要部署各种网站的所有信息。
然后,在部署应用之前,你可以做些基础工作,首先在Windows Azure平台上为你的ASP.NET网站的域名创建一个空的托管服务(如:mysite.cloudapp.net)。然后为PHP网站创建一个CNAME域名记录(mysite.cloudapp.net),用于指向Azure域名(mysite.cloudapp.net)。(这里我假设大家有一个域名,类似www.myphpsite.com)。这些步骤做完后,一切就越来越清晰了。
1. 在Visual Studio中创建一个Windows Azure项目,会提示添加Web Role。选择任意一个ASP.NET Web Role(我选择的是ASP.NET MVC 3 Web Role)。以下步骤通过点击OK默认设置即可完成。
2. 打开服务定义文件(ServiceDefinition.csdef),添加类似于下面的元素
01.<Site name="YourSiteName" physicalDirectory="path\to\your\PHP\app">
02.
03.<Bindings>
04.
05.<Binding name="Endpoint1" endpointName="Endpoint1"hostHeader="www.yourdomain.com"/>
06.
07.</Bindings>
08.
09.</Site>
你需要添加name、physicalDirectory、以及hostHeader属性值。Name属性不作特别要求,但是physicalDirectory属性必须指向你本地的PHP应用程序,hostHeader值应该是PHP应用程序的域名。
3. 打开服务定义文件后,在元素后新增以下的元素。
01.<Startup>
02.
03.<Task commandLine="add-environment-variables.cmd"executionContext="elevated" taskType="simple"/>
04.
05.<Task commandLine="install-php.cmd" executionContext="elevated"taskType="simple">
06.
07.<Environment>
08.
09.<Variable name="EMULATED">
10.
11.<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated"/>
12.
13.</Variable>
14.
15.</Environment>
16.
17.</Task>
18.
19.<Task commandLine="monitor-environment.cmd"executionContext="elevated" taskType="background"/>
20.
21.</Startup>
当你部署应用程序的时候,启动任务会开始安装PHP,并且完成IIS的配置,来处理PHP的响应要求
4. 将startup 任务中参考的文件添加至ASP.NET项目,一旦完成后,目录如下图
如果你想要使用Compute 和Storage模拟器来运行你的应用程序,你需要编辑yourhosts 文件(你可以通过点击Start-Run,键入drivers,hosts文件会在etc目录下)载hosts文件中添加以下代码
127.0.0.1 www.myphpsite.com
按住Ctrl+F5(或者选择Start Without Debugging)在模拟器中运行你的应用程序
你可以通过http://127.0.0.1:81来查看生成的网站。如果你的浏览器转接到http://www.myphpsite.com:81,你可以查看到你的PHP站点。
6.当你准备好部署app后,你可以使用Visual Studio的工具:
:http://msdn.microsoft.com/en-us/library/windowsazure/ff687127.aspx#Publish.
发布以后,你可以通过浏览 mysite.cloudapp.net查看ASP.NET应用程序(假设你已经为你的PHP网站建立了一个CNAME记录),并且通过访问www.myphpsite.com可以查看你的PHP站点。