本来我一直受官网上的.net core内容误导,以为.net core 3.1最低只支持Windows Server 2012,后来在查询资料和自己尝试之后,亲身得出结论,Windows Server 2008R2 SP1上是可以部署.net core 3.1项目的。
对的,没错,Windows Server 2008R2 SP1是可以部署.net core 3.1项目的,具体怎么部署以及部署中的问题我会在下面的内容中介绍
首先介绍下我目前的项目情况:
- 项目前后端分离,后端是asp.net core api,前端是VUE的单页应用
- 需要部署到Windows Server 2008R2 SP1系统服务器上的IIS服务上
- 数据库使用的是SQL Server 2008R2
- 开发是在我自己MacBook Pro上的Visual Studio For Mac
我先是发布自己的后端项目,这个没有什么问题,生成之后的文件我拷贝至服务器上面。
接下来是给服务器安装.net core 3.1的runtime,不需要安装SDK,SDK是给创建项目和编译项目使用,如果只是部署,那就不需要安装SDK,只需要安装一个runtime。
.net core 3.1 runtime的下载网址我贴在这里,方便大家直接下载
.net core 3.1 runtime的下载网站
推荐下载红色框框中的东西,一键安装,省心省力。在安装这个文件之前根据官网的内容,我们还需要安装如下两个软件
先行安装这两个再去安装上面的.net core 3.1 runtime,否则的话可能会出错。
安装完成之后重启IIS服务,不需要重启服务器,只需要在IIS界面中右击选择停止,再点击启动即可完成重启。
完成这一步骤之后也可以在commond line(命令行)中输入dotnet,没有报错,反而出现使用指导即可说明安装成功。
接下来部署项目,按照下述操作步骤操作即可
应用程序池设置为无托管代码
启动起来之后我这边访问首先出了一个问题是HTTP 错误 401.2-Unauthorized由于身份验证头无效,您无权查看此页
- 功能视图---身份验证--全部禁用--开启--匿名身份验证-编辑--选择应用程序池标识!!
- 功能视图---授权规则--右键添加允许规则--选择所有匿名用户!
- 保证虚拟目录访问权限如: 我是懒人以下角色 我全部设置的完全控制
我在文件夹的安全选项里添加了一个Everyone的角色拥有完全读写权限
第一个问题解决,接下来我遇到了IIS7.5 HTTP错误403.1-Forbidden 您尝试从某个目录运行CGI、ISAPI或其他可执行程序,但该目录不允许运行可执行文件
解决方法如下:
- 打开处理程序映射功能
- 在里面找到AspnetCore这个程序,右击出现如下选项勾选
- 点击确定即可,我就成功解决掉这个问题
接下来我遇到了HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure这个错误,当时截图没截,找的网上的替代
这个问题我找了好久的答案,有很多种原因和可能,没有通用的解决方案,我尝试了很多种方案,得出如下的解决方案,首先是我可以断言出现这个问题的原因就是程序出现了错误,没错,就是程序运行出了问题,但是我找了logs文件里的输出他就是没内容,所以卡了我很久,最后在网上找到一个查看事件查看器的方法,里面就看到了我出现的问题。
事件查看器的打开也很简单,就在搜索中搜索即可,我这里出现的问题是用户 "NT AUTHORITYNETWORK SERVICE" 登录失败,出现尝试创建内容数据库时出错
出现这个问题的原因是当前应用程序池的应用程序池标识帐户没有数据库的权限,解决方法自然是更换有权限的账户
更换完成之后这个问题就解决了,之后还遇到一个比较奇葩的问题,就是网站访问出现404 not found了,这个问题的解决方法也算简单,在web.config中添加一段代码即可
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
插入代码之后的web.config的结构大致如下
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments="*.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
重启网站,问题解决,终于访问到了网站