如何在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=Endpoint1hostHeader=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.cmdexecutionContext=elevated taskType=simple /> 04. 05.Task commandLine=install-php.cmd executionContext=elevatedtaskType=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.cmdexecutionContext=elevated taskType=background /> 20. 21.Startup> 当你部署应用程序的时候,启动任务会开始安装PHP,并且完成IIS的配置,来处理PHP的响应要求
4. 将startup 任务中参考的文件添加至ASP.NET项目,一旦完成后,目录如下图
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站点。 |