作为ASP.NET开发者,部署应用到测试或生产环境是家常便饭。不知道大家平时都是怎么部署网站的?手工拷贝文件?FTP?还是高端的package解压?对我来说,最方便的还是WebDeploy,它可以让我从Visual Studio中一键部署网站到IIS服务器,并且智能判断哪些文件是新增的,哪些是需要修改或删除的。Windows Azure Website就默认支持这样的部署方式。但我们不可能一直在公有云上做开发,如果我们想把这样方便的功能带到本地怎么办呢?

经过开荒,我在Windows Server 2008 R2和Windows Server 2012 R2上都成功配置了Web Deploy。目前用的最多的还是WS2008R2,所以我就带大家来看看如何在这款系统上安装和配置Web Deploy。

首先,你需要在IIS上安装管理服务。

在Server Manager(服务器管理)里面,展开Roles(角色),选中IIS。

然后在右边的窗口中,点击“Add Role Services”(不好意思,不确定中文版的这个叫什么。。。可能是“添加角色服务”?)

在打开的向导中,选择“管理服务”,然后安装。

装完之后,在IIS主页面里你应该能看到最下方有个“management service”的图标。接下来,就要安装Web Deploy了。如果你的服务器可以连接Internet,最方便的是用IIS里自带的“Web Platform Installer”安装。如果木有Internet连接,就只能到大微软的网站去下载离线安装包了。http://www.iis.net/downloads/microsoft/web-deploy(在页面下方有不同平台的下载链接)。

打开Web Platform Installer后,如果有要你升级的,就点击“I Accept”,更新到最新版本。

然后搜索recommend,回车。找到“Recommended Server Configuration for Web Hosting Providers”,点击Add,然后点下一步。

在下一步的对话框里,如果你不需要PHP,可以把PHP相关的全部X掉,然后点击 I Accept,进行下载和自动安装。

对于没有Internet连接的朋友,在手动安装Web Deploy的时候,记的把所有组件都选上,不然最后deploy的时候你会得到404错误。

web platform installer在一边撸的时候,我们可以先把一会儿部署要用的账户加好。这个账户可以是非管理员的普通账户。创建用户最快,最装逼的办法是用cmd,就像这样:net user 用户名 密码 /add。这样就能创建一个非管理员的普通账户。

创建完账户以后,我们要回到Management Service里,把远程连接给打开。

打开Management Service后,勾选“Enable Remote connections”。如果你的对话框是灰色不可用的,那你得先停止“Web Management Service”这项服务(WMSvc)。CMD里的装逼命令是:net stop wmsvc

最后,点击“Apply”,然后点击“Start”启动WMSvc服务。

现在,Web Platform Installer应该已经撸完了。我们需要把IIS管理面板关掉再开,不然你是看不到下面截图里的内容的

如果一切正常,那么在右键点击你的网站之后,在Deploy菜单里应该会多一项“Configure Web Deploy Publishing...”

点开之后,设置刚刚创建的非管理员账户。然后点击setup。

看到下面的消息后就代表配置成功了。

但是别急,还有一步要确认,就是你的防火墙是否允许8127端口通讯了呢?没有的话就打开一下。

好了,到此为止安装和配置就全部完成了。我们可以试试看能不能正常使用。在刚才“Configure Web Deploy Publishing”对话框里,有“publish settings file”的保存路径。我们找到这个文件,把它拷贝到开发机上。

然后在Visual Studio部署网站的向导中,导入这个文件。

输入正确的用户名和密码(就是刚才创建的账号),点击validate connection,如果看到绿色的勾,就表示成功了。

点击下一步就能看到部署文件的预览了。

最后,点击Publish,VS会自动帮我们撸完一切,非常的高端大气上档次。回到服务器上刷新看看,你的网站已经部署好了!

最后补充说明几个要注意的地方:

1. 如果你的VS一直报404错误,就到服务器上看看你的WebDeploy组件是否装全了?特别是那个handler。就是msdeploy.axd。没有它是不能部署的。

2. 为什么我要用非管理员账号呢?其实管理员账号完全可以,但通常我们的服务器为了安全,是不会给开发人员分配过高权限的。所以创建一个普通账户,并仅仅对他们要用的网站目录授权是最安全的。

3. 建议的Web Deploy应用场景:开发和测试。生成环境这样部署是比较危险的,如果你对部署这一块不是十分了解的话不建议用web deploy操作。并且生成环境也不应该安装web deploy这样的组件。

4. 强烈推荐一个专门讲Web应用程序部署如何装逼的视频:Web Deployment Made Awesome: If You're Using XCopy, You're Doing It Wrong http://channel9.msdn.com/Events/MIX/MIX10/FT14